mybatis-demo
├─ src
│ ├─ main
│ │ ├─ java
│ │ │ └─ com.fanyafeng
│ │ │ ├─ dao # Mapper 介面
│ │ │ ├─ model # 實體類別與對應 XML
│ │ │ └─ test # 測試類別
│ │ └─ resources
│ │ ├─ Configuration.xml # MyBatis 核心設定
│ │ ├─ log4j.properties # 日誌設定
│ │ └─ com/fanyafeng/model/User.xml # SQL Mapping
│ └─ test
└─ pom.xml
User.javapackage com.fanyafeng.model;
import java.util.Date;
public class User {
private int id;
private String username;
private Date birthday;
private String sex;
private String address;
// Getter/Setter/toString 略
}
IUserDao.javapackage com.fanyafeng.dao;
import com.fanyafeng.model.User;
import java.util.List;
public interface IUserDao {
List<User> queryUserByName(String name);
User selectUserById(int id);
void add(User user);
void del(int id);
void alter(int id);
}
User.xml<?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="com.fanyafeng.dao.IUserDao">
<select id="selectUserById" parameterType="int" resultType="com.fanyafeng.model.User">
SELECT * FROM user WHERE id = #{id}
</select>
<select id="queryUserByName" parameterType="String" resultType="com.fanyafeng.model.User">
SELECT * FROM user WHERE username LIKE #{name}
</select>
<insert id="add" parameterType="com.fanyafeng.model.User">
INSERT INTO user (id, username, birthday, sex, address)
VALUES (#{id}, #{username}, #{birthday}, #{sex}, #{address})
</insert>
</mapper>
注意:建議將 User.xml 放在 resources 目錄下對應套件路徑,而非 model 目錄,避免 Maven 編譯時未複製 XML 檔案。
Configuration.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>
<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:3306/mybatis?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/fanyafeng/model/User.xml"/>
</mappers>
</configuration>
UserTest.javapackage com.fanyafeng.test;
import com.fanyafeng.model.User;
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.Reader;
import java.util.Date;
import java.util.List;
public class UserTest {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
Reader reader = Resources.getResourceAsReader("Configuration.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
// 查詢單筆
// User user = sqlSession.selectOne("com.fanyafeng.dao.IUserDao.selectUserById", 2);
// 模糊查詢
List<User> userList = sqlSession.selectList("com.fanyafeng.dao.IUserDao.queryUserByName", "%李寧%");
userList.forEach(System.out::println);
// 新增
User user = new User();
user.setId(100);
user.setUsername("李寧");
user.setSex("女");
user.setAddress("家裡蹲");
user.setBirthday(new Date());
int rows = sqlSession.insert("com.fanyafeng.dao.IUserDao.add", user);
sqlSession.commit(); // 別忘了提交!
System.out.println("新增筆數:" + rows);
} finally {
sqlSession.close();
}
}
}
在 pom.xml 的 <build> 區塊加入 <resources>:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
這樣 mvn compile 才會把 src/main/java 下的 *.xml 複製到 target/classes,避免 Resource not found 錯誤。
Configuration.xml 中 mapper resource 必須與 target/classes 實際路徑一致。com.mysql.cj.jdbc.Driver 並加 useSSL=false&serverTimezone=UTC。slf4j-log4j12 與 log4j-api/log4j-core 易產生綁定衝突,建議統一用 Log4j 2.x。本文從專案結構、核心程式碼、Maven 設定完整示範 IntelliJ IDEA 整合 MyBatis 連線 MySQL。掌握 SqlSessionFactory 建立、Mapper 介面對應、事務提交與資源複製設定,即可快速上手 MyBatis 開發。