天天看點

MyBatis 使用注解實作CRUD(增删改查)

注解增删改查

測試時實作自動送出,改造MyBatisUtils工具類的getSession()方法

注意點:@Param

@Param注解用于給方法參數起一個名字。以下是總結的使用原則:

  1. 在方法隻接受一個參數的情況下,可以不使用@Param。
  2. 在方法接受多個參數的情況下,建議一定要使用@Param注解給參數命名。
  3. 如果參數是 JavaBean , 則不能使用@Param。
  4. 不使用@Param注解時,參數隻能有一個,并且是Javabean。

MyBatisUtils.java

//我們可以從中獲得 SqlSession 的執行個體。SqlSession 提供了在資料庫執行 SQL 指令所需的所有方法。
    // 你可以通過 SqlSession 執行個體來直接執行已映射的 SQL 語句
    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession(true);
    }
           

關于openSession()方法的源碼

public void startManagedSession(boolean autoCommit) {
    this.localSqlSession.set(openSession(autoCommit));
  }
           

1.增删改查的Mapper接口

public interface UserMapper {

    //查詢全部使用者
    @Select("select * from user")
    List<User> getAllUser();

    //根據id查詢使用者
    @Select("select * from user where id = #{id} and name = #{name}")
    List<User> getUserByID(@Param("id") int id, @Param("name") String name);

    //新增使用者
    @Insert("insert into user(id,name,pwd) values(#{id},#{name},#{password})")
    int addUser(User user);

    //删除使用者
    @Delete("delete from user where id = #{id}")
    int deleteUser(@Param("id") int id);

    //更新使用者資訊
    @Update("update user set pwd = #{password} where id = #{id}")
    int updateUser(@Param("id") int id,@Param("password") String password);

}
           

2.增删改查的test方法

public class UserMapperTest {

    //注解開發test
    @Test
    public void testGetUserByID() {
        SqlSession session = MyBatisUtils.getSqlSession();
        //本質上使用了jvm的動态代理模式
        UserMapper mapper = session.getMapper(UserMapper.class);

        List<User> users = mapper.getUserByID(1,"小王");
        for (User user : users) {
            System.out.println(user);
        }
    }

    //新增使用者test
    @Test
    public void testAddUser() {
        SqlSession session = MyBatisUtils.getSqlSession();

        UserMapper mapper = session.getMapper(UserMapper.class);;

        User users = new User(4,"緊急","4234323443");
        mapper.addUser(users);

       session.close();
    }

    //删除使用者test
    @Test
    public void testDeleteUser() {
        SqlSession session = MyBatisUtils.getSqlSession();

        UserMapper mapper = session.getMapper(UserMapper.class);;
        mapper.deleteUser(5);

        session.close();
    }

    //update使用者資訊
    @Test
    public void testUpdateUser() {
        SqlSession session = MyBatisUtils.getSqlSession();

        UserMapper mapper = session.getMapper(UserMapper.class);;
        mapper.updateUser(4,"3423888");

        session.close();
    }
}