springboot2+mybatisplus+redis+generator代码生成器环境搭建

搭建一个springboot+mybatisplus+redis的项目环境,其中使用generator代码生成器完成基本的代码生成

  1. 在创建spring项目时勾选 springboot mybatis等基本依赖(后续有shiro,json等需求再添加)
    在这里插入图片描述
  2. 引入需求的依赖根据自己的需求更改
<dependencies>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>

       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-devtools</artifactId>
           <scope>runtime</scope>
           <optional>true</optional>
       </dependency>
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <scope>runtime</scope>
       </dependency>
       <dependency>
           <groupId>org.projectlombok</groupId>
           <artifactId>lombok</artifactId>
           <optional>true</optional>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-test</artifactId>
           <scope>test</scope>
       </dependency>
<!--        -->
       <!--mp-->
       <dependency>
           <groupId>com.baomidou</groupId>
           <artifactId>mybatis-plus-boot-starter</artifactId>
           <version>3.2.0</version>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-freemarker</artifactId>
       </dependency>
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <scope>runtime</scope>
       </dependency>
       <!--mp代码生成器-->
       <dependency>
           <groupId>com.baomidou</groupId>
           <artifactId>mybatis-plus-generator</artifactId>
           <version>3.2.0</version>
       </dependency>
       <!--MP分页查询-->
       <dependency>
           <groupId>com.github.pagehelper</groupId>
           <artifactId>pagehelper</artifactId>
           <version>5.1.4</version>
       </dependency>
<!--        shiro-->
<!--        <dependency>-->
<!--            <groupId>org.crazycake</groupId>-->
<!--            <artifactId>shiro-redis-spring-boot-starter</artifactId>-->
<!--            <version>3.2.1</version>-->
<!--        </dependency>-->
<!--        redis-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-data-redis</artifactId>
       </dependency>
<!--        json-->
       <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>fastjson</artifactId>
           <version>1.2.35</version>
       </dependency>

另外需要注意的是,还需要添加过滤规则,否者代码生成以后可能出现找不到mapper等报错(因为我使用的是yml配置文件,可能在编译的时候不会将yml编译到target目录当中)

<resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.yml</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.yml</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
  1. 配置application.yml文件
# DataSource Config
spring:
 datasource:
   driver-class-name: com.mysql.cj.jdbc.Driver
   url: jdbc:mysql://localhost:3306/navigation?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
   username: root
   password: root
 redis:
   database: 0
   # Redis服务器地址 写你的ip
   host: 182.61.5.203
   # Redis服务器连接端口
   port: 6379
   # Redis服务器连接密码(默认为空)
   password:
   # 连接池最大连接数(使用负值表示没有限制  类似于mysql的连接池
   jedis:
     pool:
       max-active: 200
       # 连接池最大阻塞等待时间(使用负值表示没有限制) 表示连接池的链接拿完了 现在去申请需要等待的时间
       max-wait: -1
       # 连接池中的最大空闲连接
       max-idle: 10
       # 连接池中的最小空闲连接
       min-idle: 0
   # 连接超时时间(毫秒) 去链接redis服务端
   timeout: 6000
mybatis-plus:
 mapper-locations: classpath*:/mapper/**Mapper.xml
 global-config:
   db-config:
     #     逻辑删除
     logic-delete-field: deleted
     logic-delete-value: 1
     logic-not-delete-value: 0
 configuration:
   log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

server:
 port: 8081
  1. 数据表准备(设置逻辑删除需要添加逻辑删除的deleted字段)
  2. 编写代码生成器的启动类
 public static void main(String[] args) {
        // 代码生成器
        AutoGenerator mpg = new AutoGenerator();

        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        final String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/src/main/java");
        //作者
        gc.setAuthor("guz");
        //打开输出目录
        gc.setOpen(false);
        //xml开启 BaseResultMap
        gc.setBaseResultMap(true);
        //xml开启 BaseColumnList
        gc.setBaseColumnList(true);
        //实体属性 Swagger2 注解
      //  gc.setSwagger2(true);
        mpg.setGlobalConfig(gc);

        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/navigation?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC");
        // dsc.setSchemaName("public");

        //注意:数据库必须要有对应的字段和表,不然不能自动识别

        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
        mpg.setDataSource(dsc);

        // 包配置
        final PackageConfig pc = new PackageConfig();
//        表前缀名 生成出来的包前缀
//        pc.setModuleName("u");
        pc.setParent("com.luguz")
                .setEntity("pojo")
                .setMapper("mapper")
                .setService("service")
                .setServiceImpl("service.impl")
                .setController("controller");
        mpg.setPackageInfo(pc);

        // 自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };

        // 如果模板引擎是 freemarker
        String templatePath = "/templates/mapper.xml.ftl";
        // 如果模板引擎是 velocity
        // String templatePath = "/templates/mapper.xml.vm";

        // 自定义输出配置
        List<FileOutConfig> focList = new ArrayList<>();
        // 自定义配置会被优先输出
        focList.add(new FileOutConfig(templatePath) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                return projectPath + "/src/main/resources/mapper/"
                        + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });

        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);

        // 配置模板
        TemplateConfig templateConfig = new TemplateConfig();

        // 配置自定义输出模板
        //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
        // templateConfig.setEntity("templates/entity2.java");
        // templateConfig.setService();
        // templateConfig.setController();

        templateConfig.setXml(null);
        mpg.setTemplate(templateConfig);

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.no_change);
//        strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");
        strategy.setEntityLombokModel(true);
        // 公共父类
//        strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!");
        // 写于父类中的公共字段
//        strategy.setSuperEntityColumns("id");
        //生成@RestController 控制器
        strategy.setRestControllerStyle(true);
        strategy.setInclude("user");
        strategy.setControllerMappingHyphenStyle(true);
        //表前缀
//        strategy.setTablePrefix("u_");
        mpg.setStrategy(strategy);
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();
    }

  1. 启动启动类即可自动生成代码(多个表 setInclude方法为可变长形参使用逗号分割传入即可)
  2. 根据表的内容我需要自己添加自己的Config,来配置添加时间以及删除等时间,添加一个config包以及Myconfig文件用来注册全局的需要的组件,另外添加MyMetaObjectHandler来完成时间的自动添加,另外我还将插入时的逻辑删除字段在此赋值保证初始值,另外可以在pojo当中可以设置deleted可以为空(@NotNull等注解)
//需加上Component交由Spring管理 注册到同一的config中
public class MyMetaObjectHandler implements MetaObjectHandler {

    //使用mp实现添加操作  createDate 为数据库设置的字段
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createDate",LocalDate.now(),metaObject);
        this.setFieldValByName("updateDate",LocalDate.now(),metaObject);
//        注册时统一设置逻辑删除字段 deleted
        this.setFieldValByName("deleted", 0, metaObject);
    }

    //使用mp实现修改操作 updateDate 字段
    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}
  1. 另外我还注册了一个CorsFilter 解决跨域问题(或者在全局加上启动类(只想一个类跨域也可以加在类上)@CrossOrigin 注解也可以)
public class CorsFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse) response;
        res.addHeader("Access-Control-Allow-Credentials", "true");
        res.addHeader("Access-Control-Allow-Origin", "*");
        res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
        res.addHeader("Access-Control-Allow-Headers", "Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN");
        if (((HttpServletRequest) request).getMethod().equals("OPTIONS")) {
            response.getWriter().println("ok");
            return;
        }
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

}

  1. 在全局注册文件当中注册(Mybatisplus分页插件,后面也可以用,上面的pom以及引入依赖了)
    在这里插入图片描述11. 启动成功
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值