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

环境准备

导入依赖

    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,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?