續(xù)上一篇MyBatis學(xué)習(xí)筆記-01MyBatis入門,我們繼續(xù)講講通過MyBatis進(jìn)行增刪改操作。
本文涉及內(nèi)容主要來自與本人學(xué)習(xí)《拉勾教育-大數(shù)據(jù)高薪訓(xùn)練營》課程的記錄和總結(jié)。
1.3 映射配置文件概述
找到我們之前的映射配置文件UserMapper.xml

UserMapper文件解釋
1.3.1 新增用戶
- 編輯UserMapper.xml,增加insert標(biāo)簽的內(nèi)容
<!--新增用戶-->
<!--#{} : mybatis中的占位符,等同于JDBC的?-->
<insert id="saveUser" parameterType="com.lagou.domain.User">
insert into user(username, birthday, sex, address) values (#{username}, #{birthday}, #{sex}, #{address})
</insert>
#{} : mybatis中的占位符,等同于JDBC的?
在實(shí)際配置時候,為了讓mybatis知道每個{}號中對應(yīng)的是什么值,還需要填入parameterType對應(yīng)的類變量匯總的類成員名稱(實(shí)際上這個地方應(yīng)該是對應(yīng)類變量中沒一個get方法的方法名去掉get后首字母小寫的字符串。)
- 添加測試代碼測試新增操作
@Test
public void testUserSave() throws IOException {
// 1. 加載核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
// 2. 獲取sqlSessionFactory工廠對象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
// 3. 獲取sqlSession會話對象
SqlSession sqlSession = sessionFactory.openSession();
// 4. 創(chuàng)建需要新增的類對象,以及對類變量的賦值
User user = new User();
user.setUsername("jack");
user.setBirthday(new Date());
user.setSex("男");
user.setAddress("上海市浦東新區(qū)");
// 5. 執(zhí)行sql
sqlSession.insert("userMapper.saveUser", user);
// 6.DML語句,手動提交事務(wù)
sqlSession.commit();
// 7.關(guān)閉釋放資源
sqlSession.close();
}
- 注意事項(xiàng)
- 插入語句使用insert標(biāo)簽
- 映射文件中使用parameterType屬性指定要插入的數(shù)據(jù)類型
- Sql語句中使用#{實(shí)體屬性名}方式引用是體重的屬性值
- 插入操作使用的API是sqlSession.insert("namespace.id",實(shí)體對象)
- 插入操作設(shè)計(jì)數(shù)據(jù)庫數(shù)據(jù)的變化,所以需要使用sqlSession對象顯式的提交事務(wù),sqlSession.commit()
我在實(shí)際測試的時候遇到個問題,就是插入數(shù)據(jù)的中文亂碼,這里可以設(shè)置數(shù)據(jù)庫鏈接的字符集(&在xml文件是需要轉(zhuǎn)義的,所以需要使用&進(jìn)行轉(zhuǎn)義)
正確的url:jdbc:mysql://IP:port/mybatis_db?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
1.3.2 更新用戶
- 編輯UserMapper.xml,增加update標(biāo)簽的內(nèi)容
<!--更新用戶-->
<update id="updateUser" parameterType="com.lagou.domain.User">
update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
</update>
- 添加測試代碼測試更新操作
@Test
public void testUserUpdate() throws IOException {
// 1. 加載核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
// 2. 獲取sqlSessionFactory工廠對象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
// 3. 獲取sqlSession會話對象
SqlSession sqlSession = sessionFactory.openSession();
// 4. 創(chuàng)建需要新增的類對象,以及對類變量的賦值
User user = new User();
user.setId(3);
user.setUsername("jack");
user.setBirthday(new Date());
user.setSex("男");
user.setAddress("上海市浦東新區(qū)");
// 5. 執(zhí)行sql
sqlSession.update("userMapper.updateUser", user);
// 6.DML語句,手動提交事務(wù)
sqlSession.commit();
// 7.關(guān)閉釋放資源
sqlSession.close();
}
- 注意事項(xiàng)
- 更新語句使用update標(biāo)簽
- 更新操作使用的API是sqlSession.update("namespace.id",實(shí)體對象)
1.3.3 刪除用戶
- 編輯UserMapper.xml,增加delete標(biāo)簽的內(nèi)容
<!--刪除用戶-->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id=#{id}
</delete>
- 添加測試代碼測試更新操作
@Test
public void testUserDelete() throws IOException {
// 1. 加載核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
// 2. 獲取sqlSessionFactory工廠對象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
// 3. 獲取sqlSession會話對象
SqlSession sqlSession = sessionFactory.openSession();
// 4. 執(zhí)行sql
int insert = sqlSession.delete("userMapper.deleteUser", 4);
System.out.println(insert);
// 5.DML語句,手動提交事務(wù)
sqlSession.commit();
// 6.關(guān)閉釋放資源
sqlSession.close();
}
- 注意事項(xiàng)
- 刪除語句使用delete標(biāo)簽
- 刪除操作使用的API是sqlSession.delete("namespace.id",實(shí)體對象)
- xml中配置刪除語句我們只需要傳一個id,所以案例里面,我們使用了直接傳遞Interage參數(shù)的用法。
MyBatis學(xué)習(xí)筆記系列
MyBatis學(xué)習(xí)筆記-01MyBatis入門
MyBatis學(xué)習(xí)筆記-02映射配置文件
MyBatis學(xué)習(xí)筆記-03核心配置文件