基本構文
GET
UserService.java
public List<User> list() {
// 一覧取得
return userMapper.list()
}
UserMapper.java
@Mapper
public interface UserMapper {
List<User> list();
}
UserMapper.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="com.app.example.mapper.UserMapper">
<select id="list" resultType="com.app.example.entity.User">
SELECT
id, name, age
FROM
user
ORDER BY id ASC
</select>
</mapper>
UPDATE
UserService.java
public void update(Integer id) {
// 更新処理(戻り値は更新件数)
Integer result = userMapper.update(id)
}
UserMapper.java
@Mapper
public interface UserMapper {
Integer update(Integer id);
}
UserMapper.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="com.app.example.mapper.UserMapper">
<update id="update">
UPDATE
USER
SET
name = #{name},
age = #{age},
updated_at = NOW()
WHERE
id = #{userId}
</update>
</mapper>
INSERT
UserService.java
public void register(UserRequestDto dto) {
// 登録処理(戻り値は登録件数)
Integer result = userMapper.insert(dto)
}
UserMapper.java
@Mapper
public interface UserMapper {
Integer insert(UserRequestDto dto);
}
UserMapper.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="com.app.example.mapper.UserMapper">
<insert id="register" parameterType="jp.example.com.test.domain.entity.UserRequestDto">
INSERT INTO user
(id, name, nameReading, address)
VALUES
(#{id}, #{name}, #{nameReading}, #{address})
</insert>
</mapper>
BULK INSERT
UserService.java
/**
* ユーザーの一括登録
*
* @param entityList 登録リスト
* @return 登録件数
*/
public Integer bulkInsert(List<User> entityList) {
return userMapper.bulkInsert(entityList);
}
UserMapper.xml
<insert id="bulkInsert">
INSERT INTO user
(id, name, age)
VALUES
<foreach collection="entityList" item="entity" separator=",">
(
#{entity.id}, #{entity.name}, #{entity.age}
)
</foreach>
</insert>
応用編
●insert後に、autoincrementで挿入されたカラムの値を受け取る
まず以下のようなテーブルがあるとする。
CREATE TABLE users (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
name_reading VARCHAR(255),
address VARCHAR(255)
);
カラムID
はAutoIncrement属性が付与されているため、INSERT時には自動で値が登録される。
insert後にこの自動採番されたカラムを取得するには
mapper.xmlのinsertタグにuseGeneratedKeys
と keyProperty
、格納先となるparameterType
を指定してあげる
UserMapper.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="com.app.example.mapper.CompanyMapper">
<insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="com.app.example.entity.Users">
INSERT INTO
company
(id, name, nameReading, address)
VALUES
(#{id}, #{name}, #{nameReading}, #{address})
</insert>
</mapper>
UserService.java
public void register(String name, Integer age, String nameReading) {
// 登録情報の設定
Users entity = usersInjector(name, age, nameReading)
// 登録処理
userMapper.insert(entity);
// insertされたAutoIncrement属性のカラム「ID」の値を取得する
Integer userId = entity.getId();
}
●SQLの部品化
UserMap.xml
/** ユーザー情報取得 **/
<select id="getUserInfo">
SELECT
<include refId="selectClause" />
FROM
user
WHERE
id = #{userId}
</select>
/** ユーザー情報取得(SELECT句) **/
<sql>
id,
name,
age
</sql>
●ResultMapの使い方
こちらの記事を参照
●SELECT時に、ORDER BYに変数を渡す際の注意
こちらの記事を参照