MyBatis入門向けチートシート

2025年3月作成 | Java開発者のための必須ガイド

🔍MyBatisとは何か?

MyBatisはJava向けの人気のORM(オブジェクト関係マッピング)フレームワークです。SQLとJavaオブジェクトの間のマッピングを簡素化し、JDBCの複雑さを抽象化します。

従来のJDBCと比較したMyBatisの利点:

  • SQLの完全制御を維持
  • 複雑なオブジェクトグラフの自動マッピング
  • 動的SQLの作成が容易
  • 学習曲線が緩やか

⚙️基本コンポーネント

1. Configuration XML

MyBatisの動作を設定するメインファイル

mybatis-config.xml <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost/db"/> <property name="username" value="root"/> <property name="password" value="1234"/> </dataSource> </environment> </environments> <mappers> <mapper resource="UserMapper.xml"/> </mappers> </configuration>

2. SqlSessionFactory

MyBatisアプリケーションの中心的な部分。SQLセッションを作成します。

Java String resource = "mybatis-config.xml"; InputStream is = Resources.getResourceAsStream(resource); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);

📝マッパーXML

SQLステートメントとJavaオブジェクトのマッピングを定義します。

UserMapper.xml <mapper namespace="com.example.UserMapper"> <select id="getUserById" resultType="com.example.User"> SELECT * FROM users WHERE id = #{id} </select> <insert id="insertUser" parameterType="com.example.User"> INSERT INTO users (name, email) VALUES (#{name}, #{email}) </insert> <update id="updateUser"> UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id} </update> <delete id="deleteUser"> DELETE FROM users WHERE id = #{id} </delete> </mapper>

マッパーインターフェイス

XMLマッピングに対応するJavaインターフェイス

Java public interface UserMapper { User getUserById(int id); void insertUser(User user); void updateUser(User user); void deleteUser(int id); }

🔄基本的なCRUD操作

SQLセッションを使用した操作

Java // セッションを開く SqlSession session = factory.openSession(); try { // マッパーを取得 UserMapper mapper = session.getMapper(UserMapper.class); // 操作を実行 User user = mapper.getUserById(1); // 新規ユーザー追加 User newUser = new User(); newUser.setName("山田太郎"); newUser.setEmail("yamada@example.com"); mapper.insertUser(newUser); // コミット session.commit(); } finally { // セッションを閉じる session.close(); }

動的SQL

条件に基づいて動的にSQLを構築するための強力な機能

主要な動的SQL要素:

if条件 <select id="findUsers" resultType="User"> SELECT * FROM users WHERE 1=1 <if test="name != null"> AND name LIKE #{name} </if> <if test="email != null"> AND email = #{email} </if> </select>
choose, when, otherwise <select id="findUser" resultType="User"> SELECT * FROM users <choose> <when test="id != null"> WHERE id = #{id} </when> <when test="name != null"> WHERE name = #{name} </when> <otherwise> WHERE active = true </otherwise> </choose> </select>
foreach <select id="getUsersByIdList" resultType="User"> SELECT * FROM users WHERE id IN <foreach item="item" collection="list" open="(" separator="," close=")"> #{item} </foreach> </select>

💡ベストプラクティス

効率的なMyBatis使用のためのヒント:

  • 適切なキャッシュ戦略を使用する
  • 複雑なクエリにはResultMapを使う
  • トランザクション管理に注意する
  • パラメータにTypedハンドラを使用する

キャッシュの設定例

Mapper XML <cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/>

ResultMap例

複雑なマッピング <resultMap id="userResultMap" type="User"> <id property="id" column="user_id" /> <result property="name" column="user_name"/> <result property="email" column="user_email"/> <association property="profile" javaType="Profile"> <id property="id" column="profile_id"/> <result property="bio" column="bio"/> </association> </resultMap>