Springboot + vue前后端分离后台管理系统(2) --- 引入MybatisPlus依赖

一、前言

使用MyBatisPlus可以简化Mapper的开发。MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。也有人喜欢使用JPA,对于个人来说 ,全自动的JPA对于多表的复杂查询真心难配置。

二、准备工作

2.1  引入maven依赖

注:所有添加依赖的时候均为 追加依赖 ,并没覆盖以前的依赖版本

       <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--druid数据源-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.4</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.75</version>
        </dependency>
        <!-- mybatis-plus 相关-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.1</version>
        </dependency>
        <!--&lt;!&ndash; 代码生成器 &ndash;&gt;-->
        <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-generator</artifactId>
        <version>3.4.1</version>
    </dependency>
        <!-- 模板引擎 -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>
        <!-- mybatis-plus 结束-->
        <!--以下是工具包-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.5.7</version>
        </dependency>

2.2  连接池配置

##################数据库,连接池配置 start##########################
spring:
  datasource:
    druid:
      url: jdbc:mysql://192.168.56.10:3306/ruoyi-vue?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8
      username: root
      password: root
      driver-class-name: com.mysql.cj.jdbc.Driver
      #连接池配置
      initial-size: 5
      min-idle: 5
      max-active: 20
      #连接超时时间
      max-wait: 30000
      #配置监测可以关闭的空闲连接间隔时间
      time-between-eviction-runs-millis: 60000
      # 配置连接在池中的最小生存时间
      min-evictable-idle-time-millis: 300000
##################数据库,连接池配置 end##########################
####################mybatis相关配置 start################
mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml  #配置mybatis映射文件路径
  configuration:
    map-underscore-to-camel-case: true #开启mybatis驼峰转下划线命名规则规则
####################mybatis相关配置 end################

2.3 新建用户表

CREATE TABLE `sys_user` (
  `user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `dept_id` bigint(20) DEFAULT NULL COMMENT '部门ID',
  `user_name` varchar(30) NOT NULL COMMENT '用户账号',
  `nick_name` varchar(30) NOT NULL COMMENT '用户昵称',
  `user_type` varchar(2) DEFAULT '00' COMMENT '用户类型(00系统用户)',
  `email` varchar(50) DEFAULT '' COMMENT '用户邮箱',
  `phonenumber` varchar(11) DEFAULT '' COMMENT '手机号码',
  `sex` char(1) DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)',
  `avatar` varchar(100) DEFAULT '' COMMENT '头像地址',
  `password` varchar(100) DEFAULT '' COMMENT '密码',
  `status` char(1) DEFAULT '0' COMMENT '帐号状态(0正常 1停用)',
  `del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
  `login_ip` varchar(50) DEFAULT '' COMMENT '最后登录IP',
  `login_date` datetime DEFAULT NULL COMMENT '最后登录时间',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='用户信息表';

2.4 配置mybatis生成器代码

注意:配置的方法一次性只能生成一张表的数据 ,请使用时候自定义配置使用

public class CodeGenerator {

    public static void main(String[] args) throws FileNotFoundException {
        create();
    }
    /**
     * 代码生成器方法
     * @throws FileNotFoundException
     */
    public static void create() throws FileNotFoundException {
        String projectPath = System.getProperty("user.dir");
        // 1、声明代码生成器
        AutoGenerator generator = new AutoGenerator();
        // 2、全局信息配置
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig
                // 输出目录
                .setOutputDir(projectPath + "/src/main/java")
                // 是否覆盖原有文件 默认false
                .setFileOverride(true)
                // 是否打开输出目录 默认true
                .setOpen(false)
                // 作者
                .setAuthor("jatej")
                // 设置实体类名称
                .setEntityName("%s")
                // 设置mapper 命名方式
                .setMapperName("%sMapper")
                // Mapper xml 命名方式
                .setXmlName("%sMapper")
                //service 命名方式
                .setServiceName("%sService")
                //service impl 命名方式
                .setServiceImplName("%sServiceImpl")
                //controller 命名方式
                .setControllerName("%sController")
                // Mapper xml 生成基础 查询列 可以不设置
                .setBaseColumnList(true)
                //Mapper xml 生成基础返回map 可以不设置
                .setBaseResultMap(true);
        // 3、数据源配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        // 设置数据库类型和数据源
        dataSourceConfig.setDbType(DbType.MYSQL)
                .setDriverName("com.mysql.cj.jdbc.Driver")
                .setUrl("jdbc:mysql://192.168.56.10:3306/ruoyi-vue?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8")
                .setUsername("root")
                .setPassword("root");
        // 4、策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig
                // 数据库表映射实体 下划线转大写,驼峰命名方式
                .setNaming(NamingStrategy.underline_to_camel)
                // 数据库字段映射实体属性 下划线转大写,驼峰命名方式
                .setColumnNaming(NamingStrategy.underline_to_camel)
                // 生成 @RestController 控制器
                .setRestControllerStyle(true)
                // 设置controller继承的父类
                .setSuperControllerClass(BaseController.class)
                // entity继承的父类
                .setSuperEntityClass(BaseEntity.class)
                // entity继承类的字段
                .setSuperEntityColumns("create_by", "create_time", "update_by", "update_time")
                // 是否生成lombok模式
                .setEntityLombokModel(true)
                //要生成的表名
                .setInclude("sys_user");
        // 设置表前缀,生成的实体名称不包含前缀
        //        if (StrUtil.isNotEmpty() {
        //            strategyConfig.setTablePrefix();
        //        }
        // 5、生成代码包信息配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig
                // 设置生成的包名的父类名称
                .setParent("com.jatej.ruoyivue.system")
                .setController("controller")
                .setEntity("model.entity")
                .setMapper("mapper")
                .setService("service")
                .setServiceImpl("service.impl");
        //xml 自定义输出到java 文件夹下,所以下面自定义输出路径
        //                .setXml(mapper");
        // 6、自定义要注入到模板的属性
        InjectionConfig injectionConfig = new InjectionConfig() {
            // 必须实现的方法, 内容可以放空
            @Override
            public void initMap() {
                //                Map<String, Object> map = new HashMap<>(4);
                //                map.put("moduleName", "");
                //                map.put("description", "");
                //                this.setMap(map);
            }
        };
        List<FileOutConfig> fileOutConfigList = new ArrayList<>();
        FileOutConfig fileOutConfig = new FileOutConfig("/templates/mapper.xml.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return projectPath + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        };
        fileOutConfigList.add(fileOutConfig);
        injectionConfig.setFileOutConfigList(fileOutConfigList);
        // 7 自定义模板~~~~
        TemplateConfig templateConfig = new TemplateConfig();
        // xml自定义输出路径,所以设置为null
        templateConfig.setXml(null);
        // 8、整合配置
        generator.setGlobalConfig(globalConfig)
                .setDataSource(dataSourceConfig)
                .setStrategy(strategyConfig)
                .setPackageInfo(packageConfig)
                .setTemplate(templateConfig)
                .setCfg(injectionConfig);
        //9、执行
        generator.execute();
    }

}

公共字段抽取父类

@Data
public class BaseEntity {
    /**
     * 创建者 填充策略为插入自动填充
     */
    @TableField(fill = FieldFill.INSERT)
    private String createBy;
    /**
     * 创建时间 填充策略为插入自动填充
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    /**
     * 更新者 填充策略为更新自动填充
     */
    @TableField(fill = FieldFill.UPDATE)
    private String updateBy;
    /**
     * 更新时间 填充策略为更新自动填充
     */
    @TableField(fill = FieldFill.UPDATE)
    private Date updateTime;
}

然后新建一个自动填充策略类MpMetaObjectHandler.java

public class MpMetaObjectHandler implements MetaObjectHandler {
    /**
     * 插入时的填充策略
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        // 起始版本 3.3.0(推荐使用)
        this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
//       配置了SpringSecurity后补充
        this.strictInsertFill(metaObject, "createBy", String.class, "jatej");
    }
    /**
     * 更新时的填充策略
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        // 起始版本 3.3.0(推荐)
        this.strictUpdateFill(metaObject, "updateTime", Date.class,new Date());
        //       配置了SpringSecurity后补充
        this.strictUpdateFill(metaObject, "updateBy", String.class, "ify");
    }
}

新建一个mybatis plus的配置类注入填充策略Bean

@Configuration
@MapperScan("com.jatej.ruoyivue.*.mapper")//扫描mapper接口
public class MybatisPlusConfig {
    /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
     */ @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
    /**
     * 公共字段自动填充策略
     *
     * @return
     */
    @Bean
    public MpMetaObjectHandler mpMetaObjectHandler() {
        return new MpMetaObjectHandler();
    }
}

运行CodeGenerater中方法,生成代码 

注意:为了代码整洁,将公共包全部放在了 common包下。

猜你喜欢

转载自blog.csdn.net/jatej/article/details/114538188