SpringBoot整合Druid、Mybatis、MybatisPlus以及MybatisPlus代码生成器

1.SpringBoot整合Druid

1)引入jar包

   
       com.alibaba
       druid-spring-boot-starter
       1.2.3
   

2)在application.yml中

# 数据源
spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/springboot_mybatis?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

    #   数据源其他配置
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: stat,wall
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
    #初始化时运行sql脚本
    schema: classpath:sql/schema.sql
    initialization-mode: always

    druid:
      #开启druid 监控台servlet
      stat-view-servlet:
        enabled: true
        login-username: admin
        loginPassword: 123456
      #开启druid 监控filter
      web-stat-filter:
        enabled: true

注意: initialization-mode: always 第一次用过之后注释掉,或者将其改成never

3).启动项目,访问:http://127.0.0.1:8080/druid/    

     用户名:admin/密码:123456(在配置文件中有)

2.SpringBoot整合Mybatis

ps:还记得mybatis中的sqlSessionFactory要传入一个dataSource吗?所以我们先学习了druid。

1)关于逆向工程:我们更多的使用插件plugin的方式

(注意:mybatis的逆向工程生成的是mapper接口和mapper.xml文件

AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。)

Mybatis逆向工程_飞鸟的心情的博客-CSDN博客

2)集成mybatis

   第一步:jar包引入:  

   
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.1.4
        

   第二步:

   在application.yml中:

#设置mybatis
mybatis:
  mapper-locations: classpath:com/tulingxueyuan/mapper/*Mapper.xml
  typeAliasesPackage: com.tulingxueyuan.pojo
  configuration:
    mapUnderscoreToCamelCase: true
  • typeAliasesPackage 的作用就是指定一个包名,在该包中的所有类都会被自动注册为 MyBatis 的别名,无需显式在 XML 配置文件中指定别名。这可以减少在 XML 配置文件中的重复工作,同时使得配置更加简洁。
  • mapUnderscoreToCamelCase: true的作用是:(参考如下代码)其中的查询结果就算没有resultMap映射,那么也可以将dept_name字段映射成deptName

  第三步:

在启动类中加入:@MapperScan("com.tulingxueyuan.mapper")或者在mapper接口上加上@Mapper注解

@SpringBootApplication
@MapperScan("com.tulingxueyuan.mapper")
public class Application {

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

}

  ok,集成好了。

3.SpringBoot整合MybatisPlus

Idea先安装插件MybatisX

官网:MyBatis-Plus

1.引入jar包:

这里使用的是3.4.2的版本,还有其他版本在mvn repository中查找

  
        
            com.baomidou
            mybatis-plus-boot-starter
            ${mybatisplus.version}
        

2.集成配置:

application.yml中:

# 数据源
spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/mybatisplus?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    #初始化时运行sql脚本
    schema: classpath:sql/schema.sql
    initialization-mode : never
logging:
  level:
    root: info
    com.tulingxueyuan: debug  #设置日志级别 mp的mapper日志级别
mybatis-plus:
  configuration:
    map-underscore-to-camel-case: false  #下划线命名转化为驼峰命名

sql文件的内容:

-- 创建表
CREATE TABLE tbl_employee(
   id INT(11) PRIMARY KEY AUTO_INCREMENT,
   last_name VARCHAR(50),
   email VARCHAR(50),
   gender CHAR(1),
   age INT
);
INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Tom','[email protected]',1,22);
INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Jerry','[email protected]',0,25);
INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Black','[email protected]',1,30);
INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('White','[email protected]',0,35);

启动类中:

@SpringBootApplication
@MapperScan("com.tulingxueyuan.mbp.mapper")
public class QuickStartApplication {

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

}

3.编写mapper接口和servcie接口

   看下图的重点:编写的接口都要继承通用的Mapper和Servcie接口:BaseMapper和IService

SpringBoot整合Druid、Mybatis、MybatisPlus以及MybatisPlus代码生成器_第1张图片

mapper中:

package com.tulingxueyuan.mbp.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tulingxueyuan.mbp.pojo.Employee;

public interface EmployeeMapper extends BaseMapper {
}

service中:

package com.tulingxueyuan.mbp.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.tulingxueyuan.mbp.pojo.Employee;

public interface EmployeeService extends IService {
}

   serviceImpl中:

package com.tulingxueyuan.mbp.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.tulingxueyuan.mbp.mapper.EmployeeMapper;
import com.tulingxueyuan.mbp.pojo.Employee;
import com.tulingxueyuan.mbp.service.EmployeeService;
import org.springframework.stereotype.Service;

/***
 *
 *  service实现类   继承mp提供通用的service基类
 *  ServiceImpl
 *      2个泛型 1.EmployeeMapper  Mapper接口
 *              2.Employee  对应Pojo
 */
