MyBatis Plus在AR道路上的探索之ActiveRecord

简介: MyBatis Plus在AR道路上的探索之ActiveRecord

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


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


领域模型是一门很大的学问,对是很大,这里不做讨论


【1】com.baomidou.mybatisplus.activerecord.Model

① 这个类是什么


为什么要先说这个类?因为这是ActiveRecord 模式 CRUD。该类提供了一系列CRUD方法实现,当你的model如employee继承该类时即可使用CRUD方法。

② 如何使用 AR模式

仅仅需要让实体类继承 Model类且实现主键指定方法,即可开启 AR之旅 。修改employee类如下(看不懂的请参考前面两篇博文)。

public class Employee extends Model<Employee> {
  private Integer id ;   //  int 
  private String  lastName; 
  private String  email ;
  private Integer gender; 
  private Integer age ;
  @TableField(exist=false)
  private Double salary ; 
  //...get  set  toString method
  /**
   * 指定当前实体类的主键属性,一定要注意这个方法!!!
   */
  @Override
  protected Serializable pkVal() {
    return id;
  } 
}

③ model方法底层实现

以selectAll方法为例,可以看到其底层使用了sqlSession来实现方法—还是mybatis的东西。

 public List<T> selectAll() {
       return sqlSession().selectList(sqlStatement(SqlMethod.SELECT_LIST));
   }

【2】ActiveRecord 模式 CRUD实例

① 查询操作

测试代码如下:

@Test
public void testARSelect() {
  Employee employee = new Employee();
//根据ID查询
  //Employee result = employee.selectById(14);
//    employee.setId(14);
//    Employee result = employee.selectById();
//    System.out.println(result );
//查询所有
//    List<Employee> emps = employee.selectAll();
//    System.out.println(emps);
//模糊查询
//    List<Employee > emps=
//        employee.selectList(new EntityWrapper<Employee>().like("last_name", "老师"));
//    System.out.println(emps);
//统计查询
  Integer result = employee.selectCount(new EntityWrapper<Employee>().eq("gender", 0));
  System.out.println("result: " +result );
}

② 插入操作

测试代码如下:

@Test
public void  testARInsert() {
  Employee employee = new Employee();
  employee.setLastName("小泽老师");
  employee.setEmail("sls@163.com");
  employee.setGender(1);
  employee.setAge(35);
  boolean result = employee.insert();
  System.out.println("result:" +result );
}


直接调用了employee.insert();方法进行插入。

③ 修改操作

测试代码如下:

@Test
public void testARUpdate() {
  Employee employee = new Employee();
  employee.setId(20);
  employee.setLastName("玛利亚老师");
  employee.setEmail("sls@163.com");
  employee.setGender(1);
  employee.setAge(36);
  boolean result = employee.updateById();
  System.out.println("result:" +result );
}

直接调用了employee.updateById();方法进行更新。

④ 删除操作

测试代码如下:

/**
 * AR 删除操作
 * 注意: 删除不存在的数据 逻辑上也是属于成功的.
 */
@Test
public void testARDelete() {
  Employee employee = new Employee();
  //boolean result = employee.deleteById(2);
//    employee.setId(2);
//    boolean result = employee.deleteById();
//    System.out.println("result:" +result );
  boolean result = employee.delete(new EntityWrapper<Employee>().like("last_name", "小"));
  System.out.println(result );
}

⑤ 分页查询

测试代码如下:

@Test
public void  testARPage() {
  Employee employee = new Employee();
  Page<Employee> page = employee.selectPage(new Page<>(1, 1),
      new EntityWrapper<Employee>().like("last_name", "老"));
  List<Employee> emps = page.getRecords();
  System.out.println(emps);
}

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

目录
相关文章
|
1月前
|
Java 关系型数据库 数据库连接
MyBatis Plus 解决大数据量查询慢问题
MyBatis Plus 解决大数据量查询慢问题
|
1月前
|
druid Java 数据库连接
Spring Boot3整合MyBatis Plus
Spring Boot3整合MyBatis Plus
45 1
|
4月前
|
XML Java 数据库连接
MybatisX快速生成代码(mybatis plus模板)
MybatisX快速生成代码(mybatis plus模板)
|
29天前
|
Java 数据库连接 mybatis
mybatis plus字段为null或空字符串把原来的数据也更新了,只需要注解
mybatis plus字段为null或空字符串把原来的数据也更新了,只需要注解
19 0
|
1月前
|
Java 数据库连接 数据库
Spring Boot整合MyBatis Plus集成多数据源轻松实现数据读写分离
Spring Boot整合MyBatis Plus集成多数据源轻松实现数据读写分离
26 2
|
1月前
|
存储 缓存 Java
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
|
1月前
|
缓存 Java 数据库连接
MyBatis Plus的“幻查” 规范到底要怎样使用哪几个查询函数 为什么会出现幻查?还有幻删为什么会删不掉
MyBatis Plus的“幻查” 规范到底要怎样使用哪几个查询函数 为什么会出现幻查?还有幻删为什么会删不掉
|
3月前
|
SQL Java 数据库连接
快速上手MyBatis Plus:简化CRUD操作,提高开发效率!
快速上手MyBatis Plus:简化CRUD操作,提高开发效率!
|
3月前
|
Java 数据库连接 数据库
Spring Boot整合Mybatis Plus[极简教程]
Spring Boot整合Mybatis Plus[极简教程]
58 0