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