Mybatis-Plus学习笔记

mybatis-plus学习笔记

  • 0、简介
    • 什么是mp?
    • 特点
  • 1、快速入门
    • 1.1 建库建表
    • 1.2 创建工程,导入pom依赖
    • 1.3 配置application.yml文件
    • 1.4 编写mapper接口和entity实体
      • 1.4.1编写entity实体类(数据库表和实体类的映射)
      • 1.4.2编写mapper接口
    • 1.5 将mapper注入到容器中
    • 1.6 测试
  • 2、主键自增策略
  • 3、自动填充
    • 3.1 在user表添加两个字段:
    • 3.2 在User类添加两个字段并标上@TableField注解
    • 3.3 自定义一个MetaObjectHandler接口的实现类
    • 3.4 测试insert方法和update方法会不会自动填充create_time和update_time字段
  • 4、乐观锁(OptimisticLockerInnerInterceptor)
    • 4.1 在user表中添加 int型version 字段
    • 4.2 配置插件
    • 4.3 在实体类的字段上加上@Version注解
    • 4.5 测试
  • 5、分页
    • 5.1 添加组件
    • 5.2 测试
  • 6、逻辑删除
    • 6.1 在application.yml中添加配置信息
    • 6.2 在user表添加deleted字段,并赋初值
    • 6.3 在User类中添加deleted字段,并标上@TableLogic注解
    • 6.4 测试
  • 7、慢SQL语句分析
    • 7.1 添加pom依赖
    • 7.2 修改application.yml配置
    • 7.3 添加 慢SQL语句分析 的配置信息
    • 7.4 测试
  • 8、代码生成器
  • 9、Wrapper条件查询

0、简介

参考资料:mp官网 https://baomidou.com/guide/#%E7%89%B9%E6%80%A7

什么是mp?

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

特点

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

1、快速入门

官方文档给的是H2数据库,这里采用mysql数据库。

环境:idea2019.3 + mybatis-plus3.4.2 + mysql5.7.18 + springboot2.2.1.RELEASE

1.1 建库建表

CREATE DATABASE mp CHARSET=utf8;  	#创建mp数据库
USE mp;		#选择mp数据库

#建user表
DROP TABLE IF EXISTS user;
CREATE TABLE user
(
	id BIGINT(20) NOT NULL COMMENT '主键ID',
	name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
	age INT(11) NULL DEFAULT NULL COMMENT '年龄',
	email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY (id)
);

#添加数据
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, '[email protected]'),
(2, 'Jack', 20, '[email protected]'),
(3, 'Tom', 28, '[email protected]'),
(4, 'Sandy', 21, '[email protected]'),
(5, 'Billie', 24, '[email protected]');
	

1.2 创建工程,导入pom依赖

创建springboot工程,导入依赖

	<properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.2.1.RELEASE</spring-boot.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>${spring-boot.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>${spring-boot.version}</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- mybatis-plus和springboot整合 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.48</version>
        </dependency>
        <!-- c3p0 -->
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
            <scope>runtime</scope>
        </dependency>
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
            <scope>provided</scope>
        </dependency>

        <!-- mybatis-plus 的SQL语句性能分析插件 -->
        <dependency>
            <groupId>p6spy</groupId>
            <artifactId>p6spy</artifactId>
            <version>3.9.0</version>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

1.3 配置application.yml文件

mysql8以上的版本要加上时区!!!

# DataSource Config:写自己的数据库配置信息
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver	#数据库驱动
    url: jdbc:mysql://localhost:3306/mp?useSSL=false	#url
    username: root		#用户名
    password: 123456	#密码

  application:
    name: mp_demo

#开启mybatis-plus的日志
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

1.4 编写mapper接口和entity实体

添加lombok依赖,简化开发。

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.20</version>
    <scope>provided</scope>
</dependency>

1.4.1编写entity实体类(数据库表和实体类的映射)

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

1.4.2编写mapper接口

继承BaseMapper接口,泛型传入的entity是用于指定操作哪张表的mapper接口;继承后,拥有了crud的方法了。

public interface UserMapper extends BaseMapper<User> {

}

BaseMapper的提供的方法:

public interface BaseMapper<T> extends Mapper<T> {
    int insert(T entity);

    int deleteById(Serializable id);

    int deleteByMap(@Param("cm") Map<String, Object> columnMap);

    int delete(@Param("ew") Wrapper<T> queryWrapper);

    int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);

    int updateById(@Param("et") T entity);

    int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);

    T selectById(Serializable id);

    List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);

    List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);

    T selectOne(@Param("ew") Wrapper<T> queryWrapper);

    Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);

    List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);

    List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);

    List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);

    <E extends IPage<T>> E selectPage(E page, @Param("ew") Wrapper<T> queryWrapper);

    <E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param("ew") Wrapper<T> queryWrapper);
}

