0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Mybatisの基本的な文法

Last updated at Posted at 2025-04-27

基本構文

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タグにuseGeneratedKeyskeyProperty、格納先となる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に変数を渡す際の注意

こちらの記事を参照

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?