Druid:是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况
MariaDB:是最流行的开源关系型数据库之一。它由 MySQL 的原始开发者制作,并保证保持开源。它是大多数云产品的一部分,也是大多数Linux发行版的默认配置。MariaDB 被设计为 MySQL 的直接替代产品,具有更多功能,新的存储引擎,更少的错误和更好的性能。它建立在性能、稳定性和开放性的价值之上,MariaDB 基金会确保将根据技术优点接受贡献。最近的新功能包括与Galera Cluster 4的高级集群,与Oracle数据库和Temporal Data Tables的兼容功能,允许人们查询过去任何时候的数据
Lombok:是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 Java 代码的工具,简单来说,比如我们新建了一个类,然后在其中写了几个属性,然后通常情况下我们需要手动去建立getter和setter方法啊,构造函数啊之类的,lombok的作用就是为了省去我们手动创建这些代码的麻烦,它能够在我们编译源码的时候自动帮我们生成这些方法
Mybatis-Plus:(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生
com.alibaba
druid-spring-boot-starter
1.2.8
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource #引入自定义的Druid数据源
druid:
#初始化时建立物理连接的个数
initial-size: 5
#最小连接池数量
min-idle: 5
#最大连接池数量 maxIdle已经不再使用
max-active: 20
#获取连接时最大等待时间,单位毫秒
max-wait: 60000
#申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
test-while-idle: true
#既作为检测的间隔时间又作为testWhileIdel执行的依据
time-between-eviction-runs-millis: 60000
#销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接
min-evictable-idle-time-millis: 30000
#用来检测连接是否有效的sql 必须是一个查询语句
#mysql中为 select 'x'
#oracle中为 select 1 from dual
validation-query: select 'x'
#申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
test-on-borrow: false
#归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
test-on-return: false
#是否缓存preparedStatement,mysql5.5+建议开启
pool-prepared-statements: true
#当值大于0时poolPreparedStatements会自动修改为true
max-pool-prepared-statement-per-connection-size: 20
org.mariadb.jdbc
mariadb-java-client
runtime
spring:
datasource:
driver-class-name: org.mariadb.jdbc.Driver
url: jdbc:mariadb://localhost:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=GMT%2B8
username: root
password: root
org.projectlombok
lombok
true
com.baomidou
mybatis-plus-boot-starter
3.5.1
com.baomidou
mybatis-plus-generator
3.5.2
org.freemarker
freemarker
2.3.31
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.6.6
com.example
springbootmybatisplus
0.0.1-SNAPSHOT
war
springbootmybatisplus
springbootmybatisplus
1.8
1.2.8
3.5.1
3.5.2
2.3.31
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-jdbc
org.mariadb.jdbc
mariadb-java-client
runtime
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-tomcat
provided
org.springframework.boot
spring-boot-starter-test
test
com.alibaba
druid-spring-boot-starter
${druid.version}
com.baomidou
mybatis-plus-boot-starter
${mybatis.plus.version}
com.baomidou
mybatis-plus-generator
${generator.version}
org.freemarker
freemarker
${freemarker.version}
snapshots
https://oss.sonatype.org/content/repositories/snapshots/
org.springframework.boot
spring-boot-maven-plugin
org.projectlombok
lombok
server:
servlet:
context-path: '/springbootmybatisplus'
port: 8082
spring:
datasource:
driver-class-name: org.mariadb.jdbc.Driver
url: jdbc:mariadb://localhost:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=GMT%2B8
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource #引入自定义的Druid数据源
druid:
#初始化时建立物理连接的个数
initial-size: 5
#最小连接池数量
min-idle: 5
#最大连接池数量 maxIdle已经不再使用
max-active: 20
#获取连接时最大等待时间,单位毫秒
max-wait: 60000
#申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
test-while-idle: true
#既作为检测的间隔时间又作为testWhileIdel执行的依据
time-between-eviction-runs-millis: 60000
#销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接
min-evictable-idle-time-millis: 30000
#用来检测连接是否有效的sql 必须是一个查询语句
#mysql中为 select 'x'
#oracle中为 select 1 from dual
validation-query: select 'x'
#申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
test-on-borrow: false
#归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
test-on-return: false
#是否缓存preparedStatement,mysql5.5+建议开启
pool-prepared-statements: true
#当值大于0时poolPreparedStatements会自动修改为true
max-pool-prepared-statement-per-connection-size: 20
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
package com.example.springbootmybatisplus.test;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.Collections;
/**
* 快速生成
*/
public class FastAutoGeneratorTest {
/**
* 数据源配置
*/
private static final String URL = "jdbc:mariadb://localhost:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=GMT%2B8";
private static final String USER_NAME = "root";
private static final String PASSWORD = "root";
private static final DataSourceConfig.Builder DATA_SOURCE_CONFIG =
new DataSourceConfig
.Builder(URL, USER_NAME, PASSWORD);
private static final String JAVA_PAHT = System.getProperty("user.dir") + "/src/main/java";
private static final String XML_PAHT = System.getProperty("user.dir") + "/src/main/resources/dao";
/**
* 执行run
*
* @param args
*/
public static void main(String[] args) {
FastAutoGenerator.create(DATA_SOURCE_CONFIG)
/*全局配置(GlobalConfig)
fileOverride 覆盖已生成文件 默认值:false
disableOpenDir 禁止打开输出目录 默认值:true
outputDir(String) 指定输出目录 /opt/baomidou/ 默认值: windows:D:// linux or mac : /tmp
author(String) 作者名 baomidou 默认值:作者
enableKotlin 开启 kotlin 模式 默认值:false
enableSwagger 开启 swagger 模式 默认值:false
dateType(DateType) 时间策略 DateType.ONLY_DATE 默认值: DateType.TIME_PACK
commentDate(String) 注释日期 默认值: yyyy-MM-dd*/
.globalConfig(builder -> {
builder.author("6464")
.outputDir(JAVA_PAHT)
.disableOpenDir();
})
/*包配置(PackageConfig)
方法 说明 示例
parent(String) 父包名 默认值:com.baomidou
moduleName(String) 父包模块名 默认值:无
entity(String) Entity 包名 默认值:entity
service(String) Service 包名 默认值:service
serviceImpl(String) Service Impl 包名 默认值:service.impl
mapper(String) Mapper 包名 默认值:mapper
xml(String) Mapper XML 包名 默认值:mapper.xml
controller(String) Controller 包名 默认值:controller
other(String) 自定义文件包名 输出自定义文件时所用到的包名
pathInfo(Map) 路径配置信息 Collections.singletonMap(OutputFile.mapperXml, "D://")*/
.packageConfig(builder -> {
builder.parent("com.example.springbootmybatisplus")
.moduleName("user")
.entity("vo")
.mapper("dao")
.xml("dao.xml")
.pathInfo(Collections.singletonMap(OutputFile.xml, XML_PAHT));
})
/*策略配置(StrategyConfig)
方法 说明 示例
enableCapitalMode 开启大写命名 默认值:false
enableSkipView 开启跳过视图 默认值:false
disableSqlFilter 禁用 sql 过滤 默认值:true,语法不能支持使用 sql 过滤表的话,可以考虑关闭此开关
enableSchema 启用 schema 默认值:false,多 schema 场景的时候打开
likeTable(LikeTable) 模糊表匹配(sql 过滤) likeTable 与 notLikeTable 只能配置一项
notLikeTable(LikeTable) 模糊表排除(sql 过滤) likeTable 与 notLikeTable 只能配置一项
addInclude(String...) 增加表匹配(内存过滤) include 与 exclude 只能配置一项
addExclude(String...) 增加表排除匹配(内存过滤) include 与 exclude 只能配置一项
addTablePrefix(String...) 增加过滤表前缀
addTableSuffix(String...) 增加过滤表后缀
addFieldPrefix(String...) 增加过滤字段前缀
addFieldSuffix(String...) 增加过滤字段后缀
entityBuilder 实体策略配置
controllerBuilder controller 策略配置
mapperBuilder mapper 策略配置
serviceBuilder service 策略配置*/
.strategyConfig(builder -> {
builder.addInclude("user_t") // 设置需要生成的表名
.addTableSuffix("_t");
})
/*模板配置(TemplateConfig)
方法 说明 示例
disable 禁用所有模板
disable(TemplateType...) 禁用模板 TemplateType.ENTITY
entity(String) 设置实体模板路径(JAVA) /templates/entity.java
entityKt(String) 设置实体模板路径(kotlin) /templates/entity.java
service(String) 设置 service 模板路径 /templates/service.java
serviceImpl(String) 设置 serviceImpl 模板路径 /templates/serviceImpl.java
mapper(String) 设置 mapper 模板路径 /templates/mapper.java
mapperXml(String) 设置 mapperXml 模板路径 /templates/mapper.xml
controller(String) 设置 controller 模板路径 /templates/controller.java*/
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.strategyConfig(builder -> {
builder.entityBuilder()
.enableLombok()
.idType(IdType.ASSIGN_ID)
.formatFileName("%sVO")
.controllerBuilder()
.enableRestStyle()
.enableHyphenStyle()
.mapperBuilder()
.formatMapperFileName("%sDao")
.formatXmlFileName("%sDao")
.build();
})
.execute();
}
}
package com.example.springbootmybatisplus.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 64641
*
* 分页插件配置
*/
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor getMybatisPlusInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MARIADB));
return mybatisPlusInterceptor;
}
}
package com.example.springbootmybatisplus.user.controller;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.springbootmybatisplus.user.service.IUserService;
import com.example.springbootmybatisplus.user.vo.UserVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.websocket.server.PathParam;
import java.util.List;
/**
*
* 前端控制器
*
*
* @author 6464
* @since 2022-04-18
*/
@RestController
@Slf4j
@RequestMapping("/user")
public class UserController {
private final IUserService userService;
public UserController(IUserService userService) {
this.userService = userService;
}
@GetMapping("/getUser")
public UserVO getUser() {
UserVO userVO = userService.getById(1);
log.info("----getUser----: {}", userVO.toString());
return userVO;
}
@GetMapping("/getAllUser")
public List getAllUser() {
List list = userService.list();
for (UserVO userVO : list) {
log.info("---getAllUser----: {}", userVO.toString());
}
return list;
}
@GetMapping("/getUserByParam")
public List getUserByParam(@RequestParam("age") String age, @RequestParam("name") String name) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.ge("age", age);
queryWrapper.eq("name", name);
List list = userService.list(queryWrapper);
for (UserVO userVO : list) {
log.info("---getUserByParam----: {}", userVO.toString());
}
return list;
}
@GetMapping("/getPageUser/{size}/{current}")
public Page getPageUser(@PathVariable("current") Integer current, @PathVariable("size") Integer size) {
Page page = new Page<>(current, size);
Page userVOPage = userService.page(page);
return userVOPage;
}
}
package com.example.springbootmybatisplus;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
* @author 64641
*/
@SpringBootApplication
@MapperScan("com.example.springbootmybatisplus./*.**.dao")
public class SpringbootmybatisplusApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SpringbootmybatisplusApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringbootmybatisplusApplication.class);
}
}