使用SpringBoot+SpringCloud+SpringMVC+Mybatisplus对服务基本搭建

1.项目搭建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qkgxI9it-1611143033128)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1610287951648.png)]

1.1 基础架构
hrm-parent                       //管理jar:SpringBoot;SpringCloud,一些公共的内容
    hrm-support-parent 		     //springcloud微服务支持模块
hrm-eureka-server-1010
hrm-zuul-server-1020
hrm-config-server-1030
hrm-basic-parent              //基础模块
    hrm-basic-util            //工具 : AjaxResult ,PageList
    hrm-basic-common          //公共模块: BaseDoamin ,BaseQuery
hrm-system-parent             //系统管理中心
    hrm-system-common         //system的公共代码 :SystemQuery ,Domain
    hrm-system-server-1040    //系统管理中心服务Controller,Service,Mapper
hrm-course-parent               //课程中心
    hrm-course-common         //公共代码
    hrm-course-server-1050    //课程中心服务
Hrm-redis-parent
    Hrm-redis-feign           //feign客户端接口模块
    Hrm-redis-server-1060     //缓存服务
Hrm-elasticsearch-parent
    Hrm-elasticsearch-feign           //feign客户端接口模块
    Hrm-elasticsearch-server-1070     //缓存服务
hrm-user-parent               //用户中心
    hrm-user-common           //公共代码
    hrm-user-server-1080      //用户中心服务
1.2搭建注意事项
  1. 如果导入了mybatis的包,就必须需要配置数据库的连接,但是配置中心等服务不需要连接数据库,如果导入了mybstis的包,只需要在启动类加上@SpringBootApplication(

    ​ exclude={DataSourceAutoConfiguration.class}

    )

2.集成mybstisplus

  1. 概念:是mybtis的增强版,可以简化代码,提高开发效率。

  2. 特点:

    ² 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑

    ² 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作

    ² 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求

    ² 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错

    ² 支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer2005、SQLServer 等多种数据库

    ² 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题

    ² 支持 XML 热加载Mapper 对应的 XML支持热加载对于简单的 CRUD 操作甚至可以无 XML 启动

    ² 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作

    ² 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )

    ² 支持关键词自动转义:支持数据库关键词(order、key…)自动转义,还可自定义关键词

    ² 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用

    ² 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询

    ² 内置性能分析插件:可输出 Sql 语句以及其执行时间建议开发测试时启用该功能,能快速揪出慢查询

    ² 内置全局拦截插件:提供全表 delete,update 操作智能分析阻断也可自定义拦截规则,预防误操作

    ² 内置 Sql 注入剥离器:支持 Sql 注入剥离,有效预防 Sql 注入攻击

