SpringBoot整合mybatisplus和druid的示例詳解
版本介紹
jdk 17
SpringBoot 3.1.0
druid-spring-boot-starter 1.2.4
mysql-connector 8.0.33
mybatis-plus 3.5.3.1
環(huán)境準(zhǔn)備
導(dǎo)入依賴(lài)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.0</version>
</parent>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<druid.version>1.2.4</druid.version>
<mysql.version>8.0.33</mysql.version>
<lombok.version>1.18.26</lombok.version>
<swagger.version>1.5.22</swagger.version>
<mybatis-plus.version>3.5.3.1</mybatis-plus.version>
</properties>
<!-- Web 相關(guān) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>compile</scope>
</dependency>
<!-- swagger -->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>${swagger.version}</version>
<scope>compile</scope>
</dependency>application.yml配置
server:
port: 8080
spring:
datasource:
# 使用druid數(shù)據(jù)源
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/springboot-exp?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&AllowPublicKeyRetrieval=True
username: root
password: 123456
# 數(shù)據(jù)源連接池配置
druid:
# 數(shù)據(jù)源其他配置
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
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.logSlowSql=true;druid.stat.slowSqlMillis=1000;
# 配置監(jiān)控統(tǒng)計(jì)攔截的filters,去掉后監(jiān)控界面sql無(wú)法統(tǒng)計(jì),'wall'用于防火墻
filters: stat,wall,slf4j
mybatis-plus:
mapper-locations: classpath*:/mapper/**/*.xml # xml路徑
global-config:
db-config:
id-type: ASSIGN_ID # 全局默認(rèn)主鍵策略,默認(rèn)為雪花ID,若表中設(shè)置了自增,則生成的實(shí)體自動(dòng)添加自增ID屬性,參考 TestDelete
logic-delete-field: deleted # 全局邏輯刪除的實(shí)體字段名,若不配置,則不啟用
logic-delete-value: 1 # 邏輯已刪除值(默認(rèn)為 1)
logic-not-delete-value: 0 # 邏輯未刪除值(默認(rèn)為 0)
configuration:
map-underscore-to-camel-case: true # 駝峰轉(zhuǎn)下劃線(默認(rèn))
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 日志輸出
type-aliases-package: com.example.domain.entity數(shù)據(jù)庫(kù)表
-- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `user_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用戶(hù)名字', `password` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用戶(hù)密碼', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
使用
MybatisPlusConfig
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor paginationInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 添加分頁(yè)插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
// 添加 攻擊 SQL 阻斷解析器,防止全表更新與刪除
interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
// 添加 樂(lè)觀鎖 插件
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
}User
@TableName(value = "user", autoResultMap = true)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {
private static final long serialVersionUID = -4328989516223829865L;
/**
* 用戶(hù)ID
*/
@TableId
private String id;
/**
* 用戶(hù)賬號(hào)
*/
private String userName;
/**
* 密碼
*/
private String password;
}UserMapper
@Mapper
public interface UserMapper extends BaseMapper<User> {}UserService
public interface UserService {
void save(User user);
User getById(String id);
void removeById(String id);
void update(UserUpdateReqVO reqVO);
}UserBaseVO
@ApiModel("Request VO")
@Data
@ToString(callSuper = true)
public class UserBaseVO {
@ApiModelProperty(value = "用戶(hù)名字", required = true)
@NotNull(message = "用戶(hù)名字不能為空")
private String username;
@ApiModelProperty(value = "用戶(hù)密碼", required = true)
@NotNull(message = "用戶(hù)密碼不能為空")
private String password;
}UserUpdateReqVO
@ApiModel("用戶(hù)更新 Request VO")
@Data
@ToString(callSuper = true)
public class UserUpdateReqVO extends UserBaseVO {
@ApiModelProperty(value = "", required = true)
@NotNull(message = "id不能為空")
private String id;
}UserCreateReqVO
@ApiModel("用戶(hù)更新 Request VO")
@Data
@ToString(callSuper = true)
public class UserCreateReqVO extends UserBaseVO {
}MyBatisDemoController
@RestController
@RequestMapping("/user")
@Slf4j
public class MyBatisDemoController {
@Autowired
private UserService userService;
/**
* 添加一個(gè)新用戶(hù)
*
* @return java.lang.Object
*/
@GetMapping("/add")
public Object add(UserCreateReqVO reqVO) {
User user = User.builder().id(UUID.randomUUID().toString()).password(reqVO.getPassword()).userName(reqVO.getUsername()).build();
userService.save(user);
return "add";
}
/**
* 更新用戶(hù)
*
* @return java.lang.Object
*/
@GetMapping("/update")
public Object update(@RequestBody UserUpdateReqVO reqVO) {
User user = userService.getById(reqVO.getId());
if(null != user){
userService.update(reqVO);
return "update success";
}
return "update error";
}
/**
* 通過(guò)id獲取用戶(hù)
*
* @param id
* @return java.lang.Object
*/
@GetMapping("/{id}")
public Object get(@PathVariable String id) {
return userService.getById(id);
}
/**
* 通過(guò)id刪除用戶(hù)
*
* @param id
* @return java.lang.Object
*/
@GetMapping("/del/{id}")
public Object del(@PathVariable String id) {
userService.removeById(id);
return "del";
}
}代碼生成工具
導(dǎo)入依賴(lài)
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.0</version>
</dependency>GeneratorUtils
public class GeneratorUtils {
public static void main(String[] args) {
autoGenerator();
}
public static void autoGenerator() {
AutoGenerator autoGenerator = new AutoGenerator();
autoGenerator.setDataSource(getDataSourceConfig());
autoGenerator.setGlobalConfig(getGlobalConfig());
autoGenerator.setPackageInfo(getPackageInfo());
autoGenerator.setStrategy(getStrategyConfig());
autoGenerator.execute();
}
/**
* 設(shè)置數(shù)據(jù)源
* @return
*/
public static DataSourceConfig getDataSourceConfig(){
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://47.98.123.147:3306/springboot-exp?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&AllowPublicKeyRetrieval=True");
dsc.setSchemaName("public");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("springboot-exp");
dsc.setPassword("HJRNEhKPS8MPapB8");
dsc.setDbType(DbType.MYSQL);
return dsc;
}
/**
* 設(shè)置全局配置
* @return
*/
public static GlobalConfig getGlobalConfig(){
GlobalConfig gc = new GlobalConfig();
String path = System.getProperty("user.dir");
gc.setOutputDir(path+"/springboot-mybatisplus-druid/src/main/java");//參數(shù)是一個(gè)目錄,所以需要獲取當(dāng)前系統(tǒng)目錄
gc.setAuthor("coderjim");
gc.setOpen(true);//是否打開(kāi)資源管理器
gc.setFileOverride(true);//是否覆蓋已經(jīng)生成的
gc.setServiceName("%sService");//去service的I前綴
gc.setIdType(IdType.INPUT);// id生成策略
gc.setDateType(DateType.ONLY_DATE);
return gc;
}
/**
*包配置
* @return
*/
public static PackageConfig getPackageInfo(){
PackageConfig pc = new PackageConfig();
pc.setModuleName("common");
pc.setParent("com.example");
pc.setEntity("entity");
pc.setMapper("mapper");
pc.setService("service");
pc.setController("controller");
return pc;
}
/**
* 策略配置
* @return
*/
public static StrategyConfig getStrategyConfig(){
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);// 下劃線轉(zhuǎn)駝峰命名
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
// 設(shè)置映射的表名,多張表
strategy.setInclude("user");
strategy.setEntityLombokModel(true);// 是否啟用lombok開(kāi)啟注解
strategy.setLogicDeleteFieldName("isAction");//設(shè)置邏輯刪除字段
// 時(shí)間自動(dòng)填充配置
TableFill startDate = new TableFill("startDate", FieldFill.INSERT);
TableFill updateDate = new TableFill("updateDate", FieldFill.UPDATE);
ArrayList<TableFill> list = new ArrayList<>();
list.add(startDate);
list.add(updateDate);
strategy.setTableFillList(list);
// 樂(lè)觀鎖配置
strategy.setVersionFieldName("version");
// rustful 格式
strategy.setRestControllerStyle(true);
return strategy;
}
}以上就是SpringBoot整合mybatisplus和druid的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot整合mybatisplus和druid的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java中執(zhí)行docker命令的實(shí)現(xiàn)示例
本文主要介紹了Java中執(zhí)行docker命令的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
SimpleDateFormat線程安全問(wèn)題排查詳解
這篇文章主要為大家介紹了SimpleDateFormat線程安全問(wèn)題排查詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
SpringBoot與SpringMVC中參數(shù)傳遞的原理解析
這篇文章主要介紹了SpringBoot與SpringMVC中參數(shù)傳遞的原理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07
使用 Spring Boot 實(shí)現(xiàn)分頁(yè)和排序功能(配置與實(shí)踐指南)
使用 Spring Boot 實(shí)現(xiàn)分頁(yè)和排序依賴(lài) Spring Data JPA 的 Pageable 和 Sort,支持基本分頁(yè)、動(dòng)態(tài)排序和高級(jí)查詢(xún),代碼示例展示了從簡(jiǎn)單分頁(yè)到 REST API 集成的完整流程,性能測(cè)試表明小數(shù)據(jù)集查詢(xún)高效(5ms),大數(shù)據(jù)量需索引優(yōu)化,感興趣的朋友一起看看吧2025-04-04
mybatis中association標(biāo)簽的使用解讀
這篇文章主要介紹了mybatis中association標(biāo)簽的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
若依框架升級(jí)springBoot3啟動(dòng)druid-spring-boot-starter報(bào)錯(cuò)問(wèn)題及解決
文章主要描述了在使用Spring Boot 3時(shí),由于缺少`com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties`類(lèi)型的bean而報(bào)錯(cuò),解決方案是考慮在配置中定義該類(lèi)型bean2026-01-01
一篇文章掌握J(rèn)ava?Thread的類(lèi)及其常見(jiàn)方法
Thread類(lèi)用于操作線程,是所以涉及到線程操作(如并發(fā))的基礎(chǔ)。本文將通過(guò)代碼對(duì)Thread類(lèi)的功能作用及其常見(jiàn)方法進(jìn)行分析2022-03-03

