• MyBatisPlus 之 活动记录(ActiveRecord)


    一、ActiveRecord(活动记录)

       Active Record (活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。

      ActiveRecord 一直广受动态语言(PHP、Ruby 等)的喜爱,而 Java 作为静态语言,对于 ActiveRecord 往往只能感叹其优雅,所以 MP 也在 AR 道路上进行了一定的探索。

    二、如何使用 AR 模式

      仅仅需要让实体类继承 Model 类且实现主键指定方法,即可开启 AR 之旅:

    @TableName(value = "tbl_employee")
    public class Employee extends Model<Employee> {
    
        private Integer id;
        @TableField(value = "last_name")
        private String lastName;
        private String email;
        private Integer gender;
        private Integer age;
    
        @TableField(exist = false)
        private Double salary;
    
        /**
         * 指定当前类的主键属性
         * @return
         */
        @Override
        protected Serializable pkVal() {
            return this.id;
        }
    }

    三、AR 基本增删改查

      1、插入操作

        插入操作:

        /**
         * AR 插入操作
         * SQL 语句
         */
        @Test
        public void testARInsert() {
            Employee emp = new Employee();
            emp.setLastName("宋老师");
            emp.setAge(20);
            emp.setGender(1);
            emp.setEmail("sls@126.com");
    
            boolean result = emp.insert();
            System.out.println("result = " + result);
        }

      2、修改操作

        根据 ID 进行修改操作:

        /**
         * AR 修改操作
         */
        @Test
        public void testARUpdateById(){
            Employee employee = new Employee(16,"JKL","JKL@qq.com",0,15);
            System.out.println(employee.updateById());
        }

      3、删除操作

        根据ID删除操作:

        /**
         * 删除操作
         *
         * 注意:删除不存在的数据逻辑上也是成功的
         */
        @Test
        public void testARDelete(){
            Employee employee = new Employee();
            //通过id删除数据
            boolean result = employee.deleteById(4);
            System.out.println("通过ID删除结果=" + result);
    
            //根据条件删除数据(在逻辑上删除不存在的数据也是返回True)
            System.out.println("通过条件删除结果=" + employee.delete(new EntityWrapper<Employee>().eq("last_name","jack")));
        }

      4、查询操作

        (1)根据ID查询

        /**
         * 根据ID查询
         */
        @Test
        public void testARSelectById() {
            Employee emp = new Employee();
            emp.setId(1);
    
            Employee employee = emp.selectById();
            System.out.println("employee = " + employee);
    
            Employee emp2 = emp.selectById(1);
            System.out.println("emp2 = " + emp2);
        }

        (2)查询所有数据

        @Test
        public void testARSelectAll(){
            Employee employee = new Employee();
    
            //查询所有操作
            System.out.println(employee.selectAll());
    
            //使用Wrapper以及AR进行模糊查询
            employee.selectList(new EntityWrapper<Employee>().like("last_name","J")).forEach(value -> {
                System.out.println(value);
            });
    
        }

        (3)根据条件查询数据

        /**
         * 根据条件查询数据
         */
        @Test
        public void testARSelectList(){
            Employee employee = new Employee();
            List<Employee> emps = employee.selectList(new EntityWrapper<Employee>().like("last_name", "老师"));
    
            emps.forEach(System.out::println);
        }

        (4)根据条件查询数量

        /**
         * 根据条件查询数据数量
         */
        @Test
        public void testARSelectCount(){
            Employee employee = new Employee();
            int count = employee.selectCount(new EntityWrapper<Employee>().like("gender", "0"));
            System.out.println("count = " + count);
        }

        (5)分页复杂操作

        /**
         * AR 分页复杂操作
         */
        @Test
        public void testARSelectPage(){
            Employee employee = new Employee();
    
            //获取分页所有数据
            Page<Employee> page = employee.selectPage(new Page<Employee>(1, 2), new EntityWrapper<Employee>().like("last_name", "老"));
    
            //获取分页数据数
            List<Employee> records = page.getRecords();
        }

     

    四、AR 小结

      AR 模式提供了一种更加便捷的方式实现 CRUD 操作,其本质还是调用 MyBatis 对应的方法,类似于语法糖。

      以 insert 方法为例:

       其本质还是获取到 sqlSession 对象然后进行插入。

      到底,简单领略了 MyBatis 的魅力与高效,值得注意的一点是,我们提供了强大的代码生成器,可以快速生成各类代码,真正的做到了即开即用。

  • 相关阅读:
    观察者模式
    系统高并发网络图书室
    java keytool
    ant 脚本使用技巧
    Unsupported major.minor version 51.0 错误解决方案
    Oracle的网络监听配置
    win8 JDK环境变量不生效
    javax.mail
    xmlrpc
    网络时间同步
  • 原文地址:https://www.cnblogs.com/niujifei/p/15340521.html
Copyright © 2020-2023  润新知