随笔 - 1162  文章 - 0  评论 - 16  阅读 - 59万 

一、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 的魅力与高效,值得注意的一点是,我们提供了强大的代码生成器,可以快速生成各类代码,真正的做到了即开即用。

 

posted on   格物致知_Tony  阅读(149)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
历史上的今天:
2019-09-26 事务
2019-09-26 多表查询(内连接与外连接)
2019-09-26 栈实现综合计算器(中缀表达式)
2019-09-26 数组模拟栈
2019-09-26 栈 Stack
点击右上角即可分享
微信分享提示

目录导航