1.5 将mapper注入到容器中

在主启动类,添加@MapperScan注解,将mapper注入到容器中。@MapperScan中填mapper接口所在的包名

@SpringBootApplication
@MapperScan("com.wlp.mp.mapper")
public class MpDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(MpDemoApplication.class, args);
    }

}

1.6 测试

编写代码,测试mp是否配置成功

@SpringBootTest
public class MpDemoApplicationTests {

    //@Resource
    @Autowired	//自动注入mapper接口
    private UserMapper userMapper;

    /**
     * 查询操作
     */
    @Test
    public void selectById() {
        //根据id查询
        User userObj = userMapper.selectById(2);
        System.out.println(userObj);

        //查询所有的user信息
        List<User> users = userMapper.selectList(null);
        for (User  user: users) {
            System.out.println(user);
        }
    }
}

2、主键自增策略

常见的主键的自增策略有:

  • 数据库的AUTO_INCREMENT
  • UUID
  • Redis生成ID
  • Twitter的snowflake算法(雪花算法)

详情可参见博文:https://blog.csdn.net/weixin_43737917/article/details/107136039

Mybatis-Plus学习笔记_第1张图片
可以通过mybatis-plus的注解,指定策略Mybatis-Plus学习笔记_第2张图片
Mybatis-Plus学习笔记_第3张图片
在User的主键id添加@TableId注解:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    @TableId(type = IdType.AUTO)  //使用自增的主键策略为数据库自增
    private Long id;

    private String name;
    private Integer age;
    private String email;
}

指定策略为数据库自增时, 数据库的id字段一定要是自增,否则会报错!!!
前面入门案例sql语句来自官网,其id并没有指定为自增,请注意!!!SQLyog可修改
在这里插入图片描述

3、自动填充

3.1 在user表添加两个字段:

  • create_time
  • update_time
ALTER TABLE`user` ADD COLUMN create_time TIMESTAMP;
ALTER TABLE`user` ADD COLUMN update_time TIMESTAMP;

3.2 在User类添加两个字段并标上@TableField注解

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    @TableId(type = IdType.AUTO)        //使用自增的主键策略
    private Long id;

    private String name;
    private Integer age;
    private String email;

/******************* 新增 ****************************/

    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;               //insert操作的时间
    
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;               //update操作的时间
}

@TabledField注解的fill属性
Mybatis-Plus学习笔记_第4张图片

3.3 自定义一个MetaObjectHandler接口的实现类

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill ....");
        this.strictUpdateFill(metaObject, "createTime",
                () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)

        //给version字段赋初值:1
        this.setFieldValByName("version",1,metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill ....");
        this.strictUpdateFill(metaObject, "updateTime",
                () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)

    }
}

3.4 测试insert方法和update方法会不会自动填充create_time和update_time字段

    /**
     * 插入操作
     */
    @Test
    public void insertUser(){
        User user = new User();
        user.setId(6L);
        user.setAge(18);
        user.setEmail("[email protected]");
        user.setName("mark");

        int result = userMapper.insert(user);
        System.out.println("插入结果:" + result);
    }

    /**
     * 更新操作
     */
    @Test
    public void updateUser(){
        User user = new User();
        user.setId(5L);
        user.setAge(55);

        int result = userMapper.updateById(user);
        System.out.println("update:" + result );
    }

注意

  • 填充原理是直接给entity的属性设置值!!!
  • 注解则是指定该属性在对应情况下必有值,如果无值则入库会是null
  • MetaObjectHandler提供的默认方法的策略均为:如果属性有值则不覆盖,如果填充值为null则不填充
  • 字段必须声明TableField注解,属性fill选择对应策略,该声明告知Mybatis-Plus需要预留注入SQL字段
  • 填充处理器MyMetaObjectHandler在 Spring Boot 中需要声明@Component或@Bean注入
  • 要想根据注解FieldFill.xxx和字段名以及字段类型来区分必须使用父类的strictInsertFill或者strictUpdateFill方法
  • 不需要根据任何来区分可以使用父类的fillStrategy方法

4、乐观锁(OptimisticLockerInnerInterceptor)

