当前位置:   article > 正文

mybatis-plus使用详情教程_mabatis plus教程

mabatis plus教程

 

快速入门:

步骤:

1.创建数据库 mybatis_plus

2.创建数据库表,插入数据

  1. create database mybatis_plus;
  2. DROP TABLE IF EXISTS user;
  3. CREATE TABLE user
  4. (
  5. id BIGINT(20) NOT NULL COMMENT '主键ID',
  6. name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
  7. age INT(11) NULL DEFAULT NULL COMMENT '年龄',
  8. email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
  9. PRIMARY KEY (id)
  10. );
  11. INSERT INTO user (id, name, age, email) VALUES
  12. (1, 'Jone', 18, 'test1@baomidou.com'),
  13. (2, 'Jack', 20, 'test2@baomidou.com'),
  14. (3, 'Tom', 28, 'test3@baomidou.com'),
  15. (4, 'Sandy', 21, 'test4@baomidou.com'),
  16. (5, 'Billie', 24, 'test5@baomidou.com');

 3、编写项目,初始化项目!使用SpringBoot初始化!

 4、导入依赖

  1. <!--数据库驱动-->
  2. <dependency>
  3. <groupId>mysql</groupId>
  4. <artifactId>mysql-connector-java</artifactId>
  5. </dependency>
  6. <!--lombok-->
  7. <dependency>
  8. <groupId>org.projectlombok</groupId>
  9. <artifactId>lombok</artifactId>
  10. </dependency>
  11. <!--mybatis-plus-->
  12. <!--mybatis-plus 是自己开发,并非官方的!-->
  13. <dependency>
  14. <groupId>com.baomidou</groupId>
  15. <artifactId>mybatis-plus-boot-starter</artifactId>
  16. <version>3.4.0</version>
  17. </dependency>

说明:我们使用mybatis-plus可以节省我们大量的代码,尽量不要同时导入mybatis和mybatis-plus!版本的差异!

5、连接数据库!这一步和mybatis相同!

  1. #mysql5 驱动不同
  2. #spring.datasource.username=root
  3. #spring.datasource.password=123456
  4. #spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?useSSL=false&useUnicode=true&characterEncoding=utf-8
  5. #spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  6. #mysql8 驱动不同、需要添加时区的配置 serverTimezone=GMT%2B8
  7. spring.datasource.username=root
  8. spring.datasource.password=123456
  9. spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
  10. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

 6、pojo-dao(连接mybatis,配置mapper.xml文件)-service-controller(传统方式)

 6、使用了mybatis-plus之后

  • pojo
  1. /**
  2. * @Author panghl
  3. * @Date 2020/10/15 22:18
  4. * @Description TODO
  5. **/
  6. @Data
  7. @AllArgsConstructor
  8. @NoArgsConstructor
  9. public class User {
  10. private Long id;
  11. private String name;
  12. private Integer age;
  13. private String email;
  14. }
  • mapper接口
  1. /**
  2. * @Author panghl
  3. * @Date 2020/10/15 22:19
  4. * @Description 在对应的Mapper上面实现基本的接口BaseMapper
  5. **/
  6. @Repository //代表持久层
  7. public interface UserMapper extends BaseMapper<User> {
  8. //所有的CRUD操作都已经编写完成了
  9. //你不需要像以前的配置一大堆文件了!
  10. }

注意点,我们需要再主启动类上去扫描我们的mapper包下的所有接口 @MapperScan("com.kuang.mapper")

  • 使用:测试类的测试
  1. @SpringBootTest
  2. class MybatisPlusApplicationTests {
  3. //继承了BaseMapper,所有的方法都来自父类,我们也可以编写自己的扩展方法
  4. @Autowired
  5. private UserMapper userMapper;
  6. @Test
  7. void contextLoads() {
  8. //参数是一个Wrapper,条件构造器,这里我们先不用 null
  9. //查询全部的用户
  10. List<User> users = userMapper.selectList(null);
  11. users.forEach(System.out::println);
  12. }
  13. }

    查询成功! 

 

配置日志

我们所有的sql现在是不可见的,我们希望知道它是怎么执行的,所以我们必须要看日志!

  1. #配置日志
  2. mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

配置完毕日志之后,后面的学习就需要注意这个自动生成的SQL,你们就会喜欢上Mybatis-plus!

 

