首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

MyBatis CRUD 完整實戰教學:從建表到測試一步到位

     編輯:Java 相關知識

專案背景與準備

本文以一個 user 表為例,示範 MyBatis 如何完成創建、讀取、更新、刪除(CRUD)全流程。採用 XML 映射檔 + 介面式開發模式,結構清晰,易於維護。

1. 資料庫建表腳本

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userName` varchar(50) DEFAULT NULL,
  `userAge` int(11) DEFAULT NULL,
  `userAddress` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `user` VALUES 
('1', 'summer', '30', 'shanghai'),
('2', 'test2', '22', 'suzhou'),
('3', 'test1', '29', 'some place'),
('4', 'lu', '28', 'some place'),
('5', 'xiaoxun', '27', 'nanjing');

2. 核心配置文件 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>
  <typeAliases>
    <typeAlias alias="User" type="com.mybatis.test.User"/>
  </typeAliases>
  <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://127.0.0.1:3306/mybatis"/>
        <property name="username" value="root"/>
        <property name="password" value="admin"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/mybatis/test/User.xml"/>
  </mappers>
</configuration>

3. Mapper 映射文件 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.mybatis.test.IUserOperation">
  <!-- 單條查詢 -->
  <select id="selectUserByID" parameterType="int" resultType="User">
    SELECT * FROM `user` WHERE id = #{id}
  </select>

  <!-- 多條查詢(按姓名) -->
  <select id="selectUsersByName" parameterType="string" resultType="User">
    SELECT * FROM `user` WHERE userName = #{userName}
  </select>

  <!-- 新增:回寫自增主鍵 -->
  <insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO `user`(userName, userAge, userAddress) VALUES(#{userName}, #{userAge}, #{userAddress})
  </insert>

  <!-- 修改 -->
  <update id="updateUser" parameterType="User">
    UPDATE `user` SET userName=#{userName}, userAge=#{userAge}, userAddress=#{userAddress} WHERE id=#{id}
  </update>

  <!-- 刪除 -->
  <delete id="deleteUser" parameterType="int">
    DELETE FROM `user` WHERE id=#{id}
  </delete>
</mapper>

關鍵點:

  • useGeneratedKeys="true" keyProperty="id" 讓 MyBatis 自動獲取資料庫生成的自增 ID 並回填到對象。
  • parameterType 與介面方法參數類型一致;resultType 對應返回實體類。
  • 若欄位名與屬性名不一致,可用 <resultMap> 映射(文中註釋部分示範)。

4. 實體類 User.java

package com.mybatis.test;
public class User {
    private int id;
    private String userName;
    private int userAge;
    private String userAddress;
    // Getter/Setter 省略
    @Override public String toString() {
        return userName + " " + userAge + " " + userAddress;
    }
}

5. 操作介面 IUserOperation.java

package com.mybatis.test;
import java.util.List;
public interface IUserOperation {
    User selectUserByID(int id);
    List<User> selectUsersByName(String userName);
    void addUser(User user);
    void updateUser(User user);
    void deleteUser(int id);
}

6. 測試類 Test.java —— 關鍵:增刪改必須 commit()

package com.mybatis.test;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class Test {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            Reader reader = Resources.getResourceAsReader("Configuration.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (Exception e) { e.printStackTrace(); }
    }

    public void getUserByID(int userID) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            IUserOperation op = session.getMapper(IUserOperation.class);
            User user = op.selectUserByID(userID);
            if (user != null) System.out.println(user.getId() + ":" + user.getUserName() + ":" + user.getUserAddress());
        }
    }

    public void addUser() {
        User user = new User();
        user.setUserAddress("place");
        user.setUserName("test_add");
        user.setUserAge(30);
        try (SqlSession session = sqlSessionFactory.openSession()) {
            IUserOperation op = session.getMapper(IUserOperation.class);
            op.addUser(user);
            session.commit(); // ★ 必須提交事務
            System.out.println("新增用戶ID:" + user.getId());
        }
    }
    // updateUser、deleteUser 同理需 commit()
    public static void main(String[] args) { /* 測試代碼省略 */ }
}

常見坑點提醒

  1. 忘記 session.commit():MyBatis 預設不自動提交,增刪改不提交數據不會落庫。
  2. 資源未關閉:建議使用 try-with-resources 或 finally 確保 session.close()。
  3. 映射文件 namespace 與介面全限定名不一致:會導致綁定失敗。

總結

MyBatis CRUD 核心在於:配置文件正確、映射 SQL 與介面方法一一對應、事務手動提交。掌握此範例,即可輕鬆擴展至複雜業務場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved