Mybatis-Plus学习笔记:P4-SpringBoot+Mybatis Plus

P4-SpringBoot+Mybatis Plus

  • 1.SpringBoot+Mybatis Plus快速开始
    • 1.新建springboot项目,配置父工程依赖
    • 1.2数据库配置文件
    • 1.3pojo
    • 1.4Mapper接口
    • 1.5启动类
    • 1.6测试类
  • 2.配置日志 application.properties
  • 3.CRUD扩展---插入操作
    • 3.1插入操作-Insert
    • 3.2插入操作-Insert-主键生成策略
    • 3.3 @TableId 主键注解
  • 4.CRUD扩展---更新操作
    • 4.1更新操作-updateById() 参数是一个对象
    • 4.2更新操作-自动填充
      • 4.2.1方式1:数据库级别(工作中不允许修改数据库)
      • 4.2.2方式2:代码级别
    • 4.3 @TableField 字段注解(非主键)
      • 4.3.1@TableField -参数 FieldFill
  • 3-4 插入操作、更新操作时,乐观锁问题
    • 3-4.1悲观锁
    • 3-4.2乐观锁
      • 3-4.2.1乐观锁实现方式
      • 3-4.2.2测试乐观锁插件
    • 3-4.3 @Version 乐观锁注解
  • 5.CRUD扩展---查询操作
    • 5.1单个查询
    • 5.2多个查询
    • 5.3条件查询- map操作
    • 5.4分页查询
  • 6.CRUD扩展---删除操作
    • 6.1根据id,单个删除,删除记录
    • 6.2根据id,批量删除,删除记录
    • 6.3根据条件删除 map
    • 6.4逻辑删除
    • 6.5 @TableLogic 逻辑删除
  • 7. 条件构造器
    • 7.1测试1
    • 7.2测试2:查询一个数据 selectOne()
    • 7.3测试3:between
    • 7.4测试4:模糊查询
    • 7.5测试5:嵌套查询
    • 7.6测试6:排序
  • 9. 代码自动生成器
    • 9.1配置maven依赖
    • 9.2官方模板
    • 9.3代码测试

1.SpringBoot+Mybatis Plus快速开始

1.新建springboot项目,配置父工程依赖


<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>org.jqgroupId>
    <artifactId>mpSpringBootartifactId>
    <version>1.0-SNAPSHOTversion>
    <properties>
        <java.version>1.8java.version>
    properties>
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.2.5.RELEASEversion>
        <relativePath/> 
    parent>

    <dependencies>
        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>8.0.29version>
        dependency>
        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
        dependency>
        
        <dependency>
            <groupId>com.baomidougroupId>
            <artifactId>mybatis-plus-boot-starterartifactId>
            <version>3.0.5version>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintagegroupId>
                    <artifactId>junit-vintage-engineartifactId>
                exclusion>
            exclusions>
        dependency>
    dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
        plugins>
    build>

project>

1.2数据库配置文件

mysql 8 配置 必须增加时区配置

# mysql 8 配置  必须增加时区配置
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

1.3pojo

lombok 自动生成set、get方法

package com.jq.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

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

}

1.4Mapper接口

继承BaseMapper,所有crud都已编写完成

package com.jq.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jq.pojo.User;
import org.springframework.stereotype.Repository;

@Repository // 代表持久层
public interface UserMapper extends BaseMapper<User> {
}


1.5启动类

我们需要在启动类上去扫描我们的mapper包下的所有接口,@MapperScan(“com.jq.mapper”)

package com.jq;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//扫描Mapper文件夹
@MapperScan("com.jq.mapper")
@SpringBootApplication
public class MybatisPlusApplication {
    public static void main(String[] args) {
        SpringApplication.run(MybatisPlusApplication.class,args);
    }
}

1.6测试类

package com.jq;

import com.jq.mapper.UserMapper;
import com.jq.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class MybatisPlusApplicationTest {
    //继承BaseMapper。所有的方法都自父类
    //我们也可以编写自己的扩展方法
    @Autowired
    private UserMapper userMapper;

    @Test
    void contextLoads(){
        //参数是一个Wrapper,条件构造器,这里我们先不用,设置为null即可
        //查询全部用户
        List<User> users = userMapper.selectList(null);
        users.forEach(System.out::println);
    }
}

Mybatis-Plus学习笔记:P4-SpringBoot+Mybatis Plus_第1张图片

2.配置日志 application.properties

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

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

Mybatis-Plus学习笔记:P4-SpringBoot+Mybatis Plus_第2张图片

3.CRUD扩展—插入操作

3.1插入操作-Insert

/**
* 测试插入
*/
@Test
public void testInsert(){
   User user = new User();
   user.setName("小明");
   user.setAge(3);
   user.setEmail("[email protected]");
   int result = userMapper.insert(user); //自动生成id
   System.out.println(result);//受影响的行数
   System.out.println(user); //发现,id会自动回填
}

3.2插入操作-Insert-主键生成策略

数据库中主键生成

  • uuid
  • 自增id
  • 雪花算法 :snowflake
  • redis
  • zookeeper

雪花算法,自动生成id,Long型id
雪花算法生成的ID是一个64 bit的long型的数字且按时间趋势递增。

  • 首位无效符:第一个 bit 作为符号位,因为我们生成的都是正数,所以第一个 bit 统一都是 0。
  • 时间戳:占用 41 bit ,精确到毫秒。41位最好可以表示2^41-1毫秒,转化成单位年为 69 年。
  • 机器编码:占用10bit,其中高位 5 bit 是数据中心 ID,低位 5 bit 是工作节点 ID,最多可以容纳 1024 个节点。
  • 序列号:占用12bit,每个节点每毫秒0开始不断累加,最多可以累加到4095,一共可以产生 4096 个ID。
    Mybatis-Plus学习笔记:P4-SpringBoot+Mybatis Plus_第3张图片

3.3 @TableId 主键注解

描述:主键注解
Mybatis-Plus学习笔记:P4-SpringBoot+Mybatis Plus_第4张图片

public enum IdType {
    AUTO(0),
    NONE(1),
    INPUT(2), //手动输入
    ID_WORKER(3), 
    UUID(4),
    ID_WORKER_STR(5);
    }

Mybatis-Plus学习笔记:P4-SpringBoot+Mybatis Plus_第5张图片

4.CRUD扩展—更新操作

4.1更新操作-updateById() 参数是一个对象

/**
  * 测试更新
  */
 @Test
 public void testUpdate(){
     User user = new User();
     //通过条件自动拼接动态sql
     user.setId(5L);
     user.setName("小红");
     user.setAge(10);
     user.setEmail("[email protected]");
     int result = userMapper.updateById(user); //自动生成id
     System.out.println(result);//受影响的行数

 }

在这里插入图片描述

4.2更新操作-自动填充

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

阿里巴巴开发手册,所有数据库表

  • gmt_creat
  • gmt_modified
    几乎所有的表都要配置上,而且需要自动化

4.2.1方式1:数据库级别(工作中不允许修改数据库)

  1. 在表中新增字段create_time、update_time
    Mybatis-Plus学习笔记:P4-SpringBoot+Mybatis Plus_第6张图片

  2. 再次测试插入方法,先把实体类同步

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
        //对应数据库的主键(uuid,自增id,雪花算法,redis,zookeeper)
        @TableId(type = IdType.ID_WORKER)  //描述:主键注解
        private Long id;
        private String name;
        private Integer age;
        private String email;
        private Date createTime;
        private Date updateTime;
    
    
    }
    
    

    Mybatis-Plus学习笔记:P4-SpringBoot+Mybatis Plus_第7张图片

4.2.2方式2:代码级别

  1. 删除数据库的默认值,更新操作!
    在这里插入图片描述

  2. 实体类的字段属性上添加注解

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
        //对应数据库的主键(uuid,自增id,雪花算法,redis,zookeeper)
        @TableId(type = IdType.ID_WORKER)  //描述:主键注解
        private Long id;
        private String name;
        private Integer age;
        private String email;
        //字段添加填充内容
        @TableField(fill = FieldFill.INSERT)
        private Date createTime;
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Date updateTime;
    
    
    }
    
  3. 编写处理器处理这个注解即可!

    package com.jq.handler;
    
    import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
    import lombok.extern.slf4j.Slf4j;
    import org.apache.ibatis.reflection.MetaObject;
    import org.springframework.stereotype.Component;
    
    import java.util.Date;
    
    @Slf4j
    @Component  //把自己定义的处理器加入到spring 的ioc容器中
    public class MyMetaObjectHandler implements MetaObjectHandler {
        
        /**
         * 插入时的填充策略
         * @param metaObject
         *  
         *
         */
        @Override
        public void insertFill(MetaObject metaObject) {
            log.info("start insert fill ....");
            /**
             * default MetaObjectHandler
             * setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject)
             */
            this.setFieldValByName("createTime",new Date(),metaObject);
            this.setFieldValByName("updateTime",new Date(),metaObject);
            
        }
        
        /**
         * 
         * @param metaObject
         */
        @Override
        public void updateFill(MetaObject metaObject) {
            log.info("start update fill ....");
            this.setFieldValByName("updateTime",new Date(),metaObject);
        }
    }
    
    
  4. 测试插入,测试更新即可