CRUD扩展

   插入操作

  •   Insert:

  1. //测试插入
  2. @Test
  3. public void testInsert(){
  4. User user = new User();
  5. user.setName("狂神说Java");
  6. user.setAge(3);
  7. user.setEmail("phhl@qq.com");
  8. int result = userMapper.insert(user);//帮我们自动生成id
  9. System.out.println(result);//受影响的行数
  10. System.out.println(user);//发现,id会自动回填
  11. }

 

 数据库插入的id的默认值为:全局的唯一id

 

主键生成策略

默认IdType.ID_WORKER全局唯一id

分布式系统唯一id生成:https://www.cnblogs.com/haoxinyue/p/5208136.html

雪花算法:

snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。具体实现的代码可以参看https://github.com/twitter/snowflake.可以保证几乎全球唯一!

  1. id全局唯一
  2. 高性能,低延迟
  3. 独立的应用
  4. 按时间有序
  5. 需要独立的开发和部署

 

主键自增

我们需要配置主键自增:

1、实体类字段上 

@TableId(type = IdType.AUTO)

2、数据库字段一定要是自增!

3、再次测试插入即可!

  1. //其余的源码解释:
  2. public enum IdType {
  3. AUTO(0), //数据库id自增
  4. NONE(1), //未设置主键
  5. INPUT(2), //手动输入 一旦手动输入就需要自己写id
  6. ASSIGN_ID(3),
  7. ASSIGN_UUID(4),
  8. /** @deprecated */
  9. @Deprecated
  10. ID_WORKER(3), //默认的全局唯一id mp自带策略:生成19位值,数字类型使用这种策略,比如long
  11. /** @deprecated */
  12. @Deprecated
  13. ID_WORKER_STR(3), // 全局唯一id uuid 默认的全局唯一id mp自带策略:生成19位值,字符串类型使用这种策略
  14. /** @deprecated */
  15. @Deprecated
  16. UUID(4); //随机唯一值
  17. }

 

更新操作

   update:

  1. //测试更新
  2. @Test
  3. public void testUpdate(){
  4. User user = new User();
  5. // 通过条件自动拼接动态sql
  6. user.setId(1L);
  7. user.setName("Update");
  8. user.setAge(88);
  9. //注意:updateById 但是参数是一个对象!
  10. int i = userMapper.updateById(user);
  11. System.out.println(i);
  12. }

所有的sql都是自动帮你动态配置的!

自动填充

 创建时间、修改时间!这些个操作一般都是自动化完成的,我们不希望手动更新!

阿里巴巴开发手册:所有的数据库表:gmt_create、gmt_modified几乎所有的表都要配置上!而且需要自动化!

  1. 方式一:数据库级别(工作中不推荐使用)

1、在表中新增字段 create_time,update_time

2、再次测试插入方法,我们需要先把实体类 同步!

  1. private Date createTime;
  2. private Date updateTime;

 3、再次更新查看结果即可

  1. 方式二:代码级别

1、删除数据库的默认值、更新操作!

2、实体类字段属性上需要添加注解

  1. //字段添加填充内容
  2. @TableField(fill = FieldFill.INSERT)
  3. private Date createTime;
  4. @TableField(fill = FieldFill.INSERT_UPDATE)
  5. private Date updateTime;

3、编写处理器来处理这个注解即可!

  1. /**
  2. * @Author panghl
  3. * @Date 2020/10/15 23:25
  4. * @Description 自动填充功能
  5. **/
  6. @Slf4j
  7. @Component //一定不要忘记把处理器加到IOC容器中
  8. public class MyMetaObjectHandler implements MetaObjectHandler {
  9. //插入时的填充策略
  10. @Override
  11. public void insertFill(MetaObject metaObject) {
  12. log.info("start insert fill...");
  13. // default MetaObjectHandler setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject)
  14. this.setFieldValByName("createTime",new Date(),metaObject);
  15. this.setFieldValByName("updateTime",new Date(),metaObject);
  16. }
  17. //更新时的填充策略
  18. @Override
  19. public void updateFill(MetaObject metaObject) {
  20. log.info("start update fill...");
  21. this.setFieldValByName("updateTime",new Date(),metaObject);
  22. }
  23. }

 4、测试插入、更新、观察时间即可!

 

