1. 程式人生 > 其它 >MyBatis學習總結(二):MyBatis的CRUD操作

MyBatis學習總結(二):MyBatis的CRUD操作

技術標籤: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);
    }

}