@Service
public class EmployeeImplService extends 
ServiceImpl implements EmployeeService {


}

  4.创建实体类pojo

package com.tulingxueyuan.mbp.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;


//  mp 会默认将pojo类名当表名,如果类名和表名不一致可以使用注解
@TableName("tbl_employee")
public class Employee {
    // mp 会自动识别pojo类中名为id的属性,如果名字叫id就会当做是主键
    // 如果你的注解没有赋值那它会帮你使用ID_WORKER的生成策略, 主要是为了防止你忘记给主键赋值
    // 如果字段是自动增长需要手动改一下生成策略
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @TableField("last_name")
    private String lastName;
    private String email;
    private Integer gender;
    private Integer age;
    @TableField(exist = false)
    private String genderName; // 这个字段在表中是没有的

    public String getGenderName() {
         if(gender==0){
             return "女";
         }
         else
         {
             return "男";
         }
    }


    public Employee() {
        super();
        // TODO Auto-generated constructor stub
    }
    public Employee(Integer id, String lastName, String email, Integer gender, Integer age) {
        super();
        this.id = id;
        this.lastName = lastName;
        this.email = email;
        this.gender = gender;
        this.age = age;
    }
 
    //getter和setter省略...    

    @Override
    public String toString() {
        return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + getGenderName()+", age="
                + age + "]";
    }


}

ok,以上就是springboot集成MybatisPlus的过程。