乐观锁

在面试过程中,我们经常被问到乐观锁,悲观锁!这个其实非常简单!

乐观锁:顾名思义十分乐观,它总是认为不会出现问题,无论干什么不去上锁!如果出现问题,再次更新值测试。通过version、new version来实现。

悲观锁:顾名思义十分悲观,它总是认为总是出现问题,无论干什么都会上锁!再去操作!

我们主要讲解 乐观锁机制!

主要适用场景

意图:

当要更新一条记录的时候,希望这条记录没有被别人更新

乐观锁实现方式:

  • 取出记录时,获取当前version
  • 更新时,带上这个version
  • 执行更新时, set version = newVersion where version = oldVersion
  • 如果version不对,就更新失败
  1. 乐观锁:1、先查询,获得版本号 version = 1
  2. -- A
  3. update user set name = "kuangshen",version = version + 1
  4. where id = 2 and version = 1
  5. -- B 线程抢先完成,这个时候 version = 2 ,会导致A修改失败!
  6. update user set name = "kuangshen",version = version + 1
  7. where id = 2 and version = 1

 测试一下MP的乐观锁插件:

  1、给数据库中增加version字段,默认值设置为1

2、我们实体类增加version属性 

  1. @Version //乐观锁Version注解
  2. private Integer version;

3、注册乐观锁插件

  1. /**
  2. * @Author panghl
  3. * @Date 2020/10/16 22:18
  4. * @Description TODO
  5. **/
  6. @EnableTransactionManagement
  7. //扫描我们的mapper文件夹
  8. @MapperScan("com.kuang.mapper")
  9. @Configuration //配置类
  10. public class MybatisPlusConfig {
  11. //注册乐观锁插件
  12. @Bean
  13. public OptimisticLockerInterceptor optimisticLockerInterceptor() {
  14. return new OptimisticLockerInterceptor();
  15. }
  16. }

4、测试乐观锁 

  1. //测试乐观锁成功!
  2. @Test
  3. public void testOptimisticLocker(){
  4. //1.查询用户信息
  5. User user= userMapper.selectById(1L);
  6. //2.修改用户信息
  7. user.setName("kuangshen");
  8. user.setEmail("phl2566@qq.com");
  9. //3.执行更新操作
  10. userMapper.updateById(user);
  11. }
  12. //测试乐观锁失败!多线程下
  13. @Test
  14. public void testOptimisticLocker2(){
  15. //线程1
  16. User user= userMapper.selectById(1L);
  17. user.setName("kuangshen");
  18. user.setEmail("phl2566@qq.com");
  19. //模拟另外一个线程执行了插队操作
  20. User user2= userMapper.selectById(1L);
  21. user2.setName("kuangshen");
  22. user2.setEmail("phl2566@qq.com");
  23. userMapper.updateById(user2);
  24. //自旋锁来多次尝试操作
  25. userMapper.updateById(user);//如果没有乐观锁就会覆盖插队线程的值
  26. }

 

 
查询操作

  1. //测试查询
  2. @Test
  3. public void testSelectById(){
  4. User user = userMapper.selectById(1L);
  5. System.out.println(user);
  6. }
  7. //测试批量查询
  8. @Test
  9. public void testSelectByBatchIds(){
  10. List<User> users = userMapper.selectBatchIds(Arrays.asList(1l, 2l, 3l));
  11. System.out.println(users);
  12. }
  13. //按条件查询之一使用map操作
  14. @Test
  15. public void testSelectByMap(){
  16. HashMap<String,Object> map = new HashMap<>();
  17. //自定义要查询
  18. map.put("name","狂神说Java");
  19. map.put("age",3);
  20. List<User> users = userMapper.selectByMap(map);
  21. users.forEach(System.out::println);
  22. }

 分页查询

分页在网站使用的十分之多!(必须掌握)

1、原是的limit进行分页

2、pageHelper第三方插件

3、其实也内置了分页插件!

如何使用:

1、配置拦截器组件即可

  1. /**
  2. * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
  3. */
  4. @Bean
  5. public MybatisPlusInterceptor mybatisPlusInterceptor() {
  6. MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  7. interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
  8. return interceptor;
  9. }
  10. @Bean
  11. public ConfigurationCustomizer configurationCustomizer() {
  12. return configuration -> configuration.setUseDeprecatedExecutor(false);
  13. }

