モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)
目次目次を開く/閉じる

Spring Boot から MyBatis を利用するための設定 (Gradle/MySQL)

モーダルを閉じる

ステッカーを選択してください

すごい技術力!
モーダルを閉じる

お支払い内容をご確認ください

購入商品
「すごい技術力!」ステッカーの表示権
メッセージ
料金
¥100(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

MyBatis を Spring Boot で利用するための基本的な設定およびサンプルコードをまとめます。サンプルコードにおいては、特に MySQL を対象とします。

公式の解説動画

Spring Tips: MyBatis

サンプルプロジェクト構成

基本的な Gradle プロジェクトです。

.
|-- build.gradle
|-- gradle
|   `-- wrapper
|       |-- gradle-wrapper.jar
|       `-- gradle-wrapper.properties
|-- gradlew
|-- gradlew.bat
`-- src
    `-- main
        |-- java
        |   `-- hello
        |       |-- Application.java
        |       |-- City.java
        |       |-- CityMapper.java
        |       `-- HelloController.java
        `-- resources
            |-- application.yml
            |-- data.sql
            `-- schema.sql
Plain text

build.gradle

org.mybatis.spring.boot:mybatis-spring-boot-starter のバージョンは spring-boot-gradle-plugin によって自動解決されないため、こちらのページをもとに調べて指定する必要があります。今回は 1.3.0 を利用します。

buildscript {
    ext {
        springBootVersion = '1.5.3.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'

jar {
    baseName = 'gs-spring-boot'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')

    compile('mysql:mysql-connector-java:6.0.6')

    // 以下のページをもとにバージョンを指定します。
    // http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/
    // http://search.maven.org/#artifactdetails|org.mybatis.spring.boot|mybatis-spring-boot-starter|1.3.0|jar
    compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.0')
}
Gradle

src/main/resources/application.yml

MySQL DB 接続情報を設定します。

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: myuser
    password: myuser
    driver-class-name: com.mysql.jdbc.Driver
YAML

src/main/resources/{schema|data}.sql

出力先 MySQL テーブルの DDL および DML です。こちらのページに記載されているとおり、schema.sql および data.sql というファイル名の SQL がアプリケーション起動時に実行されます。より柔軟かつ高度な初期化処理が必要な場合は Flyway と連携するように設定します

schema.sql

DROP TABLE IF EXISTS city;
CREATE TABLE city (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255),
    state VARCHAR(255),
    country VARCHAR(255)
);
SQL

data.sql

INSERT INTO city (name, state, country) VALUES ('San Francisco', 'CA', 'US');
SQL

src/main/java/hello/Application.java

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
Java

src/main/java/hello/City.java

Getter/Setter が定義されたドメインクラスです。Lombok の @Data などを利用すると簡潔な記述が可能になりますが、今回は使用していません。

package hello;

public class City {

    private Long id;
    private String name;
    private String state;
    private String country;

    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getState() {
        return this.state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getCountry() {
        return this.country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    @Override
    public String toString() {
        return getId() + "," + getName() + "," + getState() + "," + getCountry();
    }
}
Java

src/main/java/hello/CityMapper.java

@Param アノテーションは、今回のようにパラメータが一つの場合は指定しなくても問題ありませんが、複数パラメータが存在する場合は SQL クエリ内のパラメータとメソッド引数の対応関係を設定するために指定する必要があります。また、ここでは @Select アノテーションで SQL を設定していますが、より柔軟な設定を行うためには後述の XML ファイルを利用します。

package hello;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface CityMapper {
    @Select("SELECT id, name, state, country FROM city WHERE state = #{state}")
    City findByState(@Param("state") String state);
}
Java

src/main/java/hello/HelloController.java

cityMapper.findByState() および sqlSession.selectOne() を利用する例です。実際にはコントローラ内で直接利用するのではなく@Service や @Repository を設定したクラス内で利用します。

package hello;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @Autowired
    private CityMapper cityMapper;

    @Autowired
private SqlSession sqlSession;

    @RequestMapping("/")
    public String index() {
        City city1 = cityMapper.findByState("CA");
        City city2 = sqlSession.selectOne("hello.CityMapper.findByState", "CA");
        System.out.println(city1);
        System.out.println(city2);
        return "Greetings from Spring Boot!";
    }
}
Java

XML による SQL 設定

サンプルプロジェクトにおいて、アノテーションで設定していた箇所を XML ファイルに置き換えると以下のようになります。

src/main/java/hello/CityMapper.java

package hello;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
//import org.apache.ibatis.annotations.Select;

@Mapper
public interface CityMapper {
    // @Select("SELECT id, name, state, country FROM city WHERE state = #{state}")
    City findByState(@Param("state") String state);
}
Java

src/main/resources/hello/CityMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="hello.CityMapper">
  <select id="findByState" resultType="hello.City">
    SELECT * FROM city WHERE state = #{state}
  </select>
</mapper>
XML

SQL 設定のサンプル集

凡例

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="hello.CityMapper">

  [[SQL 設定がここに入ります]]

</mapper>
XML

適宜 @Param 設定を設定してください。返り値も適宜 List<City> に変更してください。

package hello;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface CityMapper {
    City findByState(@Param("name") String name, @Param("state") String state);
}
Java

動的 SQL

if

<select id="findByState" resultType="hello.City">
  SELECT * FROM city WHERE name LIKE #{name}
  <if test="state != null">
    AND state = #{state}
  </if>
</select>
Plain text

choose

いずれか一つだけ選択されます。switch-case 文のようなものです。

<select id="findByState" resultType="hello.City">
  SELECT * FROM city WHERE
  <choose>
    <when test="name != null">
      name = #{name}
    </when>
    <when test="state != null">
      state = #{state}
    </when>
    <otherwise>
      country = 'mycountry'
    </otherwise>
  </choose>
</select>
Plain text

where

where を利用すると、条件に一つも合致しない場合は何も挿入されず、合致した最初の条件が AND や OR から始まる場合は取り除かれます。以下の例で name も state も指定しないと city が全件返されます。state だけ指定すると AND が削除されて WHERE 句が挿入されます。

<select id="findByState" resultType="hello.City">
  SELECT * FROM city
  <where>
    <if test="name != null">
      name = #{name}
    </if>
    <if test="state != null">
      AND state = #{state}
    </if>
  </where>
</select>
Plain text

trim

where のような機能をカスタマイズして実現したい場合は trim を利用します。where のサンプルコードを trim で記述すると以下のようになります。

<select id="findByState" resultType="hello.City">
  SELECT * FROM city
  <trim prefix="WHERE" prefixOverrides="AND |OR ">
    <if test="name != null">
      name = #{name}
    </if>
    <if test="state != null">
      AND state = #{state}
    </if>
  </trim>
</select>
Plain text

set

UPDATE 文について、set を利用すると合致した最後の条件が , で終わる場合は取り除かれます。where の場合と同様に trim で同等の機能を実現できます。

<update id="findByState">
  UPDATE city
  <set>
    <if test="name != null">name=#{name},</if>
    <if test="state != null">state=#{state}</if>
  </set>
  WHERE country = 'US'
</update>
Plain text

foreach

<select id="findByState" resultType="hello.City">
  SELECT * FROM city WHERE name IN
  <foreach item="name" index="index" collection="names" open="(" separator="," close=")">
    #{name}
  </foreach>
</select>
Plain text

bind

一時変数を定義できます。引数も参照できます。

<select id="findByState" resultType="hello.City">
  <bind name="pattern" value="'%' + name + '%'" />
  SELECT * FROM city WHERE name LIKE #{pattern}
</select>
Plain text

静的 SQL

select

ここまでのサンプルで利用してきた、独自に定義した City 以外にも、基本的な resultType が予め用意されています。例えば hashmap を利用すると以下のようになります。

Mapper interface

Map<String, Object> findByState(@Param("state") String state);
Plain text

XML

<select id="findByState" resultType="hashmap">
  SELECT * FROM city WHERE state = #{state}
</select>
Plain text

利用例

Map<String, Object> city = cityMapper.findByState("CA");
//→ {country=US, name=San Francisco, id=1, state=CA}
Plain text

insert

Mapper interface

int insertCity(City city); // `id` 指定も可能ですが、無指定であれば自動で設定されます (後述)
Plain text

XML

<insert id="insertCity" parameterType="hello.City" useGeneratedKeys="true" keyProperty="id">
  INSERT INTO city (id, name, state, country) VALUES (#{id}, #{name}, #{state}, #{country})
</insert>
Plain text
  • useGeneratedKeys MySQL の AUTO_INCREMENT などを利用したい場合
  • keyProperty 設定した useGeneratedKeys の対象となる列名

利用例

cityMapper.insertCity(city); // INSERT された行数が返ります。
Plain text

前述の foreach と合わせて利用する例は以下のようになります。

Mapper interface

int insertCities(List<City> cities);
Plain text

XML

<insert id="insertCities" parameterType="hello.City" useGeneratedKeys="true">
  INSERT INTO city (id, name, state, country) VALUES
  <foreach item="city" collection="cities" separator=",">
    (#{city.id}, #{city.name}, #{city.state}, #{city.country})
  </foreach>
</insert>
Plain text

利用例

cityMapper.insertCities(cities); // INSERT された行数が返ります。
Plain text

update

前述の set を利用せずに update を記述すると以下のようになります。

Mapper interface

int updateCity(City city);
Plain text

XML

<update id="updateCity" parameterType="hello.City">
  UPDATE city SET
    name = #{name},
    state = #{state},
    country = #{country}
  WHERE id = #{id}
</update>
Plain text

利用例

cityMapper.updateCity(city); // UPDATE された行数が返ります。
Plain text

delete

Mapper interface

int deleteCity(City city);
Plain text

XML

<delete id="deleteCity" parameterType="hello.City">
  DELETE FROM city WHERE id = #{id}
</delete>
Plain text

利用例

cityMapper.deleteCity(city); // DELETE された行数が返ります。
Plain text

sql (部分的な SQL 文)

sql を利用すると、SQL 文をパーツ化して使い回すことができます。例えば、以下のクエリは無理矢理三つの設定に分解できます。

<select id="findByState" resultType="hello.City">
  SELECT * FROM city WHERE state = #{state}
</select>
Plain text

<sql id="my_refid1">
  ${my_prop1}
</sql>

<sql id="my_refid2">
  FROM <include refid="${my_prop2}"/>
</sql>

<select id="findByState" resultType="hello.City">
  SELECT *
  <include refid="my_refid2">
    <property name="my_prop1" value="city" />
    <property name="my_prop2" value="my_refid1" />
  </include>
  WHERE state = #{state}
</select>
Plain text

resultMap

resultMap を利用すると、SQL の結果列と Java オブジェクトのプロパティの対応関係を設定できます。以下のような基本的な場合であれば自動で対応関係が解決されるため設定は不要ですが、無理矢理 name 列を name, state, country プロパティに対応させるための設定を行いたい場合は以下のようになります。

<select id="findByState" resultType="hello.City">
  SELECT * FROM city WHERE state = #{state}
</select>
Plain text

<resultMap id="cityResultMap" type="hello.City">
  <id property="id" column="id"/>
  <result property="name" column="name"/>
  <result property="state" column="name"/>
  <result property="country" column="name"/>
</resultMap>

<select id="findByState" resultMap="cityResultMap">
  SELECT * FROM city WHERE state = #{state}
</select>
Plain text

resultMap を利用した JOIN クエリの記述の準備

resultMap の主な用途は JOIN クエリの結果のマッピングです。

JOIN 対象となるデータの準備

schema.sql

DROP TABLE IF EXISTS city;
CREATE TABLE city (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255),
    state VARCHAR(255),
    country VARCHAR(255)
);

DROP TABLE IF EXISTS person;
CREATE TABLE person (
    id INT PRIMARY KEY AUTO_INCREMENT,
    city_id INT,
    name VARCHAR(255)
);
SQL

data.sql

INSERT INTO city (id, name, state, country) VALUES (1, 'San Francisco1', 'CA1', 'US1');
INSERT INTO city (id, name, state, country) VALUES (2, 'San Francisco2', 'CA2', 'US2');
INSERT INTO person (city_id, name) VALUES (1, 'myname1');
INSERT INTO person (city_id, name) VALUES (2, 'myname2');
INSERT INTO person (city_id, name) VALUES (2, 'myname3');
SQL

結果の確認

mysql> select * from city;
+----+----------------+-------+---------+
| id | name           | state | country |
+----+----------------+-------+---------+
|  1 | San Francisco1 | CA1   | US1     |
|  2 | San Francisco2 | CA2   | US2     |
+----+----------------+-------+---------+
2 rows in set (0.00 sec)

mysql> select * from person;
+----+---------+---------+
| id | city_id | name    |
+----+---------+---------+
|  1 |       1 | myname1 |
|  2 |       2 | myname2 |
|  3 |       2 | myname3 |
+----+---------+---------+
3 rows in set (0.00 sec)

mysql> SELECT *
    -> FROM
    ->   city AS c
    ->   LEFT JOIN person AS p ON c.id = p.city_id;
+----+----------------+-------+---------+------+---------+---------+
| id | name           | state | country | id   | city_id | name    |
+----+----------------+-------+---------+------+---------+---------+
|  1 | San Francisco1 | CA1   | US1     |    1 |       1 | myname1 |
|  2 | San Francisco2 | CA2   | US2     |    2 |       2 | myname2 |
|  2 | San Francisco2 | CA2   | US2     |    3 |       2 | myname3 |
+----+----------------+-------+---------+------+---------+---------+
3 rows in set (0.00 sec)
Plain text

ドメインモデル

既出の City に people を追加しました。今回 Person を新規追加します。

City.java

package hello;

import java.util.List;

public class City {

    private Long id;
    private String name;
    private String state;
    private String country;

    private List<Person> people; // 新規追加

    public List<Person> getPeople() { // 新規追加
        return this.people;
    }

    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getState() {
        return this.state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getCountry() {
        return this.country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    @Override
    public String toString() {
        return getId() + "," + getName() + "," + getState() + "," + getCountry() + "," + getPeople(); // 変更
    }
}
Java

Person.java

package hello;

public class Person {

    private Long id;
    private Long cityId;
    private String name;

    private City city;

    public City getCity() {
        return this.city;
    }

    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getCityId() {
        return this.cityId;
    }

    public void setCityId(Long cityId) {
        this.cityId = cityId;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return getId() + "," + getCityId() + "," + getName();
    }
}
Java

JOIN クエリの XML 設定例

Rails の ActiveRecord における「belongs_to に相当する association」と「has_many に相当する collection」のサンプル設定を記載します。

association (belongs_to)

<resultMap id="personResultMap" type="hello.Person">
  <id property="id" column="person_id"/>
  <result property="cityId" column="city_id"/>
  <result property="name" column="person_name"/>
  <association property="city" javaType="hello.City">
    <id property="id" column="city_id"/>
    <result property="name" column="city_name"/>
    <result property="state" column="city_state"/>
    <result property="country" column="city_country"/>
  </association>
</resultMap>

<select id="findById" resultMap="personResultMap">
SELECT
  p.id AS person_id,
  p.name AS person_name,
  c.id AS city_id,
  c.name AS city_name,
  c.state AS city_state,
  c.country AS city_country
FROM
  person AS p
  LEFT JOIN city AS c ON p.city_id = c.id
WHERE p.id = #{id}
</select>
Plain text

上記 resultMap は分割して設定することができます。

<resultMap id="personResultMap" type="hello.Person">
  <id property="id" column="person_id"/>
  <result property="cityId" column="city_id"/>
  <result property="name" column="person_name"/>
  <association property="city" resultMap="cityResultMap"/>
</resultMap>

<resultMap id="cityResultMap" type="hello.City">
  <id property="id" column="city_id"/>
  <result property="name" column="city_name"/>
  <result property="state" column="city_state"/>
  <result property="country" column="city_country"/>
</resultMap>
Plain text

collection (has_many)

<resultMap id="cityResultMap" type="hello.City">
  <id property="id" column="city_id"/>
  <result property="name" column="city_name"/>
  <result property="state" column="city_state"/>
  <result property="country" column="city_country"/>
  <collection property="people" ofType="hello.Person">
    <id property="id" column="person_id"/>
    <result property="cityId" column="city_id"/>
    <result property="name" column="person_name"/>
  </collection>
</resultMap>

<select id="findByState" resultMap="cityResultMap">
SELECT
  c.id AS city_id,
  c.name AS city_name,
  c.state AS city_state,
  c.country AS city_country,
  p.id AS person_id,
  p.name AS person_name
FROM
  city AS c
  LEFT JOIN person AS p ON c.id = p.city_id
WHERE c.state = #{state}
</select>
Plain text

実行例

cityMapper.findByState("CA0");
→ null

cityMapper.findByState("CA1");
→ 1,San Francisco1,CA1,US1,[1,1,myname1]

cityMapper.findByState("CA2");
→ 2,San Francisco2,CA2,US2,[2,2,myname2, 3,2,myname3]
Plain text

MyBatis Generator (補足)

MyBatis の SQL 設定 XML ファイルの雛形を、DB のスキーマ情報から自動生成するプラグイン MyBatis Generator を利用すると、初期設定の手間が軽減されます。

build.gradle

buildscript {
    ext {
        springBootVersion = '1.5.3.RELEASE'
    }
    repositories {
        mavenCentral()
        // ここから追加
        maven {
            url 'https://plugins.gradle.org/m2/'
        }
        // ここまで追加
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath('gradle.plugin.com.arenagod.gradle:mybatis-generator-plugin:1.4') // 追加
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'com.arenagod.gradle.MybatisGenerator' // 追加

jar {
    baseName = 'gs-spring-boot'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')
    compile('mysql:mysql-connector-java:6.0.6')
    compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.0')
}

// ここから追加
configurations {
    mybatisGenerator
}

mybatisGenerator {
    verbose = true
    configFile = 'src/main/resources/autogen/generatorConfig.xml'
}
// ここまで追加
Gradle

src/main/resources/autogen/generatorConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
  <context id="MySQLTables" targetRuntime="MyBatis3">

    <!-- スキーマ情報を取得する DB への接続設定 -->
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
        connectionURL="jdbc:mysql://localhost:3306/mydb"
        userId="myuser"
        password="myuser">
    </jdbcConnection>

    <!-- SELECT 結果等を格納するドメインモデルを生成する設定 -->
    <javaModelGenerator targetPackage="test.model" targetProject="./src">
      <property name="enableSubPackages" value="true" />
      <property name="trimStrings" value="true" />
    </javaModelGenerator>

    <!-- SQL 設定が記述された XML を生成する設定 -->
    <sqlMapGenerator targetPackage="test.xml" targetProject="./src">
      <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>

    <!-- マッパークラスを生成する設定 -->
    <javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="./src">
      <property name="enableSubPackages" value="true" />
    </javaClientGenerator>

    <!-- コードを生成するテーブルを指定 -->
    <table schema="mydb" tableName="city">
      <property name="useActualColumnNames" value="true" />
    </table>

  </context>
</generatorConfiguration>
XML

実行例

./gradlew mbGenerator
Plain text

結果ファイル

$ tree src/test/
src/test/
|-- dao
|   `-- CityMapper.java
|-- model
|   |-- City.java
|   `-- CityExample.java
`-- xml
    `-- CityMapper.xml
Plain text
0
詳細設定を開く/閉じる
アカウント プロフィール画像 (本文下)

フロントからバックエンドまで、幅広い技術をカバーしています。

記事の執筆者にステッカーを贈る

有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

さらに詳しく →
ステッカーを贈る コンセプト画像

Feedbacks

Feedbacks コンセプト画像

    ログインするとコメントを投稿できます。

    関連記事

    • Spring Security フォームログインのサンプルコード
      Spring フレームワークによる Web アプリケーション開発で、ログイン処理を実装する際は Spring Security が便利です。ここでは特に Spring Boot で Web アプリケーションを開発する場合を対象とし、フォームによる ID/Password ログインを行うためのサンプルコードをまとめます。 公式ドキュメント [Spring Security チュートリアル](http...
      えびちゃんえびちゃん12/4/2019に更新
      いいねアイコン画像0
    • Java配列の宣言方法 (C/C++との違い)
      Javaの配列 Javaの配列宣言方法はC/C++と似ているようで若干異なる。 初期化しない場合 C/C++の int array[10]; はJavaでは int array[] = new int[10]; となる。同様にC/C++の int array[3][3]; はJavaでは int array[][] = new int[3][3]; となる。 初期化
      てんとうむしてんとうむし5/13/2018に更新
      いいねアイコン画像0
    • PlantUML による UML 図の描き方
      サムネイル画像-c788fffde5
      PlantUML はテキスト形式で表現されたシーケンス図やクラス図といった UML (Unified Modeling Language) 図の情報から画像を生成するためのツールです。簡単な使い方をまとめます。 インストール方法の選択 Atom や Eclipse のプラグインをインストールしてエディタから利用する方法、JAR をダウンロードして Java コマンドで実行する方法、Redmine ...
      kentakenta1/20/2020に更新
      いいねアイコン画像0
    • Akka HTTP サンプルコード (Scala)
      サムネイル画像-a98142497c
      Akka アクターを用いて実装された汎用 HTTP フレームワークです。Spray の後継です。コアモジュールである akka-http-core は 2016/2/17 に experimental が外れました。akka-http などのいくつかのサブモジュールは 2016/3/1 現在 experimental のままですが、基本的な
      雄太雄太10/6/2021に更新
      いいねアイコン画像0
    • Kestrel の使用例
      Kestrel は Message Queue (MQ) の実装のひとつです。一般に MQ はアプリケーション間やプロセス間、スレッド間で非同期に通信するために用いられます。メッセージの送信側は MQ に書き込めば受信側の応答を待たずに次の処理に非同期に進むことができます。Kestrel はわずか 2500 行程の Scala で実装されており JVM で動作します。MQ 自体はメモリ上に存在する...
      したくんしたくん10/11/2017に更新
      いいねアイコン画像0