ps:有没有发现MP当中,不用像mybatis那样指定mapper-locations了(在mybatis中mapper-locations: classpath:com/tulingxueyuan/mapper/*Mapper.xml),那是因为在mybatisPlus自动配置类中:已经指定了

SpringBoot整合Druid、Mybatis、MybatisPlus以及MybatisPlus代码生成器_第2张图片

4.MybatisPlus代码生成器(旧版)

官方文档:

代码生成器(新) | MyBatis-Plus

1.jar包引入

默认使用的是velocity模板

 
        
            com.baomidou
            mybatis-plus-generator
            3.4.1
        

        
        
            org.apache.velocity
            velocity-engine-core
            2.2
        

2.代码:

package com.tulingxueyuan;

import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.LikeTable;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/***
 * @Author 徐庶   QQ:1092002729
 * @Slogan 致敬大师,致敬未来的你
 *
 * pms_product
 */
public class GeneratorApp {

    /**
     * 

* 读取控制台内容 *

*/ public static String scanner(String tip) { Scanner scanner = new Scanner(System.in); StringBuilder help = new StringBuilder(); help.append("请输入" + tip + ":"); System.out.println(help.toString()); // 判断用户是否输入 if (scanner.hasNext()) { // 拿到输入内容 String ipt = scanner.next(); if (StringUtils.isNotBlank(ipt)) { return ipt; } } throw new MybatisPlusException("请输入正确的" + tip + "!"); } public static void main(String[] args) { String moduleName = scanner("模块名"); String tableName = scanner("表名(多个用,号分隔,或者按前缀(pms*))"); String prefixName = scanner("需要替换的表前缀"); // 代码生成器 AutoGenerator mpg = new AutoGenerator(); // 全局配置 GlobalConfig gc = new GlobalConfig(); // 获得当前项目的路径 String projectPath = System.getProperty("user.dir")+"/05_generator"; // 设置生成路径 gc.setOutputDir(projectPath + "/src/main/java"); // 作者 gc.setAuthor("xushu"); // 代码生成是不是要打开所在文件夹 gc.setOpen(false); // 生成Swagger2注解 gc.setSwagger2(true); // 会在mapper.xml 生成一个基础的 映射所有的字段 gc.setBaseResultMap(true); // 同文件生成覆盖 gc.setFileOverride(true); //gc.setDateType(DateType.ONLY_DATE) // 实体名:直接用表名 %s=表名 gc.setEntityName("%s"); // mapper接口名 gc.setMapperName("%sMapper"); // mapper.xml 文件名 gc.setXmlName("%sMapper"); // 业务逻辑类接口名 gc.setServiceName("%sService"); // 业务逻辑类实现类名 gc.setServiceName("%sImplService"); // 将全局配置设置到AutoGenerator mpg.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:mysql://localhost:3306/tuling_mall?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&"); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("123456"); mpg.setDataSource(dsc); // 包配置 PackageConfig pc = new PackageConfig(); // 模块名 pc.setModuleName(moduleName); // 包名 pc.setParent("com.tulingxueyuan"); // 完整的报名: com.tulingxueyuan.pms mpg.setPackageInfo(pc); // 自定义配置 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { // to do nothing } }; // 如果模板引擎是 velocity String templatePath = "/templates/mapper.xml.vm"; // 自定义输出配置 List focList = new ArrayList<>(); // 自定义配置会被优先输出 focList.add(new FileOutConfig(templatePath) { @Override public String outputFile(TableInfo tableInfo) { // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!! return projectPath + "/src/main/resources/mapper/" + pc.getModuleName() + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; } }); cfg.setFileOutConfigList(focList); mpg.setCfg(cfg); // 配置模板 TemplateConfig templateConfig = new TemplateConfig(); // 把已有的xml生成置空 templateConfig.setXml(null); mpg.setTemplate(templateConfig); // 策略配置 StrategyConfig strategy = new StrategyConfig(); // 表名的生成策略:下划线转驼峰 pms_product -- PmsProduct strategy.setNaming(NamingStrategy.underline_to_camel); // 列名的生成策略:下划线转驼峰 last_name -- lastName strategy.setColumnNaming(NamingStrategy.underline_to_camel); //strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!"); strategy.setEntityLombokModel(true); // 在controller类上是否生成@RestController strategy.setRestControllerStyle(true); // 公共父类 //strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!"); if(tableName.indexOf('*')>0){ // 按前缀生成表 strategy.setLikeTable(new LikeTable(tableName.replace('*','_'))); } else{ // 要生成的表名 多个用逗号分隔 strategy.setInclude(tableName); } // 设置表替换前缀 // 很重要的一个配置 比如:表名是pms_product 那么设置了strategy.setTablePrefix("pms_"); // 之后实体类名及mapper和service就都不带pms_了,就是Product及ProductMapper等等类似的命名了 strategy.setTablePrefix(prefixName); // 驼峰转连字符 比如 pms_product --> controller @RequestMapping("/pms/pmsProduct") //strategy.setControllerMappingHyphenStyle(true); mpg.setStrategy(strategy); // 进行生成 mpg.execute(); } }

ps:相应的swagger依赖:

 
        
            io.springfox
            springfox-swagger2
            ${swagger2.version}
        
        
            io.springfox
            springfox-swagger-ui
            ${swagger2.version}
        
        
        
            io.swagger
            swagger-models
            ${swagger-models.version}
        
        
            io.swagger
            swagger-annotations
            ${swagger-annotations.version}
        

        
            org.projectlombok
            lombok
            1.18.18
        


 
        1.8
        2.9.2
        1.6.0
        1.6.0
    

ps:在 Lombok 中,@Data 注解是一个组合注解,它包含了一系列其他的注解,用于自动生成 Java 类的常用方法,如 getter、setter、toString、equals 和 hashCode 等。使用 @Data 注解可以减少编写重复的代码,让类的定义更加简洁。

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