2、直接使用Page对象即可! 

  1. //测试分页查询
  2. @Test
  3. public void testPage(){
  4. //参数1:当前页
  5. //参数2: 页面大小
  6. //使用了分页插件之后,所有的分页操作也变得简单了!
  7. Page<User> page = new Page<>(1,3);
  8. userMapper.selectPage(page, null);
  9. // page.getRecords() 获取它的所有记录
  10. page.getRecords().forEach(System.out::println);
  11. System.out.println("总数:"+page.getTotal());
  12. System.out.println("当前页"+page.getCurrent());
  13. System.out.println("大小"+page.getSize());
  14. System.out.println("是否有上一页"+page.hasPrevious());
  15. System.out.println("是否有下一页"+page.hasNext());
  16. }

 

删除操作

  1. //测试删除
  2. @Test
  3. public void testDeleteById(){
  4. userMapper.deleteById(1316751832526925825L);
  5. }
  6. //测试id批量删除
  7. @Test
  8. public void testDeleteByIds(){
  9. userMapper.deleteBatchIds(Arrays.asList(1316751832526925826L,1316751832526925827L));
  10. }
  11. //通过map删除
  12. @Test
  13. public void testDeleteByMap(){
  14. HashMap<String,Object> map = new HashMap<>();
  15. map.put("name","狂神说Java");
  16. userMapper.deleteByMap(map);
  17. }

我们在工作中会遇到一些问题:逻辑删除! 

逻辑删除

物理删除:从数据库中直接删除

逻辑删除:在数据库中没有背移除,而是通过一个变量来让他失效!delete=0 =>  delete=1

管理员可以查看被删除的记录!防止数据的丢失,类似于回收站!

测试一下:

1、在数据库中增加一个deleted字段

2、 实体类中增加属性

  1. @TableLogic //逻辑删除
  2. private Integer deleted;

3、配置 

高版本只需要配置 配置文件里的配置信息!

  1. #配置逻辑删除
  2. # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
  3. mybatis-plus.global-config.db-config.logic-delete-field=deleted
  4. #逻辑已删除值(默认为1)
  5. mybatis-plus.global-config.db-config.logic-delete-value=1
  6. #逻辑未删除值(默认为0)
  7. mybatis-plus.global-config.db-config.logic-not-delete-value=0

低版本需要在MybatisPlusConfig类中配置:

  1. /*低版本配置逻辑删除*/
  2. @Bean
  3. public ISqlInjector sqlInjector(){
  4. return new LogicSqlInjector();
  5. }

4.测试一下

 

以上的所有CRUD操作及其扩展操作,我们都必须精通掌握!会大大提高你的工作和写项目的效率!

 

