SpringBoot整合mybatisplus和druid的示例詳解
更新時間:2023年08月24日 09:34:26 作者:fking86
這篇文章主要介紹了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)境準備
導入依賴
<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 相關 --> <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ù)據源 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ù)據源連接池配置 druid: # 數(shù)據源其他配置 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)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計,'wall'用于防火墻 filters: stat,wall,slf4j mybatis-plus: mapper-locations: classpath*:/mapper/**/*.xml # xml路徑 global-config: db-config: id-type: ASSIGN_ID # 全局默認主鍵策略,默認為雪花ID,若表中設置了自增,則生成的實體自動添加自增ID屬性,參考 TestDelete logic-delete-field: deleted # 全局邏輯刪除的實體字段名,若不配置,則不啟用 logic-delete-value: 1 # 邏輯已刪除值(默認為 1) logic-not-delete-value: 0 # 邏輯未刪除值(默認為 0) configuration: map-underscore-to-camel-case: true # 駝峰轉下劃線(默認) log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 日志輸出 type-aliases-package: com.example.domain.entity
數(shù)據庫表
-- ---------------------------- -- 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 '用戶名字', `password` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用戶密碼', 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(); // 添加分頁插件 interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 添加 攻擊 SQL 阻斷解析器,防止全表更新與刪除 interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); // 添加 樂觀鎖 插件 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; /** * 用戶ID */ @TableId private String id; /** * 用戶賬號 */ 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 = "用戶名字", required = true) @NotNull(message = "用戶名字不能為空") private String username; @ApiModelProperty(value = "用戶密碼", required = true) @NotNull(message = "用戶密碼不能為空") private String password; }
UserUpdateReqVO
@ApiModel("用戶更新 Request VO") @Data @ToString(callSuper = true) public class UserUpdateReqVO extends UserBaseVO { @ApiModelProperty(value = "", required = true) @NotNull(message = "id不能為空") private String id; }
UserCreateReqVO
@ApiModel("用戶更新 Request VO") @Data @ToString(callSuper = true) public class UserCreateReqVO extends UserBaseVO { }
MyBatisDemoController
@RestController @RequestMapping("/user") @Slf4j public class MyBatisDemoController { @Autowired private UserService userService; /** * 添加一個新用戶 * * @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"; } /** * 更新用戶 * * @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"; } /** * 通過id獲取用戶 * * @param id * @return java.lang.Object */ @GetMapping("/{id}") public Object get(@PathVariable String id) { return userService.getById(id); } /** * 通過id刪除用戶 * * @param id * @return java.lang.Object */ @GetMapping("/del/{id}") public Object del(@PathVariable String id) { userService.removeById(id); return "del"; } }
代碼生成工具
導入依賴
<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ù)據源 * @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; } /** * 設置全局配置 * @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ù)是一個目錄,所以需要獲取當前系統(tǒng)目錄 gc.setAuthor("coderjim"); gc.setOpen(true);//是否打開資源管理器 gc.setFileOverride(true);//是否覆蓋已經生成的 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);// 下劃線轉駝峰命名 strategy.setColumnNaming(NamingStrategy.underline_to_camel); // 設置映射的表名,多張表 strategy.setInclude("user"); strategy.setEntityLombokModel(true);// 是否啟用lombok開啟注解 strategy.setLogicDeleteFieldName("isAction");//設置邏輯刪除字段 // 時間自動填充配置 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); // 樂觀鎖配置 strategy.setVersionFieldName("version"); // rustful 格式 strategy.setRestControllerStyle(true); return strategy; } }
以上就是SpringBoot整合mybatisplus和druid的示例詳解的詳細內容,更多關于SpringBoot整合mybatisplus和druid的資料請關注腳本之家其它相關文章!
相關文章
springboot源碼中this::selfInitialize怪異用法的含義解析
這篇文章主要介紹了springboot源碼中this::selfInitialize怪異用法的含義解析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03線程池之jdk1.8 Executors創(chuàng)建線程池的幾種方式
這篇文章主要介紹了線程池之jdk1.8 Executors創(chuàng)建線程池的幾種方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08SpringBoot創(chuàng)建線程池的六種方式小結
本文主要介紹了SpringBoot創(chuàng)建線程池的六種方式小結,包括自定義線程池,固定長度線程池,單一線程池,共享線程池,定時線程池,SpringBoot中注入異步線程池,感興趣的可以了解一下2023-11-11Jrebel License Server 激活 IDEA-Jrebel-在線-
這篇文章主要介紹了Jrebel License Server 激活 IDEA-Jrebel-在線-離線-均適用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12