4.3 @TableField 字段注解(非主键)

描述:字段注解(非主键)

public @interface TableField {
    String value() default "";

    String el() default "";

    boolean exist() default true;

    String condition() default "";

    String update() default "";

    FieldStrategy strategy() default FieldStrategy.DEFAULT;

    FieldFill fill() default FieldFill.DEFAULT;

    boolean select() default true;
}

4.3.1@TableField -参数 FieldFill

public enum FieldFill {
    DEFAULT,
    INSERT,
    UPDATE,
    INSERT_UPDATE;
 }

Mybatis-Plus学习笔记:P4-SpringBoot+Mybatis Plus_第8张图片

3-4 插入操作、更新操作时,乐观锁问题

3-4.1悲观锁

总是认为总是出现问题,无论干什么都会上锁,再去操作

3-4.2乐观锁

总是认为不会出现问题,无论干什么都不去上锁。如果出现问题,再次更新值测试!

3-4.2.1乐观锁实现方式

  • 取出记录时,获取当前 version

  • 更新时,带上这个 version

  • 执行更新时,

    set version = newVersion where version = oldVersion
    
  • 如果 version 不对,就更新失败

3-4.2.2测试乐观锁插件

  1. 增加version字段
    Mybatis-Plus学习笔记:P4-SpringBoot+Mybatis Plus_第9张图片Mybatis-Plus学习笔记:P4-SpringBoot+Mybatis Plus_第10张图片

  2. 实体类添加对应的字段

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
        //对应数据库的主键(uuid,自增id,雪花算法,redis,zookeeper)
        @TableId(type = IdType.ID_WORKER)  //描述:主键注解
        private Long id;
        private String name;
        private Integer age;
        private String email;
        @Version //乐观锁的注解
        private Integer version;
        //字段添加填充内容
        @TableField(fill = FieldFill.INSERT)
        private Date createTime;
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Date updateTime;
    
    
    }
    
  3. 注册组件

    package com.jq.config;
    
    import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    //扫描Mapper文件夹
    @MapperScan("com.jq.mapper")
    @EnableTransactionManagement
    @Configuration //配置类
    public class MybatisPlusConfig {
        /**
         * 旧版
         */
        @Bean
        public OptimisticLockerInterceptor optimisticLockerInterceptor() {
            return new OptimisticLockerInterceptor();
        }
    
        /**
         * 新版
         */
        @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor() {
            MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
            mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
            return mybatisPlusInterceptor;
        }
    
    }
    
    
  4. 测试代码

      /**
         * 测试乐观锁成功
         */
        @Test
        public void testoptimisticLocker(){
            //1.查询用户信息
            User user = userMapper.selectById(1L);
            //2.修改用户信息
            user.setName("张飞");
            user.setEmail("[email protected]");
            //3.执行更新操作
            userMapper.updateById(user);
        }
    

    多线程要加锁

     /**
         * 测试乐观锁失败!多线程下
         */
    
        @Test
        public void testoptimisticLocker2(){
            //线程1
            User user = userMapper.selectById(1L);
            user.setName("张飞");
            user.setEmail("[email protected]");
    
            //模拟另一个线程执行插队操作
            User user2 = userMapper.selectById(1L);
            user2.setName("张飞的大哥");
            user2.setEmail("[email protected]");
            userMapper.updateById(user2);//如果没有乐观锁,就会覆盖插队线程的值
    				//自旋锁多次尝试提交
            //3.执行更新操作
            userMapper.updateById(user);
        }
    

3-4.3 @Version 乐观锁注解

描述:乐观锁注解、标记 @Verison 在字段上

5.CRUD扩展—查询操作

5.1单个查询

/**
 * 测试查询,单个查询
 */
@Test
public void testSelectById(){
    User user = userMapper.selectById(1L);
    System.out.println(user);
}

5.2多个查询

/**
* 测试查询,多单个查询
*/
@Test
public void testSelectById2(){
   List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
   users.forEach(System.out::println);
}

5.3条件查询- map操作

/**
     * 条件查询之一 使用map操作
     */
    @Test
    public void testSelectById3(){
        HashMap<String, Object> map = new HashMap<>();
        //自定义要查询的条件
        map.put("name","张飞");
        List<User> users = userMapper.selectByMap(map);
        users.forEach(System.out::println);

    }

