• MybatisPlus学习笔记6:ActiveRecord


    Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。
    ActiveRecord 一直广受动态语言( PHP 、 Ruby 等)的喜爱,
    而 Java 作为准静态语言,对于 ActiveRecord 往往只能感叹其优雅,
    所以 MP 也在 AR 道路上进行了一定的探索,
    仅仅需要让实体类继承 Model 类且实现主键指定方法,即可开启 AR 之旅。
    接下来看具体代码:

    1、entity

    实体类继承Model类,重写pkVal方法。

    @Data
    public class User extends Model<User> {
        private Integer id;
        private String name;
        private Integer age;
        private Integer gender;
        //重写这个方法,return当前类的主键
        @Override
        protected Serializable pkVal() {
            return id;
        }
    }
    

    2、mapper

    虽然AR模式用不到该接口,但是一定要定义,否则使用AR时会报空指针异常。

    public interface UserDao extends BaseMapper<User> {
    }
    

    3、使用AR

    3.1、AR插入操作

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration({"classpath:spring/spring-dao.xml"})
    public class TestAR {
        @Test
        public void testArInsert(){
            User user = new User();
            user.setName("林青霞");
            user.setAge(22);
            user.setGender(1);
            boolean result = user.insert();
            System.out.println(result);
        }
    }
    

    可以看到我们并不需要注入mapper接口,不过正如刚才所说,不使用但还是要定义,否则会报错。
    AR操作是通过对象本身调用相关方法,比如要insert一个user,那就用这个user调用insert方法即可。
    返回值为布尔类型,由上图可看到返回了true,是操作成功的。

    3.2、AR更新操作

     @Test
        public void testArUpdate(){
            User user = new User();
            user.setId(1);
            user.setName("刘亦菲");
            boolean result = user.updateById();
            System.out.println(result);
        }
    
    
    

    user调用updateById方法,将id为1的用户进行更新。

    3.3 AR查询操作

    上面的代码涉及到了四个不同的查询操作,其实用法与MP的BaseMapper提供的方法的用法差不多,只不过这里是实体对象调用。

     @Test
        public void testArSelect(){
            User user = new User();
            //1、根据id查询
            //user = user.selectById(1);
            //或者这样用
            //user.setId(1);
            //user = user.selectById();
    
            //2、查询所有
            //List<User> users = user.selectAll();
    
            //3、根据条件查询
            //List<User> users = user.selectList(new EntityWrapper<User>().like("name","刘"));
    
            //4、查询符合条件的总数
            int result = user.selectCount(new EntityWrapper<User>().eq("gender",1));
            System.out.println(result);
        }
    

    3.4 AR删除操作

    这里介绍了两个删除方法,代码中已有注释说明。
    需要注意的是,删除数据库中不存在的数据,结果也是true。

    @Test
        public void testArDelete(){
            User user = new User();
            //删除数据库中不存在的数据也是返回true
            //1、根据id删除数据
            //boolean result = user.deleteById(1);
            //或者这样写
            //user.setId(1);
            //boolean result = user.deleteById();
    
            //2、根据条件删除
            boolean result = user.delete(new EntityWrapper<User>().like("name","玲"));
            System.out.println(result);
        }
    

    3.5 AR分页操作

    这个分页方法和BaseMapper提供的分页一样都是内存分页,并非物理分页,因为sql语句中没用limit,
    和BaseMapper的selectPage方法一样,配置了分页插件后就可以实现真正的物理分页。
    AR的分页方法与BaseMapper提供的分页方法不同的是:
    BaseMapper的selectPage方法返回值是查询到的记录的list集合,
    而AR的selectPage方法返回的是page对象,
    该page对象封装了查询到的信息,可以通过getRecords方法获取信息。

    @Test
        public void testArPage(){
           User user = new User();
           Page<User> page =
                   user.selectPage(new Page<>(1,4),
                   new EntityWrapper<User>().like("name","刘"));
           List<User> users = page.getRecords();
           System.out.println(users);
        }
    
  • 相关阅读:
    动态规划算法
    Spring依赖循环
    使用JMH微基准测试
    expect介绍和使用
    autossh使用(本机记住ssh密码)
    ssh端口转发(ssh隧道)
    WSL2中的Centos8安装桌面
    Tmux Plugin Manager使用及具体插件
    Python使用os.chdir命令切换python工作目录
    python脚本要控制jenkins触发job
  • 原文地址:https://www.cnblogs.com/xidianzxm/p/12525829.html
Copyright © 2020-2023  润新知