1.代码生成器模块

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5F5MNRO3-1611143033131)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1610288910182.png)]

  1. 导入依赖

    		<dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>2.2.0</version>
            </dependency>
    
            <!--模板引擎-->
            <dependency>
                <groupId>org.apache.velocity</groupId>
                <artifactId>velocity-engine-core</artifactId>
                <version>2.0</version>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
    

    2 . 配置配置文件

    ​ 文件名:resource/mybatiesplus-config-system.properties

    #代码输出基本路径
    OutputDir=C:/Users/Administrator/Desktop/java1107/code/hrm-1107/hrm-parent/hrm-system-parent/hrm-system-server-2010/src/main/java
    
    #mapper.xml SQL映射文件目录
    OutputDirXml=C:/Users/Administrator/Desktop/java1107/code/hrm-1107/hrm-parent/hrm-system-parent/hrm-system-server-2010/src/main/resources
    
    #domain的输出路径
    OutputDirBase=C:/Users/Administrator/Desktop/java1107/code/hrm-1107/hrm-parent/hrm-system-parent/hrm-system-common/src/main/java
    
    #设置作者
    author=whale.chen
    
    #自定义包路径:基础包的路径
    parent=cn.itsource.hrm
    
    #数据库连接信息
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql:///hrm-system
    jdbc.user=root
    jdbc.pwd=123456
    

    3.写代码测试

    import com.baomidou.mybatisplus.generator.AutoGenerator;
    import com.baomidou.mybatisplus.generator.InjectionConfig;
    import com.baomidou.mybatisplus.generator.config.*;
    import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
    import com.baomidou.mybatisplus.generator.config.po.TableInfo;
    import com.baomidou.mybatisplus.generator.config.rules.DbType;
    import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
    
    import java.util.*;
    
    /**
     * 生成代码的主类
     */
    public class GenteratorCode {
    
        public static void main(String[] args) throws InterruptedException {
            //用来获取Mybatis-Plus.properties文件的配置信息
            ResourceBundle rb = ResourceBundle.getBundle("mybatiesplus-config-system"); //不要加后缀
            AutoGenerator mpg = new AutoGenerator();
            // 全局配置
            GlobalConfig gc = new GlobalConfig();
            gc.setOutputDir(rb.getString("OutputDir"));
            gc.setFileOverride(false);
            gc.setActiveRecord(true);// 开启 activeRecord 模式
            gc.setEnableCache(false);// XML 二级缓存
            gc.setBaseResultMap(true);// XML ResultMap
            gc.setBaseColumnList(false);// XML columList
            gc.setAuthor(rb.getString("author"));
            mpg.setGlobalConfig(gc);
            // 数据源配置
            DataSourceConfig dsc = new DataSourceConfig();
            dsc.setDbType(DbType.MYSQL);
            dsc.setTypeConvert(new MySqlTypeConvert());
            dsc.setDriverName(rb.getString("jdbc.driver"));
            dsc.setUsername(rb.getString("jdbc.user"));
            dsc.setPassword(rb.getString("jdbc.pwd"));
            dsc.setUrl(rb.getString("jdbc.url"));
            mpg.setDataSource(dsc);
            // 表策略配置
            StrategyConfig strategy = new StrategyConfig();
            strategy.setTablePrefix(new String[] { "t_" });// 此处可以修改为您的表前缀
            strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
    
            strategy.setInclude(new String[]{
                    "表名字"
            }); // 需要生成的表
    
            mpg.setStrategy(strategy);
            // 包配置
            PackageConfig pc = new PackageConfig();
            pc.setParent(rb.getString("parent"));  //cn.itsource.hrm
            pc.setController("web.controller"); //cn.itsource.hrm.web.controller
            pc.setService("service");
            pc.setServiceImpl("service.impl");
            pc.setEntity("domain");
            pc.setMapper("mapper");
            mpg.setPackageInfo(pc);
    
            // 注入自定义配置,可以在 VM 中使用 cfg.abc 【可无】
            InjectionConfig cfg = new InjectionConfig() {
                @Override
                public void initMap() {
                    Map<String, Object> map = new HashMap<String, Object>();
                    map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-rb");
                    this.setMap(map);
                }
            };
    
            List<FileOutConfig> focList = new ArrayList<FileOutConfig>();
    
            //controller的输出配置
            focList.add(new FileOutConfig("/templates/controller.java.vm") {
                @Override
                public String outputFile(TableInfo tableInfo) {
                    //合并好的内容输出到哪儿?
                    return rb.getString("OutputDir")+ "/cn/itsource/hrm/web/controller/" + tableInfo.getEntityName() + "Controller.java";
                }
            });
            //query的输出配置
            focList.add(new FileOutConfig("/templates/query.java.vm") {
                @Override
                public String outputFile(TableInfo tableInfo) {
                    return rb.getString("OutputDirBase")+ "/cn/itsource/hrm/query/" + tableInfo.getEntityName() + "Query.java";
                }
            });
    
            // 调整 domain 生成目录演示
            focList.add(new FileOutConfig("/templates/entity.java.vm") {
                @Override
                public String outputFile(TableInfo tableInfo) {
                    return rb.getString("OutputDirBase")+ "/cn/itsource/hrm/domain/" + tableInfo.getEntityName() + ".java";
                }
            });
    
            // 调整 xml 生成目录演示
            focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
                @Override
                public String outputFile(TableInfo tableInfo) {
                    return rb.getString("OutputDirXml")+ "/cn/itsource/hrm/mapper/" + tableInfo.getEntityName() + "Mapper.xml";
                }
            });
            cfg.setFileOutConfigList(focList);
            mpg.setCfg(cfg);
    
            // 自定义模板配置,可以 copy 源码 mybatis-plus/src/main/resources/templates 下面内容修改,
            // 放置自己项目的 src/main/resources/templates 目录下, 默认名称一下可以不配置,也可以自定义模板名称
            TemplateConfig tc = new TemplateConfig();
            tc.setService("/templates/service.java.vm");
            tc.setServiceImpl("/templates/serviceImpl.java.vm");
            tc.setMapper("/templates/mapper.java.vm");
            tc.setEntity(null);
            tc.setController(null);
            tc.setXml(null);
            // 如上任何一个模块如果设置 空 OR Null 将不生成该模块。
            mpg.setTemplate(tc);
    
            // 执行生成
            mpg.execute();
        }
    }
    
