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

MyBatis CRUD 完整實戰:從配置到代碼的增刪改查最佳實踐

     編輯:Java 相關知識

環境準備

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.13</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>

核心配置文件

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.test.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/mybatis?useSSL=false&serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/mybatis/test/UserMapper.xml"/>
    </mappers>
</configuration>

UserMapper.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.UserMapper">
    <resultMap id="userMap" type="User">
        <id property="id" column="id"/>
        <result property="userName" column="user_name"/>
        <result property="userAge" column="user_age"/>
        <result property="userAddress" column="user_address"/>
    </resultMap>

    <select id="selectById" parameterType="int" resultMap="userMap">
        SELECT * FROM `user` WHERE id = #{id}
    </select>

    <select id="selectByName" parameterType="string" resultMap="userMap">
        SELECT * FROM `user` WHERE user_name = #{userName}
    </select>

    <insert id="insert" parameterType="User" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO `user`(user_name, user_age, user_address) 
        VALUES(#{userName}, #{userAge}, #{userAddress})
    </insert>

    <update id="update" parameterType="User">
        UPDATE `user` SET user_name=#{userName}, user_age=#{userAge}, 
        user_address=#{userAddress} WHERE id=#{id}
    </update>

    <delete id="delete" parameterType="int">
        DELETE FROM `user` WHERE id = #{id}
    </delete>
</mapper>

實體類與 Mapper 接口

// User.java
public class User {
    private Integer id;
    private String userName;
    private Integer userAge;
    private String userAddress;
    // getter/setter/toString 省略
}

// UserMapper.java
public interface UserMapper {
    User selectById(Integer id);
    List<User> selectByName(String userName);
    void insert(User user);
    void update(User user);
    void delete(Integer id);
}

測試類:事務控制關鍵點

public class MyBatisTest {
    private static SqlSessionFactory sqlSessionFactory;
    
    @BeforeClass
    public static void init() throws IOException {
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    }
    
    @Test
    public void testCRUD() {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            
            // 1. 新增(需提交事務)
            User user = new User();
            user.setUserName("張三");
            user.setUserAge(25);
            user.setUserAddress("北京");
            mapper.insert(user);
            session.commit();  // ★ 關鍵:insert/update/delete 必須 commit
            System.out.println("自增 ID: " + user.getId());
            
            // 2. 查詢
            User u = mapper.selectById(user.getId());
            System.out.println("查詢: " + u);
            
            // 3. 修改
            u.setUserAddress("上海");
            mapper.update(u);
            session.commit();
            
            // 4. 刪除
            mapper.delete(u.getId());
            session.commit();
        }
    }
}

核心最佳實踐總結

  1. resultMap 顯式映射:解決字段名與屬性名不一致(如 user_name ↔ userName)
  2. useGeneratedKeys + keyProperty:自動回填自增主鍵
  3. 參數類型匹配:parameterType 與接口方法參數一致
  4. 事務手動提交:MyBatis 默認不自動提交,增刷改必須 session.commit()
  5. try-with-resources:自動關閉 SqlSession 防洩漏
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved