Spring を使わない場合でも、MyBatis の基本機能を使って DataMapper
を適用することは可能 です。
ただし、Spring の @Mapper
や @Select
は使えないため、MyBatis の XML 設定 (mybatis-config.xml
) や SqlSession
を手動で扱う形 になります。
Spring なしの MyBatis のセットアップ
Spring を使わない場合、以下の手順 で MyBatis を設定します。
1. MyBatis の設定 (mybatis-config.xml
)
まず、MyBatis の設定ファイルを作成します。
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/DataMapper.xml"/>
</mappers>
</configuration>
dataSource
にデータベース接続情報を設定。mappers
でDataMapper.xml
を登録。- トランザクション管理は
JDBC
を使用(MyBatis 独自の管理はしない)。
2. Mapper XML の定義 (DataMapper.xml
)
次に、SQL を記述する Mapper XML
を作成します。
DataMapper.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.example.mapper.DataMapper">
<select id="getLatestUpdateTime" resultType="java.time.LocalDateTime">
WITH latest_times AS (
SELECT MAX(updated_at) AS updated_at FROM table1
UNION ALL
SELECT MAX(updated_at) FROM table2
UNION ALL
SELECT MAX(updated_at) FROM table3
UNION ALL
SELECT MAX(updated_at) FROM table4
UNION ALL
SELECT MAX(updated_at) FROM table5
UNION ALL
SELECT MAX(updated_at) FROM table6
UNION ALL
SELECT MAX(updated_at) FROM table7
UNION ALL
SELECT MAX(updated_at) FROM table8
UNION ALL
SELECT MAX(updated_at) FROM table9
UNION ALL
SELECT MAX(updated_at) FROM table10
UNION ALL
SELECT MAX(updated_at) FROM table11
)
SELECT MAX(updated_at) AS latest_update FROM latest_times;
</select>
</mapper>
-
resultType="java.time.LocalDateTime"
でLocalDateTime
型のデータを受け取れる。
3. Mapper インターフェース (DataMapper.java
)
Spring を使わない場合、MyBatis の @Mapper
は使えないので、ただのインターフェース になります。
DataMapper.java
package com.example.mapper;
import java.time.LocalDateTime;
public interface DataMapper {
LocalDateTime getLatestUpdateTime();
}
Mapper XML
の<select>
のid="getLatestUpdateTime"
に対応するメソッドを定義。@Mapper
は不要(Spring を使わないため)。- 実装は不要で、MyBatis が動的に SQL を実行する。
4. MyBatis の実行 (Main.java
)
Spring を使わない場合、MyBatis の SqlSession
を手動で管理する必要があります。
Main.java
package com.example;
import com.example.mapper.DataMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDateTime;
public class Main {
public static void main(String[] args) {
String resource = "mybatis-config.xml";
try (InputStream inputStream = Resources.getResourceAsStream(resource)) {
// MyBatisの設定を読み込んでファクトリを作成
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
try (SqlSession session = sqlSessionFactory.openSession()) {
// Mapperの取得
DataMapper mapper = session.getMapper(DataMapper.class);
// 最新の更新日時を取得
LocalDateTime latestUpdateTime = mapper.getLatestUpdateTime();
System.out.println("最新の更新日時: " + latestUpdateTime);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ポイント
mybatis-config.xml
を読み込み、SqlSessionFactory
を作成session.getMapper(DataMapper.class)
でMapper
を取得mapper.getLatestUpdateTime()
を実行し、最新の更新日時を取得- 例外処理 (
IOException
) を適切に実装
5. 必要なライブラリ(pom.xml
)
Maven を使用している場合、以下の MyBatis ライブラリを追加する必要があります。
pom.xml
<dependencies>
<!-- MyBatis コアライブラリ -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
<!-- MySQL JDBC ドライバ(データベースに応じて変更) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
</dependencies>
まとめ
設定項目 | Spring あり | Spring なし |
---|---|---|
DB接続 |
DataSource を Spring に設定 |
mybatis-config.xml に直接記述 |
Mapper インターフェース |
@Mapper を使用 |
ただの interface
|
SQL 実行 |
@Select や Mapper XML を使用 |
SqlSession を手動で管理 |
実行方法 |
@Autowired で Mapper を取得 |
SqlSessionFactory から Mapper を取得 |
✅ Spring を使わない場合のポイント
- MyBatis の
mybatis-config.xml
で DB 接続を定義する Mapper
の SQL はMapper XML
に書くSqlSessionFactory
を使ってSqlSession
を開く- 手動で
SqlSession
を管理し、適切にクローズする (try-with-resources
)
結論
Spring を使わない場合でも、MyBatis の Mapper
を XML ベースで定義し、手動で SqlSession
を管理すれば同じ処理が可能。ただし、接続管理やトランザクション管理が Spring より手間がかかる ので、可能なら Spring を使う方が簡単。