SpringBoot学习:(三)Mybatis-Plus整合

Mybatis-Plus可通过代码自动生成实体类、Mapper、Service、Controller等
为了快速创建代码,可使用Mybatis-Plus帮我们自动创建

  1. 在POM中添加依赖
 <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.2</version>
        </dependency>
        <!--代码生成-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.2.0</version>
        </dependency>
        <!--代码生成使用的模版引擎-->
        <dependency>
            <groupId>com.ibeetl</groupId>
            <artifactId>beetl</artifactId>
            <version>2.9.3</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>
  1. 创建一个代码生成器的类 创建一个自动生成器

     AutoGenerator autoGenerator = new AutoGenerator();
    
  2. 设置数据库链接配置,可根据数据库中的表来自动生成哪些表对应的类 ,并将配置放进autoGenerator中

    //配置数据库链接
    DataSourceConfig dataSourceConfig= new DataSourceConfig();
    dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/ttt?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true");
    dataSourceConfig.setUsername("root");
    dataSourceConfig.setPassword("root");
    dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
    dataSourceConfig.setTypeConvert(new MySqlTypeConvert(){
        @Override
        public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
            //将数据库中的特殊类型转换成想要的类型
            //将数据库中datetime转换成DATE
            if ( fieldType.toLowerCase().contains("datetime") ) {
                return DbColumnType.DATE;
            }
            return (DbColumnType) super.processTypeConvert(globalConfig, fieldType);
        }
    });
    autoGenerator.setDataSource(dataSourceConfig);
    
  3. 公共配置 :配置项目的路径(用于生成文件时将文件生成的位置) ,设置文件生成是否覆盖,设置文件生成的名字样式等,并将配置放进autoGenerator中

    //公用配置
    GlobalConfig globalConfig= new GlobalConfig();
    globalConfig.setOutputDir(PROJECTPATH + "/src/main/java");
    globalConfig.setAuthor("xxx");
    //日期类型的字段使用哪个类型,默认是 java8的 日期类型,此处改为 java.util.date
    globalConfig.setDateType(DateType.ONLY_DATE);
    //是否覆盖 已存在文件,默认 false 不覆盖
    globalConfig.setFileOverride(true);
    //mapper.xml 是否生成 ResultMap,默认 false 不生成
    globalConfig.setBaseResultMap(true);
    //mapper.xml 是否生成 ColumnList,默认 false 不生成
    globalConfig.setBaseColumnList(true);
    globalConfig.setMapperName("%sMapper");
    globalConfig.setServiceName("%sService");
    globalConfig.setXmlName("%sMapper");
    autoGenerator.setGlobalConfig(globalConfig);
    
  4. 包配置:设置文件生成的具体包 比如实体类生成在基础包(com.test.swagger)下的bean包下,并将配置放进autoGenerator中

      PackageConfig pc = new PackageConfig();
      pc.setParent(PACKAGE);//设置基础包
      // pc.setModuleName("bean"); 子模块包名,最终生成的是类似  com.zhiyi.tiku.entity 这样的 不用写, 默认就是 entity
      pc.setEntity("bean");
      pc.setController("controller");
      pc.setService("service");
      pc.setMapper("mapper");
      autoGenerator.setPackageInfo(pc);
    
  5. 策略配置:设置命名方式,生成字段是否添加注解 ,是否启用 Lombok,并将配置放进autoGenerator中

      StrategyConfig strategy = new StrategyConfig();
       // 此处配置为 下划线转驼峰命名
       strategy.setNaming(NamingStrategy.underline_to_camel);
       //生成的字段 是否添加注解,默认false
       strategy.setEntityTableFieldAnnotationEnable(true);
       //表前缀,配置后 生成的的代码都会把前缀去掉
       strategy.setTablePrefix("t_");
       //是否启用 Lombok
       strategy.setEntityLombokModel(true);
       //是否启用 builder 模式 例:new DevDevice().setDealerId("").setDeviceCode("");
       strategy.setEntityBuilderModel(true);
       autoGenerator.setStrategy(strategy);
    
  6. 模板配置:可设置什么类生成 ,什么类不生成

       TemplateConfig templateConfig = new TemplateConfig();
       //不生成什么就设置为null值
        templateConfig.setController(null);
        templateConfig.setService(null);
        templateConfig.setServiceImpl(null);
        templateConfig.setMapper(null);
        templateConfig.setXml(null);
        autoGenerator.setTemplate(templateConfig);
    
  7. 模板引擎配置:MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎。

      autoGenerator.setTemplateEngine(new BeetlTemplateEngine());
    
  8. 自动生成器执行

      autoGenerator.execute(); 
    

Mybatis-Plus学习路径:https://mp.baomidou.com/guide/

整体代码

package com.test.swagger;

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.BeetlTemplateEngine;

public class CodeGenerator {

    /**
     * 获取项目目录
     */
    private static final String PROJECTPATH = System.getProperty("user.dir");
    /**
     * 项目基础包
     */
    private static final String PACKAGE = "com.test.swagger";

    public static void main(String[] args) {

        //自动生成器
        AutoGenerator autoGenerator = new AutoGenerator();
        //配置数据库链接
        DataSourceConfig dataSourceConfig= new DataSourceConfig();
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/ttt?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("root");
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSourceConfig.setTypeConvert(new MySqlTypeConvert(){
            @Override
            public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
                //将数据库中的特殊类型转换成想要的类型
                //将数据库中datetime转换成DATE
                if ( fieldType.toLowerCase().contains("datetime") ) {
                    return DbColumnType.DATE;
                }
                return (DbColumnType) super.processTypeConvert(globalConfig, fieldType);
            }
        });
        autoGenerator.setDataSource(dataSourceConfig);

        //公用配置
        GlobalConfig globalConfig= new GlobalConfig();
        globalConfig.setOutputDir(PROJECTPATH + "/src/main/java");
        globalConfig.setAuthor("xxx");
        //日期类型的字段使用哪个类型,默认是 java8的 日期类型,此处改为 java.util.date
        globalConfig.setDateType(DateType.ONLY_DATE);
        //是否覆盖 已存在文件,默认 false 不覆盖
        globalConfig.setFileOverride(true);
        //mapper.xml 是否生成 ResultMap,默认 false 不生成
        globalConfig.setBaseResultMap(true);
        //mapper.xml 是否生成 ColumnList,默认 false 不生成
        globalConfig.setBaseColumnList(true);
        globalConfig.setMapperName("%sMapper");
        globalConfig.setServiceName("%sService");
        globalConfig.setXmlName("%sMapper");
        autoGenerator.setGlobalConfig(globalConfig);

        PackageConfig pc = new PackageConfig();
        pc.setParent(PACKAGE);
       // pc.setModuleName("bean"); 子模块包名,最终生成的是类似  com.zhiyi.tiku.entity 这样的 不用写, 默认就是 entity
        pc.setEntity("bean");
        pc.setController("controller");
        pc.setService("service");
        pc.setMapper("mapper");
        autoGenerator.setPackageInfo(pc);

        StrategyConfig strategy = new StrategyConfig();
        // 此处配置为 下划线转驼峰命名
        strategy.setNaming(NamingStrategy.underline_to_camel);
        //生成的字段 是否添加注解,默认false
        strategy.setEntityTableFieldAnnotationEnable(true);
        //表前缀,配置后 生成的的代码都会把前缀去掉
        strategy.setTablePrefix("t_");
        //是否启用 Lombok
        strategy.setEntityLombokModel(true);
        //是否启用 builder 模式 例:new DevDevice().setDealerId("").setDeviceCode("");
        strategy.setEntityBuilderModel(true);
        autoGenerator.setStrategy(strategy);


        TemplateConfig templateConfig = new TemplateConfig();
        //不生成什么就设置为null值
        templateConfig.setController(null);
        templateConfig.setService(null);
        templateConfig.setServiceImpl(null);
        templateConfig.setMapper(null);
        templateConfig.setXml(null);
        autoGenerator.setTemplate(templateConfig);
        //使用beetl模版引擎
        autoGenerator.setTemplateEngine(new BeetlTemplateEngine());
        autoGenerator.execute();

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Spring Boot 是一个快速开发框架,MyBatisMyBatis-Plus 是两个流行的 ORM 框架,Spring BootMyBatis/MyBatis-Plus整合可以帮助我们更快更方便地进行开发。 下面是使用Java Spring Boot整合MyBatis/MyBatis-Plus的步骤: 1. 在 pom.xml 文件中添加 MyBatis/MyBatis-Plus 和 MySQL 驱动的依赖: ```xml <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version> </dependency> ``` 2. 在 application.properties/application.yml 文件中配置数据源和 MyBatis/MyBatis-Plus 的配置信息: ```yaml spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver mybatis.type-aliases-package=com.example.demo.entity mybatis-plus.mapper-locations=classpath:/mapper/*.xml ``` 3. 在 Spring Boot 启动类上添加 `@MapperScan` 注解,指定 MyBatis/MyBatis-Plus 的 Mapper 所在的包: ```java @SpringBootApplication @MapperScan("com.example.demo.mapper") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 4. 创建实体类和 Mapper 接口: ```java public class User { private Long id; private String name; private Integer age; // 省略 getter 和 setter 方法 } @Mapper public interface UserMapper extends BaseMapper<User> { } ``` 5. 创建 Mapper 的 XML 文件(如果使用 MyBatis-Plus 可以省略此步骤): ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.demo.mapper.UserMapper"> <resultMap id="BaseResultMap" type="com.example.demo.entity.User"> <id column="id" property="id" /> <result column="name" property="name" /> <result column="age" property="age" /> </resultMap> <select id="selectById" resultMap="BaseResultMap"> select * from user where id = #{id} </select> </mapper> ``` 6. 在 Service 中使用 Mapper: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public User getUserById(Long id) { return userMapper.selectById(id); } } ``` 这样就完成了 Java Spring Boot 整合 MyBatis/MyBatis-Plus 的基本步骤。需要注意的是,在使用 MyBatis-Plus 的情况下,Mapper 接口无需自己编写 CRUD 操作的方法,直接继承 `BaseMapper` 接口即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值