ActiveRecord(活动记录)是一种领域模型模式、特点是一个模型类 对应 关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录
ActiveRecord一直广受动态语言(PHP、Ruby等)的喜爱、而Java作为准静态语言,对于ActiveRecord 往往之只能感慨其优雅、所以MP也在AR道路上进行了一定的探索
Jfinal也使用了AR
package com.ming.mp.model;
import com.baomidou.mybatisplus.activerecord.Model;
import java.io.Serializable;
/**
* ActiveRecord
*/
public class Employee extends Model<Employee> {
/**
* 指定当前实体类的主键属性
* @return
*/
@Override
protected Serializable pkVal() {
return this.id;
}
private Integer id;
private String lastName;
private String email;
private Integer gender;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getGender() {
return gender;
}
public void setGender(Integer gender) {
this.gender = gender;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Employee{" +
"id=" + id +
", lastName='" + lastName + '\'' +
", email='" + email + '\'' +
", gender=" + gender +
", age=" + age +
'}';
}
}
继承Model后可以完成基本的CRUD操作
注意AR和MP不能同时操作一个实体类,不然出现空指针异常
插入操作
@Test
public void testInsert(){
//INSERT INTO tbl_employee ( last_name, email, gender, age ) VALUES ( ?, ?, ?, ? )
Employee employee = new Employee();
employee.setLastName("AR1");
employee.setEmail("87997798@qq.com");
employee.setAge(18);
employee.setGender(1);
boolean insert = employee.insert();
System.out.println(insert);
}
AR 修改操作
/**
* AR 修改操作
*/
@Test
public void testARUpdate() {
Employee employee = new Employee();
employee.setId(20);
employee.setLastName("宋老湿");
employee.setEmail("sls@atguigu.com");
employee.setGender(1);
employee.setAge(36);
boolean result = employee.updateById();
//UPDATE tbl_employee SET last_name=?, email=?, gender=?, age=? WHERE id=?
System.out.println("result:" +result );
}
AR 查询操作
/**
* AR 查询操作
*/
@Test
public void testARSelect() {
Employee employee = new Employee();
Employee result = employee.selectById(14);
//SELECT id,last_name AS lastName,email,gender,age FROM tbl_employee WHERE id=?
System.out.println(result );
employee.setId(14);
Employee result = employee.selectById();
//SELECT id,last_name AS lastName,email,gender,age FROM tbl_employee WHERE id=?
System.out.println(result )
List<Employee> emps = employee.selectAll();
//SELECT id,last_name AS lastName,email,gender,age FROM tbl_employee
System.out.println(emps);
List<Employee > emps= employee.selectList(new EntityWrapper<Employee>()
.like("last_name", "老师"));
//SELECT id,last_name AS lastName,email,gender,age FROM tbl_employee WHERE (last_name LIKE ?)
System.out.println(emps);
Integer result = employee.selectCount(new EntityWrapper<Employee>().eq("gender", 0));
//SELECT COUNT(1) FROM tbl_employee WHERE (gender = ?)
System.out.println("result: " +result );
}
AR 删除操作 注意: 删除不存在的数据 逻辑上也是属于成功的
/**
* AR 删除操作
*
* 注意: 删除不存在的数据 逻辑上也是属于成功的.
*/
@Test
public void testARDelete() {
Employee employee = new Employee();
boolean result = employee.deleteById(2);
System.out.println("result:" +result );
//删除的数据库不存在,却返回成功true,update是0,原因是
/**
* <p>
* 删除不存在的逻辑上属于成功
* </p>
*
* @param result 数据库操作返回影响条数
* @return boolean
*/
//public static boolean delBool(Integer result) {
// return null != result && result >= 0;
//}
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 );
}
AR 分页复杂操作
/**
* AR 分页复杂操作
*/
@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);
}
1、 AR 模式提供了一种更加便捷的方式实现 CRUD 操作,其本质还是调用的 Mybatis 对应的方法,类似于语法糖
语法糖:是指计算机语言中添加的某种语法,这种语法对原本语言的功能并没有影响.可以更方便开发者使用,可以避免出错的机会,让程序可读性更好.
2、 到此,我们简单领略了 Mybatis-Plus 的魅力与高效率,值得注意的一点是:我们提供了强大的代码生成器、可以快速生成各类代码、真正做到了即开即用