当要更新一条记录的时候,希望这条记录没有被别人更新
乐观锁实现方式:

  • 取出记录时,获取当前version
  • 更新时,带上这个version
  • 执行更新时, set version = newVersion where version = oldVersion
  • 如果version不对,就更新失败

4.1 在user表中添加 int型version 字段

ALTER TABLE`user` ADD COLUMN `version` INT DEFAULT 0;

4.2 配置插件

创建一个配置类MybatisPlusConfig,注入乐观锁组件:

@Configuration
@MapperScan("com.wlp.mp.mapper")	//将主启动类的@MapperScan标在此处
public class MybatisPlusConfig {
    /**
     * 配置mp的乐观锁
     *
     * @return
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
}

4.3 在实体类的字段上加上@Version注解

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    @TableId(type = IdType.AUTO)        //使用自增的主键策略
    private Long id;

    private String name;
    private Integer age;
    private String email;

    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;               //insert操作的时间
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;               //update操作的时间

/******************* 新增 ****************************/

    @Version
    private Integer version;        //乐观锁
}

插入记录是时,给version字段赋初值(二选一)

  1. 可以采用代码的形式:
    在自动填充的insert填充方法添加以下代码:
        //给version字段赋初值:1
        this.setFieldValByName("version",1,metaObject);

在User类添加注解@TableField

    @Version
    @TableField(fill = FieldFill.INSERT)        //插入时赋初值
    private Integer version;        //乐观锁
  1. 也可以采用数据库字段的default赋值的形式:
ALTER TABLE`user` ADD COLUMN `version` INT DEFAULT 0;

注意

  • 支持的数据类型只有:int,Integer,long,Long,Date,Timestamp,LocalDateTime
  • 整数类型下 newVersion = oldVersion + 1
    newVersion 会回写到 entity 中
  • 仅支持 updateById(id) 与 update(entity, wrapper) 方法
    在 update(entity, wrapper) 方法下, wrapper 不能复用!!!

4.5 测试

要按照先查询后更新的顺序:

	    /**
     * 乐观锁
     *  要先查询,再修改
     */
    @Test
    public void testOptimisticLock(){
		//查询
        User user = userMapper.selectById(5L);
        user.setAge(555);
        //更新
        int result = userMapper.updateById(user);
        System.out.println("OptimisticLock:"+result);
    }

5、分页

其实mp的分页插件和 PageHelper 很像;

5.1 添加组件

//Spring boot方式
@Configuration
@MapperScan("com.baomidou.cloud.service.*.mapper*")
public class MybatisPlusConfig {

    // 旧版
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
        // paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }
    
    // 最新版
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
        return interceptor;
    }
    
}

5.2 测试

    /**
     * 分页
     */
    @Test
    public void pages(){
        Page<User> objectPage = new Page<User>(1,5);    //从第1页开始显示,每页5条记录

        Page<User> page = userMapper.selectPage(objectPage, null);

        System.out.println("getRecords -->"+page.getRecords());    //当前页的所有记录详细信息
        System.out.println("getCurrent -->"+page.getCurrent());    //当前页
        System.out.println("getSize -->"+page.getSize());    //每页显示的数量
        System.out.println("getTotal -->"+page.getTotal());    //总记录数
        System.out.println("getPages -->"+page.getPages());    //总页数

        System.out.println("hasPrevious -->"+page.hasPrevious());    //是否有前一页
        System.out.println("hasNext -->"+page.hasNext());    //是否有后一页

    }

6、逻辑删除

逻辑删除和物理删除

  • 物理删除:执行完delete操作,记录从数据库中删除;在数据库中看不到删除的记录。查询操作,看不到已经删除的记录。
  • 逻辑删除:执行完delete操作,记录依然存在数据库中,并没有真正删除,只是deleted字段被置1,表示在逻辑上“删除”;在数据库可以看到“删除”的记录。查询操作,看不到已经“删除”的记录;查询时会加上where deleted =0 的条件;

说明:

  • 默认情况下,deleted字段 :0 表示未删除,1 表示已经删除;
  • 插入: 不作限制
  • 查找: 追加where条件过滤掉已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
  • 更新: 追加where条件防止更新到已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
    删除: 转变为 更新 操作

6.1 在application.yml中添加配置信息

# DataSource Config
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mp?useSSL=false
    username: root
    password: 123456

  application:
    name: mp_demo

#开启mybatis-plus的日志
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    
##################### 新增 #########################
  #逻辑删除
  global-config:
    db-config:
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

6.2 在user表添加deleted字段,并赋初值

