实体类继承 Model
类,并重写 pkVal()
方法,即可开启 AR 模式。
Dept.java
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@TableName(value = "department")
//继承Model类,开启ActiveRecord模式
public class Dept extends Model<Dept> {
@TableId(value = "id",type = IdType.INPUT)
private String id;
@TableField(value = "dName")
private String dName;
@Override
protected Serializable pkVal() {
//返回主键即可
return id;
}
}
Model 类提供了下面这些方法,可以供实体类对象在进行数据库操作时使用。
//需要加载 spring 配置文件
private ApplicationContext ioc =
new ClassPathXmlApplicationContext("classpath:spring-config.xml");
@Test
public void testARInsert(){
//insert()
Dept dept = new Dept();
dept.setId("HQ");
dept.setDName("AR");
boolean insert = dept.insert();
System.out.println(insert);
}
@Test
public void testARSelect(){
//selectById(Object id)
Dept dept = new Dept();
Dept selectById01 = dept.selectById("HQ");
System.out.println(selectById01);
//selectById()
dept.setId("HQ");
Dept selectById02 = dept.selectById();
System.out.println(selectById02);
//selectAll()
List<Dept> depts = dept.selectAll();
for (Dept item : depts) {
System.out.println(item);
}
//selectList()
List<Dept> deptList = dept.selectList(new QueryWrapper<Dept>().like("id", "s"));
for (Dept deptItem : deptList) {
System.out.println(deptItem);
}
//selectCount()
Integer count = dept.selectCount(null);
System.out.println(count);
Integer integer = dept.selectCount(new QueryWrapper<Dept>().like("id", "s"));
System.out.println(integer);
}
@Test
public void testARUpdate(){
//update()
Dept dept = new Dept();
dept.setId("HQ");
dept.setDName("ARUpdate");
boolean updateById = dept.updateById();
System.out.println(updateById);
}
@Test
public void testARDelete(){
//deleteById()
Dept dept = new Dept();
boolean deleteById = dept.deleteById("HQ");
System.out.println(deleteById);
// dept.setId("HQ");
// boolean b = dept.deleteById();
// System.out.println(b);
//delete()
boolean delete = dept.delete(new QueryWrapper<Dept>().eq("id", "HQ"));
System.out.println(delete);
}
代码生成器官方文档
MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖:
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-generatorartifactId>
<version>3.4.1version>
dependency>
<dependency>
<groupId>org.apache.velocitygroupId>
<artifactId>velocity-engine-coreartifactId>
<version>2.3version>
dependency>
//1.全局配置
GlobalConfig globalConfig = new GlobalConfig();//注意:是generator包下的
globalConfig.setActiveRecord(true)//是否支持AR模式
.setAuthor("MCC")//作者
.setOutputDir("D:\\Java\\IntelliJ IDEA 2020.3.1\\workplace\\MyBatisPlus\\src\\main\\java")//设置生成路径,磁盘上的路径
.setFileOverride(true)//设置文件覆盖,后一次生成的文件会覆盖前一次生成的同名文件
.setIdType(IdType.AUTO)//设置主键自增
.setServiceName("%sService")//设置Service接口名称,默认以I开始,%s为占位符
.setBaseResultMap(true)//生成基本ResultMap
.setBaseColumnList(true);//生成公共的、由所有列名组成的Sql片段
//2.数据源配置
//加载配置文件
InputStream inputStream = Resources.getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
properties.load(inputStream);
//数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL)//设置数据库类型
.setDriverName(properties.getProperty("jdbc.driver"))
.setUrl(properties.getProperty("jdbc.url"))
.setUsername(properties.getProperty("jdbc.username"))
.setPassword(properties.getProperty("jdbc.password"));
//3.策略配置
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setInclude("employee")//由哪个表生成实体类、mapper接口等
.setCapitalMode(true)//是否大写命名
.setNaming(NamingStrategy.underline_to_camel);//开启下划线驼峰命名转换
//4.包结构配置
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("com.mcc.mybatisplus")//父包
.setEntity("entity")//实体类包
.setMapper("mapper")//mapper接口包
.setXml("mapper")//映射文件包
.setService("service")//service包
.setController("controller");//控制层包
//5.AutoGenerator整合配置
AutoGenerator generator = new AutoGenerator();
generator.setGlobalConfig(globalConfig)//添加全局配置
.setDataSource(dataSourceConfig)//添加数据源配置
.setStrategy(strategyConfig)//添加策略配置
.setPackageInfo(packageConfig);//添加包结构配置
//6.执行
generator.execute();
完整代码:
package com.mcc.mybatisplus.test;
public class TestGenerate {
/*
测试代码生成器
*/
@Test
public void testGenerate() throws IOException {
//1.全局配置
GlobalConfig globalConfig = new GlobalConfig();//注意:是generator包下的
globalConfig.setActiveRecord(true)//是否支持AR模式
.setAuthor("MCC")//作者
.setOutputDir("D:\\Java\\IntelliJ IDEA 2020.3.1\\workplace\\MyBatisPlus\\src\\main\\java")//设置生成路径,磁盘上的路径
.setFileOverride(true)//设置文件覆盖,后一次生成的文件会覆盖前一次生成的同名文件
.setIdType(IdType.AUTO)//设置主键自增
.setServiceName("%sService")//设置Service接口名称,默认以I开始,%s为占位符
.setBaseResultMap(true)//生成基本ResultMap
.setBaseColumnList(true);//生成公共的、由所有列名组成的Sql片段
//2.数据源配置
//加载配置文件
InputStream inputStream = Resources.getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
properties.load(inputStream);
//数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL)//设置数据库类型
.setDriverName(properties.getProperty("jdbc.driver"))
.setUrl(properties.getProperty("jdbc.url"))
.setUsername(properties.getProperty("jdbc.username"))
.setPassword(properties.getProperty("jdbc.password"));
//3.策略配置
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setInclude("employee")//由哪个表生成实体类、mapper接口等
.setCapitalMode(true)//是否大写命名
.setNaming(NamingStrategy.underline_to_camel);//开启下划线驼峰命名转换
//4.包结构配置
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("com.mcc.mybatisplus")//父包
.setEntity("entity")//实体类包
.setMapper("mapper")//mapper接口包
.setXml("mapper")//映射文件包
.setService("service")//service包
.setController("controller");//控制层包
//5.AutoGenerator整合配置
AutoGenerator generator = new AutoGenerator();
generator.setGlobalConfig(globalConfig)//添加全局配置
.setDataSource(dataSourceConfig)//添加数据源配置
.setStrategy(strategyConfig)//添加策略配置
.setPackageInfo(packageConfig);//添加包结构配置
//6.执行
generator.execute();
}
}
EmployeeService.java
public interface EmployeeService extends IService<Employee> {
}
EmployeeServiceImpl.java
@Service
public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements EmployeeService {
}
IService
接口:内部提供了许多 Service 层可能使用的方法,是 MP 提供的 Service 层的接口规范。如果想使用 MP 提供的 Service CRUD,那么 Service 接口要继承 IService 接口。
ServiceImpl
类: IService 接口的实现类,泛型:M 是 Mapper 类,T 是实体类。如果使用 MP 提供的 Service CRUD,那么 Service 实现类要继承 ServiceImpl 类,并实现 XxxService 接口(自定义的那个)。
ServiceImpl
类中,注入了 Mapper 接口的代理实现类对象,需要增强功能时,只需要调用getBaseMapper()
方法,即可获取该 Mapper 代理实现类对象。
Page
类:封装了许多和分页有关的操作,包括获取当前页对象、页码、总记录数等。sprin-config.xml
<bean class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<property name="plugins">
<array>
<ref bean="mybatisPlusInterceptor"/>
array>
property>
bean>
<bean id="mybatisPlusInterceptor" class="com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor">
<property name="interceptors">
<list>
<ref bean="paginationInnerInterceptor"/>
list>
property>
bean>
<bean id="paginationInnerInterceptor" class="com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor">
<constructor-arg name="dbType" value="H2"/>
bean>
TestPage.java
@Test
public void testPage(){
Page<Emp> empPage = empMapper.selectPage(new Page<Emp>(1, 2), null);
//获取当前页所有对象
List<Emp> records = empPage.getRecords();
//获取总记录数
long total = empPage.getTotal();
//获取当前页码
long current = empPage.getCurrent();
//获取总页码数
long pages = empPage.getPages();
//获取每页显示的条数
long size = empPage.getSize();
//是否有上一页
boolean hasPrevious = empPage.hasPrevious();
//是否有下一页
boolean hasNext = empPage.hasNext();
}