5.4分页查询

  1. 原始的limit进行分页

  2. pageHelper第三方插件

  3. Mybatis Plus 内置了分页插件

    //扫描Mapper文件夹
    @MapperScan("com.jq.mapper")
    @EnableTransactionManagement
    @Configuration //配置类
    public class MybatisPlusConfig {
    
        @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor() {
            MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
            //注册乐观锁插件
            interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
            /**
             * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
             */
            interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
            return interceptor;
        }
    
        @Bean
        public ConfigurationCustomizer configurationCustomizer() {
            return configuration -> configuration.setUseDeprecatedExecutor(false);
        }
    }
    
  4. 测试分页查询

    /**
     * 测试分页查询
     *
     */
    @Test
    public void testPage(){
        /**
         * 参数1:当前页
         * 参数2:页面大小
         */
        Page<User> page = new Page<>(2,3);
        userMapper.selectPage(page,null);
        page.getRecords().forEach(System.out::println);
    }
    

6.CRUD扩展—删除操作

6.1根据id,单个删除,删除记录

/**
 * 测试删除,,单个删除,根据id删除记录
 */
@Test
public void testDeleteById(){
    userMapper.deleteById(1L);
}

6.2根据id,批量删除,删除记录

/**
 * 测试删除,,单个删除,根据id删除记录
 */
@Test
public void testDeleteById2(){
    userMapper.deleteBatchIds(Arrays.asList(1,2,3));
}

6.3根据条件删除 map

/**
* 测试删除 ,通过条件删除,使用map操作
*/
@Test
public void testDeleteById3() {
    HashMap<String, Object> map = new HashMap<>();
    //自定义要查询的条件
    map.put("name", "小红");
    userMapper.deleteByMap(map);

}

6.4逻辑删除

  • 物理删除:从数据库中直接移除
  • 逻辑删除:在数据库中,数据没有被删除,而是通过一个变量来让他失效,deleted=0=>deleted=1
  • 管理员可以查看被删除的记录!防止数据丢失,类似于回收站!

测试逻辑删除

  1. 在数据库表中增加一个字段
    Mybatis-Plus学习笔记:P4-SpringBoot+Mybatis Plus_第11张图片

  2. pojo实体类中添加属性

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
        //对应数据库的主键(uuid,自增id,雪花算法,redis,zookeeper)
        @TableId(type = IdType.ID_WORKER)  //描述:主键注解
        private Long id;
        private String name;
        private Integer age;
        private String email;
        @Version //乐观锁的注解
        private Integer version;
        @TableLogic //逻辑删除
        private Integer deleted;
        //字段添加填充内容
        @TableField(fill = FieldFill.INSERT)
        private Date createTime;
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Date updateTime;
    
    
    }
    
  3. 配置

    # 配置逻辑删除
    # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)flag
    # 逻辑已删除值(默认为 1)
    # 逻辑未删除值(默认为 0)
    mybatis-plus.global-config.db-config.logic-delete-value=1
    mybatis-plus.global-config.db-config.logic-not-delete-value=0
    
  4. 测试一下删除
    走的是更新操作,并不是删除操作
    Mybatis-Plus学习笔记:P4-SpringBoot+Mybatis Plus_第12张图片更新数据库中,deleted的值为1
    Mybatis-Plus学习笔记:P4-SpringBoot+Mybatis Plus_第13张图片再次执行查询操作,会自动带上deleted=0
    在这里插入图片描述

6.5 @TableLogic 逻辑删除

描述:表字段逻辑处理注解(逻辑删除)
Mybatis-Plus学习笔记:P4-SpringBoot+Mybatis Plus_第14张图片

public @interface TableLogic {
    String value() default "";

    String delval() default "";
}

7. 条件构造器

十分重要,我们写一些复杂的的sql就可以使用它来替代!

7.1测试1

isNotNull("name")--->name is not null
ge("age", 12)--->age >= 18
 @Test
 void contextLoads() {
     //查询name不为空的用户,并且邮箱不为空的用户,年龄>=12
     QueryWrapper<User> wrapper = new QueryWrapper<>();
     wrapper.isNotNull("name")  //isNotNull("name")--->name is not null
             .isNotNull("email")  // isNotNull("email")--->name is not null
             .ge("age",12); //ge("age", 12)--->age >= 18
     userMapper.selectList(wrapper).forEach(System.out::println);
 }

7.2测试2:查询一个数据 selectOne()

 @Test
 void test2() {
     //  查询名字 小琳
     QueryWrapper<User> queryWrapper = new QueryWrapper<>();
     queryWrapper.eq("name","小琳");
     User user = userMapper.selectOne(queryWrapper);
     System.out.println(user);
 }

7.3测试3:between

BETWEEN 值1 AND 值2