(赋初值也有两种方式,参见上述 4.乐观锁 章节)

ALTER TABLE`user` ADD COLUMN `deleted` INT DEFAULT 0;

6.3 在User类中添加deleted字段,并标上@TableLogic注解

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    @TableId(type = IdType.AUTO)        //使用自增的主键策略
    private Long id;

    private String name;
    private Integer age;
    private String email;

    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;               //insert操作的时间
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;               //update操作的时间

    @Version
    @TableField(fill = FieldFill.INSERT)        //插入时赋初值
    private Integer version;        //乐观锁
    
/******************* 新增 ****************************/
    @TableLogic
    private Integer deleted;        //逻辑删除-> 1:删除,0:未删除
}

6.4 测试

    /**
     * 测试逻辑删除
     */
    @Test
    public void logicDelete(){
        userMapper.deleteById(1391340053724164114L);
    }

数据库中的结果:deleted字段被置为1,但是该条记录还在数据库中
在这里插入图片描述
查询的结果:
Mybatis-Plus学习笔记_第5张图片

7、慢SQL语句分析

该功能依赖 p6spy 组件,完美的输出打印 SQL 及执行时长 3.1.0 以上版本

注意:开启该功能会降低系统的性能,不建议在生产环境开启!!!

7.1 添加pom依赖

        <!-- mybatis-plus 的SQL语句性能分析插件 -->
        <dependency>
            <groupId>p6spy</groupId>
            <artifactId>p6spy</artifactId>
            <version>3.9.0</version>
        </dependency>

7.2 修改application.yml配置

我采用的是mysql,修改数据源驱动和url:

    driver-class-name: com.p6spy.engine.spy.P6SpyDriver   # SQL性能分析
    url: jdbc:p6spy:mysql://localhost:3306/mp?useSSL=false   # SQL性能分析

官方提供的H2,修改数据源驱动和url:

    driver-class-name: com.p6spy.engine.spy.P6SpyDriver
    url: jdbc:p6spy:h2:mem:test

7.3 添加 慢SQL语句分析 的配置信息

在resource文件夹下新建spy.properties配置文件

#3.2.1以上使用
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 设置 p6spy driver 代理
deregisterdrivers=true
# 取消JDBC URL前缀
useprefix=true
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 自定义慢SQL记录标准时间为 2 秒, SQL执行时间超过2秒即报错!
outagedetectioninterval=2

7.4 测试

调用crud时,控制台会打印耗时,时间 和sql语句即为配置成功:
在这里插入图片描述

8、代码生成器

类似mybatis的MBG自动生成代码:

/**
     * 代码生成器配置
     */
    @Test
    public void run() {

        // 1、创建代码生成器
        AutoGenerator mpg = new AutoGenerator();

        // 2、全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
//        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setOutputDir("D:\\Java\\project\\guli-parent\\service\\service-edu" + "/src/main/java");

        gc.setAuthor("wlp");
        gc.setOpen(false); //生成后是否打开资源管理器
        gc.setFileOverride(false); //重新生成时文件是否覆盖
        gc.setServiceName("%sService");	//去掉Service接口的首字母I
        gc.setIdType(IdType.ASSIGN_ID); //主键策略
        gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型
        gc.setSwagger2(true);//开启Swagger2模式

        mpg.setGlobalConfig(gc);

        // 3、数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/guli?serverTimezone=GMT%2B8");
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("123456");
        dsc.setDbType(DbType.MYSQL);
        mpg.setDataSource(dsc);

        // 4、包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName("eduservice"); //模块名
        pc.setParent("com.wlp");    //com.wlp.eduservice = com.wlp加上模块名eduservice

        pc.setController("controller");     //com.wlp.eduservice.controller --> controller层的包名
        pc.setEntity("entity");             //com.wlp.eduservice.entity --> entity 的包名
        pc.setService("service");           //com.wlp.eduservice.service --> service层的包名
        pc.setMapper("mapper");             //com.wlp.eduservice.mapper --> mapper(dao)层的包名
        mpg.setPackageInfo(pc);

        // 5、策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setInclude("edu_chapter","edu_course_description","edu_course","edu_video");     //指定要生成的表名
        strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
        strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体时去掉表前缀

        strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
        strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作

        strategy.setRestControllerStyle(true); //restful api风格控制器
        strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符

        mpg.setStrategy(strategy);


        // 6、执行
        mpg.execute();
    }

9、Wrapper条件查询

待更新…

你可能感兴趣的:(mybatis)