性能分析插件(执行SQL分析打印

由于使用的3.2.0以上版本,在MybatisPlus文档中可使用 执行SQL分析打印 功能

该功能依赖p6spy组件,完美的输出打印SQL及执行时长!

我们在平时的开发中,会遇到一些慢sql。测试!druid...来发现!

作用:性能分析拦截器,用于输出每条SQL语句及其执行时间。

MP也提供了性能分析插件,如果超过这个时间就停止运行!

这里提供低版本演示:

 

1.添加依赖

<dependency>
     <groupId>p6spy</groupId>
     <artifactId>p6spy</artifactId>
     <version>3.8.7</version>
</dependency>

2、导入组件

  1. /**
  2. * SQL 执行性能分析插件
  3. * 开发环境使用,线上不推荐。 maxTime指的是sql最大执行时长
  4. * @return
  5. */
  6. @Bean
  7. @Profile({"dev","test"})// 设置 dev test 环境开启
  8. public PerformanceInterceptor performanceInterceptor() {
  9. PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
  10. performanceInterceptor.setMaxTime(100);//设置sql执行的最大时间,如果超过了则不执行
  11. performanceInterceptor.setFormat(true);//是否格式化代码
  12. return new PerformanceInterceptor();
  13. }

 记住,要在SpringBoot配置环境为dev或者test环境!

3、在配置文件中添加

  1. #环境设置:dev \test \prod
  2. spring.profiles.active=dev

4、测试使用!

 

 

条件构造器

可参考mybatis-plus官方文档(https://baomidou.com/guide/wrapper.html#abstractwrapper)

条件参数说明

查询方式说明
setSqlSelect设置 SELECT 查询字段
whereWHERE 语句,拼接 + WHERE 条件
andAND 语句,拼接 + AND 字段=值
andNewAND 语句,拼接 + AND (字段=值)
orOR 语句,拼接 + OR 字段=值
orNewOR 语句,拼接 + OR (字段=值)
eq等于=
allEq基于 map 内容等于=
ne不等于<>
gt大于>
ge大于等于>=
lt小于<
le小于等于<=
like模糊查询 LIKE
notLike模糊查询 NOT LIKE
inIN 查询
notInNOT IN 查询
isNullNULL 值查询
isNotNullIS NOT NULL
groupBy分组 GROUP BY
havingHAVING 关键词
orderBy排序 ORDER BY
orderAscASC 排序 ORDER BY
orderDescDESC 排序 ORDER BY
existsEXISTS 条件语句
notExistsNOT EXISTS 条件语句
betweenBETWEEN 条件语句
notBetweenNOT BETWEEN 条件语句
addFilter自由拼接 SQL
last拼接在最后,例如:last("LIMIT 1")

示例代码

  1. //记住查看输出的SQL进行分析
  2. @Test
  3. void test1(){
  4. //查询name不为空的用户,并且邮箱不为空的用户,年龄大于等于12
  5. QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
  6. userQueryWrapper.isNotNull("name");
  7. userQueryWrapper.isNotNull("email");
  8. userQueryWrapper.ge("age",12);
  9. userMapper.selectList(userQueryWrapper).forEach(System.out::println);
  10. }
  11. @Test
  12. void test2(){
  13. //查询名字 狂神说
  14. QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  15. queryWrapper.eq("name","狂神说");
  16. User user = userMapper.selectOne(queryWrapper);
  17. System.out.println(user);
  18. }
  19. @Test
  20. void test3(){
  21. //查询年龄在20-30岁之间的用户
  22. QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  23. queryWrapper.between("age",20,30);
  24. Integer count = userMapper.selectCount(queryWrapper);//查询结果数
  25. System.out.println(count);
  26. }
  27. //模糊查询
  28. @Test
  29. void test4(){
  30. QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  31. //左和右 e%
  32. queryWrapper
  33. .notLike("name","e")
  34. .likeRight("email","t");
  35. List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);
  36. maps.forEach(System.out::println);
  37. }
  38. //模糊查询
  39. @Test
  40. void test5(){
  41. QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  42. //id 在子查询中查出来
  43. /*SELECT id,name,age,email,version,deleted,create_time,update_time
  44. FROM user
  45. WHERE deleted=0
  46. AND (id IN
  47. (select id
  48. from user
  49. where id < 3))*/
  50. queryWrapper.inSql("id","select id from user where id < 3");
  51. List<Object> objects = userMapper.selectObjs(queryWrapper);
  52. objects.forEach(System.out::println);
  53. }
  54. @Test
  55. void test6(){
  56. QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  57. //通过id进行排序
  58. queryWrapper.orderByDesc("id");
  59. List<User> users = userMapper.selectList(queryWrapper);
  60. users.forEach(System.out::println);
  61. }

其余的测试,可以下去多多练习!

 

代码自动生成器

dao、pojo、service、controller都给我自己去编写完成! AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、 Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

1、导入mvn坐标

  1. <!--mybatis-plus-->
  2. <!--mybatis-plus 是自己开发,并非官方的!-->
  3. <dependency>
  4. <groupId>com.baomidou</groupId>
  5. <artifactId>mybatis-plus-boot-starter</artifactId>
  6. <version>3.4.0</version>
  7. </dependency>
  8. <!--MP代码自动生成器-->
  9. <dependency>
  10. <groupId>com.baomidou</groupId>
  11. <artifactId>mybatis-plus-generator</artifactId>
  12. <version>3.4.0</version>
  13. </dependency>
  14. <dependency>
  15. <groupId>org.apache.velocity</groupId>
  16. <artifactId>velocity-engine-core</artifactId>
  17. <version>2.2</version>
  18. </dependency>
  19. <!--swagger-->
  20. <dependency>
  21. <groupId>io.springfox</groupId>
  22. <artifactId>springfox-swagger-ui</artifactId>
  23. <version>2.6.1</version>
  24. </dependency>
  25. <dependency>
  26. <groupId>io.springfox</groupId>
  27. <artifactId>springfox-swagger2</artifactId>
  28. <version>2.6.1</version>
  29. </dependency>

2、测试

  1. import com.baomidou.mybatisplus.annotation.DbType;
  2. import com.baomidou.mybatisplus.annotation.FieldFill;
  3. import com.baomidou.mybatisplus.annotation.IdType;
  4. import com.baomidou.mybatisplus.annotation.TableField;
  5. import com.baomidou.mybatisplus.generator.AutoGenerator;
  6. import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
  7. import com.baomidou.mybatisplus.generator.config.GlobalConfig;
  8. import com.baomidou.mybatisplus.generator.config.PackageConfig;
  9. import com.baomidou.mybatisplus.generator.config.StrategyConfig;
  10. import com.baomidou.mybatisplus.generator.config.po.TableFill;
  11. import com.baomidou.mybatisplus.generator.config.rules.DateType;
  12. import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
  13. import java.util.ArrayList;
  14. // 代码自动生成器
  15. public class KuangCode {
  16. public static void main(String[] args) {
  17. // 需要构建一个 代码自动生成器 对象
  18. AutoGenerator mpg = new AutoGenerator();
  19. // 配置策略
  20. // 1、全局配置
  21. GlobalConfig gc = new GlobalConfig();
  22. String projectPath = System.getProperty("user.dir");
  23. gc.setOutputDir(projectPath+"/src/main/java");
  24. gc.setAuthor("狂神说");
  25. gc.setOpen(false);
  26. gc.setFileOverride(false); // 是否覆盖
  27. gc.setServiceName("%sService"); // 去Service的I前缀
  28. gc.setIdType(IdType.ID_WORKER);
  29. gc.setDateType(DateType.ONLY_DATE);
  30. gc.setSwagger2(true);
  31. mpg.setGlobalConfig(gc);
  32. //2、设置数据源
  33. DataSourceConfig dsc = new DataSourceConfig();
  34. dsc.setUrl("jdbc:mysql://localhost:3306/mybatis_plus?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8");
  35. dsc.setDriverName("com.mysql.cj.jdbc.Driver");
  36. dsc.setUsername("root");
  37. dsc.setPassword("123456");
  38. dsc.setDbType(DbType.MYSQL);
  39. mpg.setDataSource(dsc);
  40. //3、包的配置
  41. PackageConfig pc = new PackageConfig();
  42. pc.setModuleName("blog");
  43. pc.setParent("com.kuang");
  44. pc.setEntity("entity");
  45. pc.setMapper("mapper");
  46. pc.setService("service");
  47. pc.setController("controller");
  48. mpg.setPackageInfo(pc);
  49. //4、策略配置
  50. StrategyConfig strategy = new StrategyConfig();
  51. strategy.setInclude("user"); // 设置要映射的表名
  52. strategy.setNaming(NamingStrategy.underline_to_camel);
  53. strategy.setColumnNaming(NamingStrategy.underline_to_camel);
  54. strategy.setEntityLombokModel(true); // 自动lombok;
  55. strategy.setLogicDeleteFieldName("deleted");
  56. // 自动填充配置
  57. TableFill gmtCreate = new TableFill("gmt_create", FieldFill.INSERT);
  58. TableFill gmtModified = new TableFill("gmt_modified",
  59. FieldFill.INSERT_UPDATE);
  60. ArrayList<TableFill> tableFills = new ArrayList<>();
  61. tableFills.add(gmtCreate);
  62. tableFills.add(gmtModified);
  63. strategy.setTableFillList(tableFills);
  64. // 乐观锁
  65. strategy.setVersionFieldName("version");
  66. strategy.setRestControllerStyle(true);
  67. strategy.setControllerMappingHyphenStyle(true); //localhost:8080/hello_id_2
  68. mpg.setStrategy(strategy);
  69. mpg.execute(); //执行
  70. }
  71. }

此时大功已成!

 

 

 

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/790664
推荐阅读
相关标签
  

闽ICP备14008679号