between("age", 18, 30)--->age between 18 and 30
@Test
void test3() {
    //  查询年龄在 2-22岁之间的用户
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();

    queryWrapper.between("age",2,22); //区间

    Integer count = userMapper.selectCount(queryWrapper); //查询结果数
    System.out.println(count);
}

7.4测试4:模糊查询

NOT LIKE ‘%值%’

notLike("name", "王")--->name not like '%王%'

LIKE ‘%值’

likeLeft("name", "王")--->name like '%王'

LIKE ‘值%’

likeRight("name", "王")--->name like '王%'
    @Test
    void test4() {
        //
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        // 左和右  e%
        queryWrapper.notLike("name","e")
                    .likeRight("email","t");

        List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);
        maps.forEach(System.out::println);
    }

7.5测试5:嵌套查询

inSql("age", "1,2,3,4,5,6")--->age in (1,2,3,4,5,6)
inSql("id", "select id from table where id < 3")--->id in (select id from table where id < 3)
 @Test
 void test5() {
     //
     QueryWrapper<User> queryWrapper = new QueryWrapper<>();
     // 左和右  e%
     queryWrapper.inSql("id","select id from user where id<6");

     List<Object> objects = userMapper.selectObjs(queryWrapper);
     objects.forEach(System.out::println);
 }
SELECT id,name,age,email,version,deleted,create_time,update_time FROM user WHERE deleted=0 AND (id IN (select id from user where id<6))

7.6测试6:排序

ORDER BY 字段, … DESC

orderByDesc("id", "name")--->order by id DESC,name DESC
    @Test
    void test6() {
        //根据id 排序
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.orderByAsc("id");
        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);

    }

9. 代码自动生成器

AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成

  • Entity
  • Mapper
  • Mapper XML
  • Service
  • Controller

等各个模块的代码,极大的提升了开发效率。

9.1配置maven依赖


<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>org.jqgroupId>
    <artifactId>mpgeneratorartifactId>
    <version>1.0-SNAPSHOTversion>

    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.6.3version>
        <relativePath/> 
    parent>
    <properties>
        <java.version>1.8java.version>
    properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starterartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
        
        <dependency>
            <groupId>com.baomidougroupId>
            <artifactId>mybatis-plus-boot-starterartifactId>
            <version>3.5.1version>
        dependency>
        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>
        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <scope>runtimescope>
        dependency>
        
        <dependency>
            <groupId>com.baomidougroupId>
            <artifactId>mybatis-plus-generatorartifactId>
            <version>3.5.1version>
        dependency>

        <dependency>
            <groupId>org.freemarkergroupId>
            <artifactId>freemarkerartifactId>
            <version>2.3.31version>
        dependency>
    dependencies>

project>

9.2官方模板

FastAutoGenerator.create("url", "username", "password")
	.globalConfig(builder -> {
		builder.author("baomidou") // 设置作者
            .enableSwagger() // 开启 swagger 模式
			.fileOverride() // 覆盖已生成文件
			.outputDir("D://"); // 指定输出目录
	})
	.packageConfig(builder -> {
		builder.parent("com.baomidou.mybatisplus.samples.generator") // 设置父包名
			.moduleName("system") // 设置父包模块名
            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://")); // 设置mapperXml生成路径
	})
	.strategyConfig(builder -> {
		builder.addInclude("t_simple") // 设置需要生成的表名
			.addTablePrefix("t_", "c_"); // 设置过滤表前缀
	})
	.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
	.execute();

9.3代码测试

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import sun.font.TrueTypeFont;

import java.util.Collections;

public class FastAutoGeneratorTest {
    public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/rjdb?characterEncoding=utf-8&userSSL=false&serverTimezone=GMT%2B8", "root", "123456")
                //全局配置
                .globalConfig(builder -> {

                    builder.author("jq") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir("F://JavaCode//GeneratorCode/src/main/java"); // 指定输出目录
                })
                //包配置
                .packageConfig(builder -> {

                    builder.parent("com.jq") // 设置父包名
                            .moduleName("mybatisplus") // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "F://JavaCode//GeneratorCode")); // 设置mapperXml生成路径
                })
                //策略配置
                .strategyConfig(builder -> {

                    builder.addInclude("address_book","category") // 设置需要生成的表名
                            .addTablePrefix("t_", "c_"); // 设置过滤表前缀
                    //entity配置
                    //builder.entityBuilder().enableLombok(); //开启 lombok 模型
                    //controller配置
                    builder.controllerBuilder().enableHyphenStyle() // 开启驼峰转连字符
                                                .enableRestStyle();//开启生成@RestController 控制器

                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();
    }
}

你可能感兴趣的:(Mybatis,Plus,spring,boot,java,mybatis,plus)