美文网首页Mybatis入门到精通系列
09 Mybatis 注解开发 单表

09 Mybatis 注解开发 单表

作者: better_future | 来源:发表于2020-04-25 17:15 被阅读0次

    mybatis 常用注解说明

    @Insert:实现新增
    @Update:实现更新
    @Delete:实现删除
    @Select:实现查询
    @Result:实现结果集封装
    @Results:可以与@Result 一起使用,封装多个结果集
    @ResultMap:实现引用@Results 定义的封装
    @One:实现一对一结果集封装
    @Many:实现一对多结果集封装
    @SelectProvider: 实现动态 SQL 映射
    @CacheNamespace:实现注解二级缓存的使用

    使用 Mybatis 注解实现基本 CRUD

    实体类

    @Data
    public class User implements Serializable {
        private Integer userId;
        private String userName;
        private Date userBirthday;
        private String userSex;
        private String userAddress;
    }
    

    查询所有

        @Select("select * from user")
        @Results(
                id="userMap",
                value = {
                        @Result(id=true,column="id",property="userId"),
                        @Result(column="username",property="userName"),
                        @Result(column="sex",property="userSex"),
                        @Result(column="address",property="userAddress"),
                        @Result(column="birthday",property="userBirthday")
                })
        List<User> findAll();
    

    接口中的方法添加注解,@Select是sql查询语句,@Results封装多个结果集
    column数据库列名
    property 实体类属性名
    id="userMap" 可以实现复用

    测试

    public class AnnotationCRUDTest {
        private InputStream in;
        private SqlSessionFactory factory;
        private SqlSession session;
        private UserMapper userMapper;
    
        @Before
        public void init() throws IOException {
            //1.读取配置文件
            in = Resources.getResourceAsStream("SqlMapConfig.xml");
            //2.创建工厂
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            factory = builder.build(in);
            //3.创建 session
            session = factory.openSession();
            //4.创建代理对象
            userMapper = session.getMapper(UserMapper.class);
        }
    
        @After//junit 的注解
        public void destroy()throws Exception {
            //提交事务
            session.commit();
            //释放资源
            session.close();
            //关闭流
            in.close();
        }
    
        @Test
        public void testFindAll(){
            List<User> all = userMapper.findAll();
            for(User user:all){
                System.out.println(user);
            }
        }
    }
    

    根据id 查询user对象

        @Select("select * from user where id = #{uid}")
        @ResultMap("userMap")
        User findById(Integer userId);
    

    @ResultMap实现对上面的Results的引用

     @Test
        public void testFindById(){
            User user = userMapper.findById(41);
            System.out.println(user);
        }
    

    插入操作

     @Insert("insert  into user(username,sex,birthday,address)values(#{userName}, #{userSex}, #{userBirthday},#{userAddress})")
    @SelectKey(keyColumn="id",keyProperty="userId",resultType=Integer.class,before = false, statement = { "select last_insert_id()" })
        int saveUser(User user);
    

    属性介绍:
    #{}x写的是实体类的属性
    获取返回值,封装到keyProperty属性中去就是实体类的userId属性
    keyColumn是数据库的id
    resultType是返回值的类型,id是整数
    测试

    @Test
      public void testSave(){
            User user = new User();
            user.setUserName("张飞");
            user.setUserAddress("北京");
            user.setUserBirthday(new Date());
            user.setUserSex("男");
            int res = userMapper.saveUser(user);
    
            System.out.println("影响行数"+res);
            System.out.println("插入主键值"+user.getUserId());
        }
    

    更新操作

    //根据id更新记录
        @Update("update user set username=#{userName},address=#{userAddress},sex=#{userSex},birthday=#{userBirthday} where id=#{userId} ")
        int updateUser(User user);
    
     @Test
        public void testUpdate(){
            User user = new User();
            user.setUserId(41);
            user.setUserName("zzzzzzzzz");
            userMapper.updateUser(user);
        }
    

    此时会更新user id为41的数据,根据sql语句可知如果没有设置的属性那么,更新后是空的。

    删除操作

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

    对于 Integer以及其他基本数据类型的参数#{uid}可以任意写

    @Test
        public void testDelete(){
            int i = userMapper.deleteUser(57); //返回影响行数
            System.out.println(i);
        }
    

    聚合查询

        //聚合函数
        @Select("select count(*) from user")
        int findTotal();
    
     @Test
        public void testCount(){
            int total = userMapper.findTotal();
            System.out.println(total);
        }
    

    模糊查询

        //模糊查询
        @Select("select * from user where username like #{username}")
        List<User> findByName(String name);
    
    @Test
        public void findByName(){
            List<User> users = userMapper.findByName("%张%");
            for(User u:users){
                System.out.println(u);
            }
        }
    

    相关文章

      网友评论

        本文标题:09 Mybatis 注解开发 单表

        本文链接:https://www.haomeiwen.com/subject/jnnhwhtx.html