MyBatis學習總結(二):MyBatis的CRUD操作
阿新 • • 發佈:2021-02-12
技術標籤:MyBatis學習mybatismysqljava
一、基於XML的CRUD操作
前面在入門程式中實現了對資料庫中所有資料的查詢。接下來就基於入門程式的基礎上,實現對資料庫資料的CRUD。
(1)修改IUserdao,新增方法。
public interface IUserDao { /** * 增加使用者 */ void addUser(User user); /** * 刪除使用者 */ void deleteById(Integer id); /** * 修改使用者 */ void updateUser(User user); /** * 查詢所有 * @return */ List<User> findAll(); }
(2)在userMapper.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"> <!--namespace:指定了唯一的名稱空間--> <mapper namespace="com.day1.dao.IUserDao"> <!-- 新增使用者 --> <insert id="addUser" parameterType="com.day1.entity.User"> insert into t_user(username, password) values(#{username}, #{password}); </insert> <!-- 刪除使用者 --> <delete id="deleteById" parameterType="int"> delete from t_user where id = #{id} </delete> <!-- 更新使用者資訊 --> <update id="updateUser" parameterType="com.day1.entity.User"> update t_user set username =#{username}, password= #{password} where id = #{id} </update> <!-- 查詢所有使用者 --> <select id="findAll" resultType="com.day1.entity.User"> select * from t_user; </select> </mapper>
(3)建立測試類CRUDTest。
public class CRUDTest { InputStream in = null; SqlSessionFactoryBuilder builder = null; SqlSessionFactory factory = null; SqlSession sqlSession = null; IUserDao userDao = null; @Before public void init() throws IOException { //1、讀取配置檔案 in = Resources.getResourceAsStream("SqlMapperConfig.xml"); //2、建立SqlSessionFactory工廠 builder = new SqlSessionFactoryBuilder(); factory = builder.build(in); //3、使用工廠生產SqlSession物件 sqlSession = factory.openSession(); userDao = sqlSession.getMapper(IUserDao.class); } @After public void destory() throws IOException { sqlSession.commit(); sqlSession.close(); in.close(); } @Test public void testInsert(){ User user = new User("宋江", "song123"); userDao.addUser(user); } @Test public void testDelete(){ userDao.deleteById(5); } @Test public void testUpdate(){ User user = new User(5,"宋江", "song123"); userDao.updateUser(user); } @Test public void testFindAll(){ List<User> userList = userDao.findAll(); for(User user : userList){ System.out.println(user); } } }
測試增加資料操作:
測試查詢所有,如下:
測試修改資料操作,如下:
測試刪除資料, 如下:
基於XML的實現方式中還有另外一種,就是基於介面實現類來完成CRUD,這種方式瞭解即可,因為實際開發中如果採用這種方式,會增加開發的複雜性和程式碼量。這裡可以演示一下它的使用:
(1)新增IUserDao的實現類UserDaoImpl。
public class UserDaoImpl implements IUserDao {
private SqlSessionFactory factory;
public UserDaoImpl(SqlSessionFactory factory) {
this.factory = factory;
}
@Override
public void addUser(User user) {
SqlSession sqlSession = factory.openSession();
sqlSession.insert("com.day1.dao.IUserDao.addUser", user);
}
@Override
public void deleteById(Integer id) {
SqlSession sqlSession = factory.openSession();
sqlSession.delete("com.day1.dao.IUserDao.deleteById", id);
}
@Override
public void updateUser(User user) {
SqlSession sqlSession = factory.openSession();
sqlSession.update("com.day1.dao.IUserDao.updateUser", user);
}
@Override
public List<User> findAll() {
SqlSession sqlSession = factory.openSession();
List<User> list = sqlSession.selectList("com.day1.dao.IUserDao.findAll");
return list;
}
}
(2)建立測試類ImplTest。
public class ImplTest {
InputStream in = null;
SqlSessionFactoryBuilder builder = null;
SqlSessionFactory factory = null;
IUserDao userDao = null;
@Before
public void init() throws IOException {
//1、讀取配置檔案
in = Resources.getResourceAsStream("SqlMapperConfig.xml");
//2、建立SqlSessionFactory工廠
builder = new SqlSessionFactoryBuilder();
factory = builder.build(in);
//3、使用IUserDao建立物件
userDao = new UserDaoImpl(factory);
}
@After
public void destory() throws IOException {
in.close();
}
@Test
public void testFindAll(){
System.out.println(userDao.findAll());
}
@Test
public void testInsert(){
User user = new User("吳用","aabbcc");
userDao.addUser(user);
}
@Test
public void testUpdate(){
User user = new User(6, "吳用","123123");
userDao.updateUser(user);
}
@Test
public void testDelete(){
userDao.deleteById(6);
}
}
二、基於註解的CRUD操作
如果基於註解方式實現CRUD,則不需要userMapper檔案的存在。
(1)在SqlMapperConfig.xml中配置介面類。
<mappers>
<mapper class="com.day1.dao.IUserDao"></mapper>
</mappers>
(2)修改介面類
public interface IUserDao {
/**
* 增加使用者
*/
@Insert("insert into t_user(username, password) values(#{username}, #{password});")
void addUser(User user);
/**
* 刪除使用者
*/
@Delete("delete from t_user where id = #{id}")
void deleteById(Integer id);
/**
* 修改使用者
*/
@Update("update t_user set username=#{username}, password=#{password} where id = #{id}")
void updateUser(User user);
/**
* 查詢所有
* @return
*/
@Select("select * from t_user")
List<User> findAll();
}
(3)建立測試類
public class AnnoTest {
InputStream in = null;
SqlSessionFactoryBuilder builder = null;
SqlSessionFactory factory = null;
SqlSession sqlSession = null;
IUserDao userDao =null;
@Before
public void init() throws IOException {
//1、讀取配置檔案
in = Resources.getResourceAsStream("SqlMapperConfig.xml");
//2、建立SqlSessionFactory工廠
builder = new SqlSessionFactoryBuilder();
factory = builder.build(in);
//3、使用工廠生產SqlSession物件
sqlSession = factory.openSession();
userDao = sqlSession.getMapper(IUserDao.class);
}
@After
public void destory() throws IOException {
sqlSession.commit();
sqlSession.close();
in.close();
}
@Test
public void testFindAll(){
System.out.println(userDao.findAll());
}
@Test
public void testInsert(){
User user = new User("吳用","aabbcc");
userDao.addUser(user);
}
@Test
public void testUpdate(){
User user = new User(6, "吳用","123123");
userDao.updateUser(user);
}
@Test
public void testDelete(){
userDao.deleteById(6);
}
}