上篇:MyBatisPlus系列之条件构造器 EntityWrapper
一、ActiveRecord(活动记录)
1、ActiveRecord概述
Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。
ActiveRecord 一直广受动态语言( PHP 、 Ruby 等)的喜爱,而 Java 作为准静态语言,对于 ActiveRecord 往往只能感叹其优雅,所以MP也在 AR 道路上进行了一定的探索
2、开启AR模式(实体类继承Model类)
项目架构图
2.1、添加操作
(1)创建bean实体类
package org.apache.mybatisplus.bean;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import lombok.Data;
import lombok.ToString;
import java.io.Serializable;
/**
* javaBean
*
* 定义JavaBean中成员变量时所使用的类型:
* 因为每个基本类型都有一个默认值:
* int ==> 0
* boolean ==> false
*/
/*
* MybatisPlus会默认使用实体类的类名到数据中找对应的表.
*
*/
@Data
@ToString
public class Employee extends Model<Employee> {
private Integer id ; // int
@TableField(value = "last_name")
private String lastName;
private String email ;
private Integer gender;
private Integer age ;
@TableField(exist=false)
private Double salary ;
/**
* 指定当前实体类的主键属性
*/
@Override
protected Serializable pkVal() {
return id;
}
}
它这个实体类实现了pkVal方法,如图所示:
(2)insert操作
package org.apache.test;
import org.apache.mybatisplus.bean.Employee;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestMP01 {
private ApplicationContext ioc =
new ClassPathXmlApplicationContext("applicationContext.xml");
/**
* AR 插入操作
*/
@Test
public void testARInsert() {
Employee employee = new Employee();
employee.setLastName("宋老师");
employee.setEmail("sls@apache-mybatisPlues.com");
employee.setGender(1);
employee.setAge(35);
boolean result = employee.insert();
System.out.println("result:" + result);
}
}
打印输出
插入ok
2.2、修改操作
package org.apache.test;
import org.apache.mybatisplus.bean.Employee;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestMP01 {
private ApplicationContext ioc =
new ClassPathXmlApplicationContext("applicationContext.xml");
/**
* AR 修改操作
*/
@Test
public void testARUpdate() {
Employee employee = new Employee();
employee.setId(12);
employee.setLastName("宋老湿");
employee.setEmail("sls@apache-mybatisPlues.com");
employee.setGender(1);
employee.setAge(36);
boolean result = employee.updateById();
System.out.println("result:" +result );
}
}
打印输出
修改前的数据:
修改后的数据:
2.3、查询操作采用selectById方法
(1)第一种方法【传参数】
package org.apache.test;
import org.apache.mybatisplus.bean.Employee;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestMP01 {
private ApplicationContext ioc =
new ClassPathXmlApplicationContext("applicationContext.xml");
/**
* AR 查询操作
*/
@Test
public void testARSelect() {
Employee employee = new Employee();
Employee result = employee.selectById(12);
System.out.println(result );
}
}
打印输出
(2)第二种方法【不传参数】
package org.apache.test;
import org.apache.mybatisplus.bean.Employee;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestMP01 {
private ApplicationContext ioc =
new ClassPathXmlApplicationContext("applicationContext.xml");
/**
* AR 查询操作
*/
@Test
public void testARSelect() {
Employee employee = new Employee();
employee.setId(12);
Employee result = employee.selectById();
System.out.println(result );
}
}
打印输出
2.4、通过selectAll方法完成查询操作
package org.apache.test;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import org.apache.mybatisplus.bean.Employee;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class TestMP01 {
private ApplicationContext ioc =
new ClassPathXmlApplicationContext("applicationContext.xml");
/**
* AR 查询操作
*/
@Test
public void testARSelect() {
Employee employee = new Employee();
List<Employee> emps = employee.selectAll();
System.out.println(emps);
}
}
打印输出
[Employee(id=1, lastName=Tom, email=tom@apache.mybatis-Plus.com, gender=1, age=22, salary=null),
Employee(id=2, lastName=Jerry, email=jerry@apache.mybatis-Plus.com, gender=0, age=25, salary=null),
Employee(id=3, lastName=小泽老师, email=xz@sina.com, gender=0, age=23, salary=null),
Employee(id=4, lastName=王老师, email=cls@sina.com, gender=0, age=27, salary=null),
Employee(id=12, lastName=宋老湿, email=sls@apache-mybatisPlues.com, gender=1, age=36, salary=null)]
查看sql
SELECT id,last_name AS lastName,email,gender,age FROM tbl_employee
2.5、通过selectList方法查询操作
package org.apache.test;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import org.apache.mybatisplus.bean.Employee;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class TestMP01 {
private ApplicationContext ioc =
new ClassPathXmlApplicationContext("applicationContext.xml");
/**
* AR 查询操作
*/
@Test
public void testARSelect() {
Employee employee = new Employee();
List<Employee > emps=
employee.selectList(new EntityWrapper<Employee>().like("last_name", "老师"));
System.out.println(emps);
}
}
打印输出
数据表信息
若想统计为0的数据查询,可以采用该代码
package org.apache.test;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import org.apache.mybatisplus.bean.Employee;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class TestMP01 {
private ApplicationContext ioc =
new ClassPathXmlApplicationContext("applicationContext.xml");
/**
* AR 查询操作
*/
@Test
public void testARSelect() {
Employee employee = new Employee();
Integer result = employee.selectCount(new EntityWrapper<Employee>().eq("gender", 0));
System.out.println("result: " +result );
}
}
打印输出:
数据表信息
2.6、通过deleteById方法完成删除操作
package org.apache.test;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import org.apache.mybatisplus.bean.Employee;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class TestMP01 {
private ApplicationContext ioc =
new ClassPathXmlApplicationContext("applicationContext.xml");
/**
* AR 删除操作
*
* 注意: 删除不存在的数据 逻辑上也是属于成功的.
*/
@Test
public void testARDelete() {
Employee employee = new Employee();
boolean result = employee.deleteById(13);
System.out.println("result:" +result );
}
}
打印输出:
删除前:
删除后:
第二种情况:通过条件删除
package org.apache.test;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import org.apache.mybatisplus.bean.Employee;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class TestMP01 {
private ApplicationContext ioc =
new ClassPathXmlApplicationContext("applicationContext.xml");
/**
* AR 删除操作
*
* 注意: 删除不存在的数据 逻辑上也是属于成功的.
*/
@Test
public void testARDelete() {
Employee employee = new Employee();
boolean result = employee.delete(new EntityWrapper<Employee>().like("last_name", "小"));
System.out.println(result );
}
}
打印输出:
删除前:
删除后:
2.7、通过selectPage方法完成分页复杂操作
package org.apache.test;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import org.apache.mybatisplus.bean.Employee;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class TestMP01 {
private ApplicationContext ioc =
new ClassPathXmlApplicationContext("applicationContext.xml");
/**
* 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);
}
}
打印输出
数据表信息
3、AR小结
(1)AR 模式提供了一种更加便捷的方式实现 CRUD 操作,其本质还是调用的 Mybatis 对应的方法,类似于语法糖 语法糖是指计算机语言中添加的某种语法,这种语法对原本语言的功能并没有影响. 可以更方便开发者使用,可以避免出错的机会,让程序可读性更好
(2)到此,我们简单领略了 Mybatis-Plus 的魅力与高效率,值得注意的一点是:我们提供了强大的代码生成器,可以快速生成各类代码,真正的做到了即开即用