2.微服务集成mybatisplus
  1. 导入依赖

    <dependency>
    			<groupId>com.baomidou</groupId>
    			<artifactId>mybatis-plus-boot-starter</artifactId>
    			<version>2.2.0</version>
    		</dependency>
    
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    		</dependency>
           <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.9</version>
            </dependency>
    <dependency>
        <groupId>cn.itsource.hrm</groupId>
        <artifactId>hrm-system-common</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    
  2. 配置xml文件

    spring:
      application:
        name: system-server #服务名
      datasource:
        username: root
        password: 123456
        url: jdbc:mysql:///hrm-system
        driver-class-name: com.mysql.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource
    mybatis-plus: #集成MyBatis-Plus
      mapper-locations: classpath:cn/itsource/hrm/mapper/*Mapper.xml
      #type-aliases-package: cn.itsource.hrm.domain,cn.itsource.hrm.query  
    
  3. 配置配置类

    import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    
    //Spring boot方式
    @Configuration
    @MapperScan("cn.itsource.hrm.mapper") //mapper接口扫描
    @EnableTransactionManagement  //事务管理
    public class MybatisPlusConfig {
    
        /**
         * 分页插件
         */
        @Bean
        public PaginationInterceptor paginationInterceptor() {
            return new PaginationInterceptor();
        }
    }
    

3.网关配置swagger

  1. 导入依赖
<!--引入swagger支持-->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>
  1. ​ 在注册中心服务配置两个配置类

    @Configuration
    @EnableSwagger2
    public class Swagger2 {
     
        @Bean
        public Docket createRestApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    //对外暴露服务的包,以controller的方式暴露,所以就是controller的包.
                    .apis(RequestHandlerSelectors.basePackage("cn.itsource.hrm.web.controller"))
                    .paths(PathSelectors.any())
                    .build();
        }
    
    
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("平台服务api")
                    .description("平台服务接口文档说明")
                    .contact(new Contact("whale.chen", "", "whale.chen@itsource.cn"))
                    .version("1.0")
                    .build();
        }
    
    }
    
    package cn.itsource.hrm.config;
    
    import org.springframework.context.annotation.Primary;
    import org.springframework.stereotype.Component;
    import springfox.documentation.swagger.web.SwaggerResource;
    import springfox.documentation.swagger.web.SwaggerResourcesProvider;
    
    import java.util.ArrayList;
    import java.util.List;
    
    @Component
    @Primary
    public class DocumentationConfig implements SwaggerResourcesProvider {
        @Override
        public List<SwaggerResource> get() {
           List resources = new ArrayList<>();
           resources.add(swaggerResource("系统管理", "/hrm/system/v2/api-docs", "2.0"));
           return resources;
        }
    
        private SwaggerResource swaggerResource(String name, String location, String version) {
            SwaggerResource swaggerResource = new SwaggerResource();
            swaggerResource.setName(name);
            swaggerResource.setLocation(location);
            swaggerResource.setSwaggerVersion(version);
            return swaggerResource;
        }
    }
    

    测试:http://127.0.0.1:1020/swagger-ui.html

    注:如果在单个服务集成swagger的话,只需要导入第一个配置类,端口换成此服务的端口即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值