SpringBoot集成MyBatis Plus入门
标签: SpringBoot集成MyBatis Plus入门 spring boot博客 51CTO博客
2023-07-21 18:24:29 61浏览
SpringBoot集成MyBatis Plus入门,SpringBoot集成MyBatisPlus入门
一、添加依赖
完整的pom文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.13</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>FunlyDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>FunlyDemo</name>
<description>FunlyDemo</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.31</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
二、application.properties文件配置
#mysql
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/funly?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&useSSL=false&rewriteBatchedStatements=true
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
三、启动类上加一个Mapper扫描的注解
package com.example.funlydemo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.funlydemo.mapper")
public class FunlyDemoApplication {
public static void main(String[] args) {
SpringApplication.run(FunlyDemoApplication.class, args);
}
}
这样我们基本实现了Mybatis plus的集成。
四、代码生成实现
1.添加依赖
在前面的基础上添加代码生成器和FreeMarker模板两个依赖。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-core</artifactId>
<version>1.5.8</version>
</dependency>
2.创建测试数据表
我们使用以下建表语句创建student表:
CREATE TABLE student (
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
name VARCHAR ( 50 ) NOT NULL COMMENT '姓名',
email VARCHAR ( 50 ) COMMENT '邮箱',
age INT COMMENT '年龄',
creator VARCHAR ( 50 ) COMMENT '创建人',
modifier VARCHAR ( 50 ) COMMENT '更新人',
create_time datetime COMMENT '创建时间',
update_time VARCHAR ( 50 ) COMMENT '更新时间',
PRIMARY KEY ( id )) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COMMENT '学生消息'
3.封装公共字段
package com.example.funlydemo.bean;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
/**
* @author qx
* @date 2023/07/21
* @desc 公共基类
*/
@Getter
@Setter
public abstract class BaseEntity<T extends Model<T>> extends Model<T> {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@TableField(fill = FieldFill.INSERT)
private String creator;
@TableField(fill = FieldFill.INSERT_UPDATE)
private String modifier;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}
4.自定义代码生成配置
package com.example.funlydemo.config;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
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.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.example.funlydemo.bean.BaseEntity;
import org.springframework.util.StringUtils;
import java.util.*;
/**
* @author qx
* @date 2023/07/21
* @desc 自定义代码生成配置类
*/
public class MysqlGeneratorConfig {
public static final String DATABASE_URL = "jdbc:mysql://127.0.0.1:3306/funly?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&useSSL=false&rewriteBatchedStatements=true";
public static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
public static final String DATABASE_USERNAME = "root";
public static final String DATABASE_PASSWORD = "123456";
public static final String OUT_PUT_PATH = "/src/main/java";
public static final String TEMPLATES_MAPPER_XML_PATH = "/templates/mapper.xml.ftl";
public static final String XML_PATH = "/src/main/resources/mapper/";
public static final String XML_POSTFIX = "Mapper";
public static final String AUTHOR = "qx";
public static final String PARENT_PACKAGE = "com.example.funlydemo";
public static final String[] SUPER_ENTITY_COLUMNS = {"id", "create_time", "update_time", "creator", "modifier"};
/**
* 读取控制台的内容
*
* @param msg 内容
* @return
*/
public static String scanner(String msg) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入" + msg + ":");
if (scanner.hasNext()) {
String ipt = scanner.next();
if (!StringUtils.isEmpty(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("请输入正确的" + msg + "!");
}
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + OUT_PUT_PATH);
gc.setAuthor(AUTHOR);
gc.setOpen(false);
gc.setServiceName("%sService");
gc.setBaseResultMap(true);
gc.setActiveRecord(true);
gc.setBaseColumnList(true);
gc.setSwagger2(true);
gc.setFileOverride(true);
mpg.setGlobalConfig(gc);
//数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl(DATABASE_URL);
dsc.setDriverName(DATABASE_DRIVER);
dsc.setUsername(DATABASE_USERNAME);
dsc.setPassword(DATABASE_PASSWORD);
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName(null);
pc.setParent(PARENT_PACKAGE);
mpg.setPackageInfo(pc);
//自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
Map<String, Object> map = new HashMap<>();
map.put("parent", PARENT_PACKAGE);
setMap(map);
}
};
List<FileOutConfig> focList = new ArrayList<>();
focList.add(new FileOutConfig(TEMPLATES_MAPPER_XML_PATH) {
@Override
public String outputFile(TableInfo tableInfo) {
return projectPath + XML_PATH + tableInfo.getEntityName() + XML_POSTFIX + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
mpg.setTemplate(new TemplateConfig().setXml(null));
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setSuperEntityClass(BaseEntity.class);
strategy.setSuperEntityColumns(SUPER_ENTITY_COLUMNS);
strategy.setEntityLombokModel(true);
strategy.setChainModel(true);
strategy.setInclude(scanner("表名,多个英文逗号分隔").split(","));
strategy.setControllerMappingHyphenStyle(true);
strategy.setRestControllerStyle(true);
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}
mapper.xml.ftl模板文件如下所示:
<?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="${package.Mapper}.${table.mapperName}">
<#if enableCache>
<!-- 开启二级缓存 -->
<cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>
</#if>
<#if baseResultMap>
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="${package.Entity}.${entity}">
<#list table.fields as field>
<#if field.keyFlag><#--生成主键排在第一位-->
<id column="${field.name}" property="${field.propertyName}" />
</#if>
</#list>
<#list table.commonFields as field><#--生成公共字段 -->
<result column="${field.name}" property="${field.propertyName}" />
</#list>
<#list table.fields as field>
<#if !field.keyFlag><#--生成普通字段 -->
<result column="${field.name}" property="${field.propertyName}" />
</#if>
</#list>
</resultMap>
</#if>
<#if baseColumnList>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
<#list table.commonFields as field>
${field.columnName},
</#list>
${table.fieldNames}
</sql>
</#if>
</mapper>
运行这个类,并在控制台上执行
控制台返回:
15:49:15.483 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator - ==========================准备生成文件...==========================
15:49:16.050 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 创建目录: [E:\project\FunlyDemo/src/main/java\com\example\funlydemo\entity]
15:49:16.051 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 创建目录: [E:\project\FunlyDemo/src/main/java\com\example\funlydemo\mapper]
15:49:16.052 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 创建目录: [E:\project\FunlyDemo/src/main/java\com\example\funlydemo\service\impl]
15:49:16.156 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/mapper.xml.ftl; 文件:E:\project\FunlyDemo/src/main/resources/mapper/StudentMapper.xml
15:49:16.297 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/entity.java.ftl; 文件:E:\project\FunlyDemo/src/main/java\com\example\funlydemo\entity\Student.java
15:49:16.301 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/mapper.java.ftl; 文件:E:\project\FunlyDemo/src/main/java\com\example\funlydemo\mapper\StudentMapper.java
15:49:16.304 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/service.java.ftl; 文件:E:\project\FunlyDemo/src/main/java\com\example\funlydemo\service\StudentService.java
15:49:16.514 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/serviceImpl.java.ftl; 文件:E:\project\FunlyDemo/src/main/java\com\example\funlydemo\service\impl\StudentServiceImpl.java
15:49:16.518 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/controller.java.ftl; 文件:E:\project\FunlyDemo/src/main/java\com\example\funlydemo\controller\StudentController.java
15:49:16.518 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator - ==========================文件生成完成!!!==========================
我们查看当前的项目结构,发现自动生成了我们需要的控制层、服务层和持久化层的代码。
五、分页配置
Mybatis Plus可以通过增加分页插件的功能来实现分页功能。
package com.example.funlydemo.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author qx
* @date 2023/07/21
* @desc MyBatis Plus分页配置
*/
@Configuration
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
六、创建一个控制层测试
package com.example.funlydemo.controller;
import com.example.funlydemo.entity.Student;
import com.example.funlydemo.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* <p>
* 学生消息 前端控制器
* </p>
*
* @author qx
* @since 2023-07-21
*/
@RestController
@RequestMapping("/student")
public class StudentController {
@Autowired
private StudentService studentService;
@GetMapping("/list")
public List<Student> getStudentList() {
return studentService.list(null);
}
}
启动项目,在浏览器访问http://localhost:8080/student/list进行测试。
到这里我们基本上实现了SpringBoot集成Mybatis Plus。
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
暂无评论,快来写一下吧
展开评论