MyBatis-Plus学习笔记——ActiveRecord、代码生成器、分页

MyBatis-Plus

  • 6 ActiveRecord
    • 6.1 实现方式
    • 6.2 Model 类中的方法
    • 6.3 AR 模式下的 CRUD
      • 6.3.1 添加
      • 6.3.2 查询
      • 6.3.3 修改
      • 6.3.4 删除
  • 7 代码生成器
    • 7.1 依赖
    • 7.2 配置
      • 7.2.1 全局配置
      • 7.2.2 数据源配置
      • 7.2.3 策略配置
      • 7.2.4 包结构配置
      • 7.2.5 AutoGenerator 整合
      • 7.2.6 执行
    • 7.3 生成的项目
      • 7.3.1 目录
      • 7.3.2 Service 和 ServiceImpl
  • 8 插件
    • 8.1 分页

6 ActiveRecord

6.1 实现方式

实体类继承 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;
    }
}

6.2 Model 类中的方法

Model 类提供了下面这些方法,可以供实体类对象在进行数据库操作时使用。
MyBatis-Plus学习笔记——ActiveRecord、代码生成器、分页_第1张图片

6.3 AR 模式下的 CRUD

6.3.1 添加

//需要加载 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);
}

6.3.2 查询

@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);
}

6.3.3 修改

@Test
public void testARUpdate(){
     
	//update()
    Dept dept = new Dept();
    dept.setId("HQ");
    dept.setDName("ARUpdate");
    boolean updateById = dept.updateById();
    System.out.println(updateById);
}

6.3.4 删除

@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);
}

7 代码生成器

代码生成器官方文档

7.1 依赖

MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖:

  • 添加代码生成器依赖:

<dependency>
    <groupId>com.baomidougroupId>
    <artifactId>mybatis-plus-generatorartifactId>
    <version>3.4.1version>
dependency>
  • 添加模板引擎依赖:MyBatis-Plus 默认使用 Velocity 模板引擎。
<dependency>
    <groupId>org.apache.velocitygroupId>
    <artifactId>velocity-engine-coreartifactId>
    <version>2.3version>
dependency>

7.2 配置

7.2.1 全局配置

//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片段

7.2.2 数据源配置

//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"));

7.2.3 策略配置

//3.策略配置
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setInclude("employee")//由哪个表生成实体类、mapper接口等
        .setCapitalMode(true)//是否大写命名
        .setNaming(NamingStrategy.underline_to_camel);//开启下划线驼峰命名转换

7.2.4 包结构配置

//4.包结构配置
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("com.mcc.mybatisplus")//父包
        .setEntity("entity")//实体类包
        .setMapper("mapper")//mapper接口包
        .setXml("mapper")//映射文件包
        .setService("service")//service包
        .setController("controller");//控制层包

7.2.5 AutoGenerator 整合

//5.AutoGenerator整合配置
AutoGenerator generator = new AutoGenerator();
generator.setGlobalConfig(globalConfig)//添加全局配置
        .setDataSource(dataSourceConfig)//添加数据源配置
        .setStrategy(strategyConfig)//添加策略配置
        .setPackageInfo(packageConfig);//添加包结构配置

7.2.6 执行

//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();
    }
}

7.3 生成的项目

7.3.1 目录

MyBatis-Plus学习笔记——ActiveRecord、代码生成器、分页_第2张图片

7.3.2 Service 和 ServiceImpl

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, T> 类: IService 接口的实现类,泛型:M 是 Mapper 类,T 是实体类如果使用 MP 提供的 Service CRUD,那么 Service 实现类要继承 ServiceImpl 类,并实现 XxxService 接口(自定义的那个)。

  • ServiceImpl类中,注入了 Mapper 接口的代理实现类对象,需要增强功能时,只需要调用getBaseMapper()方法,即可获取该 Mapper 代理实现类对象。
    MyBatis-Plus学习笔记——ActiveRecord、代码生成器、分页_第3张图片

  • ServiceImpl类中提供的一些方法:
    Service 层中的一些基本的 CRUD 方法不需要我们自己实现了。
    MyBatis-Plus学习笔记——ActiveRecord、代码生成器、分页_第4张图片

8 插件

8.1 分页

  • 通过 Spring 配置文件,注册分页插件。
  • Page类:封装了许多和分页有关的操作,包括获取当前页对象、页码、总记录数等。
  • 3.4 版本之后分页插件的改变

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();
}

你可能感兴趣的:(笔记,MyBatis-Plus)