MyBatis資料持久化(三)增刪改查
阿新 • • 發佈:2019-02-18
上篇文章中我們使用mybatis成功建立資料庫會話,並從表中查詢出相應的資料,本文在此基礎上介紹MyBatis另外幾種操作,即插入、修改、刪除記錄。
1.修改User.xml檔案,增加幾條sql語句:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="User">
<select id ="queryUserInfoByName" parameterType="string" resultType="com.mybatis.domain.User">
select * from User where username = #{username}
</select>
<insert id="saveUser" parameterType="com.mybatis.domain.User">
insert into user(username,password,phone) values(#{username},#{password},#{phone});
</insert >
<update id="updateUser" parameterType="com.mybatis.domain.User">
update user set password=#{password} where username=#{username}
</update>
<delete id="deleteUser" parameterType="com.mybatis.domain.User">
delete from user where username = #{username}
</delete >
</mapper>
2.新建測試類com.mybatis.exam3.MyBatisCRUD
:
package com.mybatis.exam3;
import java.io.IOException;
import java.io.Reader;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.mybatis.domain.User;
public class MyBatisCRUD{
private Reader reader = null;
private SqlSessionFactory sessionFactory = null;
private SqlSession session = null;
@Before
public void before()
{
try {
reader = Resources.getResourceAsReader("SqlMapConfig.xml");
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//建立一個數據庫會話
session = sessionFactory.openSession();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void testMybatisSelect()
{
User user = (User)session.selectOne("User.queryUserInfoByName","小王");
//此處會呼叫user的toString方法
System.out.println(user);
}
@Test
public void testMybatisInsert()
{
User user = new User();
user.setPassword("aaaa");
user.setPhone("18909568934");
user.setUsername("Jane");
session.insert("User.saveUser", user);
//mybatis事物預設不自動提交
session.commit();
}
@Test
public void testMybatisUpdate()
{
User user = new User();
user.setPassword("bbbbb");
user.setPhone("18909568934");
user.setUsername("Jane");
session.update("User.updateUser",user);
//mybatis事物預設不自動提交
session.commit();
}
@Test
public void testMybatisDelete()
{
User user = new User();
user.setPassword("bbbbb");
user.setPhone("18909568934");
user.setUsername("Jane");
session.delete("User.deleteUser", user);
//mybatis事物預設不自動提交
session.commit();
}
@After
public void after()
{
if(null != session)
{
session.close();
}
}
}
筆者對上節的程式碼進行了重構,把建立資料庫會話的程式碼放到了before方法中,該方法是經過@Before
註解修飾過的,會在執行每個測試方法之前自動執行。
1.testMybatisSelect為資料查詢測試方法,和上節相同。
2.testMybatisInsert為資料插入測試方法,我們新建了一條插入sql語句:
<insert id="saveUser" parameterType="com.mybatis.domain.User">
insert into user(username,password,phone) values(#{username},#{password},#{phone});
</insert>
parameterType屬性指定引數型別為User,因此session.insert
方法的第二個引數必須為User類的物件,我們通過下面程式碼新建一個User物件,併為其屬性賦值:
User user = new User();
user.setPassword("aaaa");
user.setPhone("18909568934");
user.setUsername("Jane");
這些屬性的值會自動同步到#{username},#{password},#{phone}
佔位符中。需要注意的是,通過sessionFactory.openSession()
方法獲取資料庫會話,mybatis事務預設不自動提交,在對資料庫做更新操作後要手動呼叫session.commit()
提交事務。如果需要事務自動提交,我們需要呼叫openSession方法的過載形式,指定一個boolean型別變數作為引數:
//事務自動提交
sessionFactory.openSession(true);
3.testMybatisUpdate和testMybatisDelete分別為資料更新和刪除操作測試方法,和資料插入類似,也比較簡單,讀者可以參考上面的程式碼,這裡不做介紹了。