MyBatis 是一款優秀的持久層框架,前身為 Apache iBATIS。它支援自定義 SQL、存儲過程以及高級映射,幾乎消除了所有的 JDBC 代碼和手動設置參數、獲取結果集的工作。MyBatis 可以使用簡單的 XML 或註解來配置和映射原生類型、介面和 Java POJO 為資料庫中的記錄。
mysql-connector-java)mybatis-3.x.jar)src/main/java
└─ com.mybatis
├─ User.java // 實體類
├─ UserMapper.xml // SQL 映射文件
└─ Test.java // 測試類
src/main/resources
└─ mybatis-config.xml // 全局配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias alias="User" type="com.mybatis.User"/>
</typeAliases>
<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/test?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/mybatis/UserMapper.xml"/>
</mappers>
</configuration>
package com.mybatis;
public class User {
private int id;
private String name;
private String password;
// 無參構造器、Getter/Setter、toString 省略
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="UserMapper">
<select id="selectUser" parameterType="int" resultType="User">
SELECT id, name, password FROM user WHERE id = #{id}
</select>
<select id="selectUsers" resultType="User">
SELECT id, name, password FROM user
</select>
<insert id="insertUser" parameterType="User">
INSERT INTO user(name, password) VALUES(#{name}, #{password})
</insert>
<update id="updateUser" parameterType="User">
UPDATE user SET name=#{name}, password=#{password} WHERE id=#{id}
</update>
<delete id="deleteUser" parameterType="int">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
package com.mybatis;
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.Reader;
import java.util.List;
public class Test {
public static void main(String[] args) throws IOException {
String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
try (SqlSession session = sqlSessionFactory.openSession()) {
// 單條查詢
User user = session.selectOne("selectUser", 1);
System.out.println("單條查詢: " + user);
// 列表查詢
List<User> users = session.selectList("selectUsers");
users.forEach(System.out::println);
// 新增
User newUser = new User();
newUser.setName("測試用戶");
newUser.setPassword("123456");
session.insert("insertUser", newUser);
session.commit(); // 別忘了提交事務
System.out.println("新增後 ID: " + newUser.getId());
}
}
}
UserMapper.java 介面,配合註解或 XML,獲取類型安全的調用體驗。<resultMap> 解決字段名不一致、一對多嵌套等問題。<where>, <if>, <foreach> 等標籤構建靈活查詢條件。commit/rollback。MyBatis 以「SQL 為中心」的設計理念,給予開發者充分的 SQL 控制權,同時大幅減少樣板代碼。掌握「配置 → 映射 → 執行」核心流程,配合動態 SQL、結果映射等進階特性,即可高效完成企業級持久層開發。