MyBatis——使用注解开发

91 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。

使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。

使用注解开发步骤

1、在接口上实现注解

    @Select("select * from user")
    //查询用户
    List<User> getUser();

2、需要在核心配置文件中绑定接口

 <mappers>
        <mapper class="com.cheng.dao.UserMapper"></mapper>
 </mappers>

3、测试

    @Test
    public void getUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.getUser();
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();
    }

本质:反射机制的实现

底层:动态代理

注解完成CRUD

在工具类设置事务自动提交,加个参数

SqlSession sqlSession = sqlSessionFactory.openSession(true);

查询

//当方法存在多个参数,所有的参数前面必须加上@Param(),基本对象才需要@Param(),引用对象(如user,map)不需要
@Select("select * from user where id=#{id}")
User getUserById(@Param("id")int id);//测试的时候id以@Param()里的为主

//@Param()源码
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface Param {
  String value();
}

测试

    @Test
    public void getUserById(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User userById = mapper.getUserById(2);
        System.out.println(userById);
        sqlSession.close();
    }

增加

    @Insert("insert into user(id,name,pwd)values(#{id},#{name},#{pwd})")
    int addUser(User user);

测试

    @Test
    public void addUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.addUser(new User(5, "万里", "555555"));
        sqlSession.close();
    }

修改

    @Update("update user set pwd=#{pwd},name=#{name} where id=#{id}")
    int updateUser(User user);

测试

    @Test
    public void updateUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.updateUser(new User(1,"神明","123456"));
        sqlSession.close();
    }

删除

    @Delete("delete from user where id=#{id}")
    int deleteUser(@Param("id")int id);

测试

    @Test
    public void deleteUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.deleteUser(5);
        sqlSession.close();
    }