版本介绍
jdk 17
SpringBoot 3.1.0
druid-spring-boot-starter 1.2.4
mysql-connector 8.0.33
mybatis-plus 3.5.3.1
环境准备
导入依赖
org.springframework.boot spring-boot-starter-parent 3.1.0 17 17 UTF-8 1.2.4 8.0.33 1.18.26 1.5.22 3.5.3.1 org.springframework.boot spring-boot-starter-web com.alibaba druid-spring-boot-starter ${druid.version} mysql mysql-connector-java ${mysql.version} com.baomidou mybatis-plus-boot-starter ${mybatis-plus.version} org.projectlombok lombok ${lombok.version} compile io.swagger swagger-annotations ${swagger.version} compile
application.yml配置
server: port: 8080 spring: datasource: # 使用druid数据源 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 # 数据源连接池配置 druid: # 数据源其他配置 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; # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'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
数据库表
-- ---------------------------- -- 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 {}
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"; } }
代码生成工具
导入依赖
org.apache.velocity velocity-engine-core 2.0 com.baomidou mybatis-plus-generator 3.4.0
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(); } /** * 设置数据源 * @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");//参数是一个目录,所以需要获取当前系统目录 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 list = new ArrayList<>(); list.add(startDate); list.add(updateDate); strategy.setTableFillList(list); // 乐观锁配置 strategy.setVersionFieldName("version"); // rustful 格式 strategy.setRestControllerStyle(true); return strategy; } }
阅读全文
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=14762,转载请注明出处。
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=14762,转载请注明出处。
评论0