A085_HRM_01_项目原型搭建

目录

      • 1.内容介绍
      • 2.项目基本介绍
        • 2.1.项目背景
        • 2.2.功能模块
        • 2.3.项目原型
      • 3.项目技术架构
        • 3.1.技术架构
        • 3.2.技术栈
        • 3.3.项目原型图
        • 3.4.开发步骤
      • 4.后端项目微服务原型搭建
        • 4.1.创建Git仓库(省略)
          • 4.1.1.登录码云创建仓库
          • 4.1.2.本地克隆仓库
          • 4.1.3.创建项目到仓库目录
          • 4.1.4.忽略不需要提交的内容
        • 4.2.项目结构搭建
        • 4.3.前端结构搭建
        • 4.4.SpringCloud集成
          • 4.4.1.顶级父工程 hrm-parent
          • 4.4.2.Eureka注册中心
          • 4.4.3.Zuul 服务网关
          • 4.4.4.Config Server
          • 4.4.5.基础模块(basic)
      • 5.系统管理中心
        • 5.1.创建项目
          • 5.1.1.创建模块
          • 5.1.2.hrm-system-server-1040导入pom
          • 5.1.3.yml配置
          • 5.1.4.入口类
          • 5.1.5.测试
        • 5.2.网关配置路由
      • 6.MybatisPlus集成
        • 6.1.引入
        • 6.2.简介
          • 6.2.1.Mybatisplu是什么
          • 6.2.2.mybatisplus特点
          • 6.2.3.结构(了解)
        • 6.3.代码生成项目 - mybatisplus的模块
          • 6.3.1.创建项目并导入jar
          • 6.3.2.配置
          • 6.3.3.写代码测试
          • 6.3.4.拷贝模块
          • 6.3.5.生成数据字典代码
        • 6.4.微服务集成MyBatis-plus
          • 6.4.1.hrm-system-common模块
          • 6.4.2.导入mybatis-plus jar
          • 6.4.3.配置application.yml
          • 6.4.4.MyBatis-Plus配置类
          • 6.4.5.添加swagger-ui的配置类
          • 6.4.6.程序入口类
          • 6.4.7.测试-生成代码后再做测试
        • 6.5.系统管理-数据字典
          • 6.5.1.表设计
          • 6.5.2.接口测试工具postman
        • 6.6.网关配置Swagger
          • 6.6.1.导入依赖
          • 6.6.2.Swagger配置类
      • 7.课程总结
        • 7.1.重点
        • 7.2.难点
        • 7.3.如何掌握?
        • 7.4.排错技巧(技巧)
        • 7.5.面试题
      • 8.扩展知识或课外阅读推荐(可选)
        • 8.1.扩展知识
        • 8.2.课外阅读

1.内容介绍

1.HRM项目基本介绍
2.HRM项目原型(重点)
3.系统管理后端搭建(重点)
4.Mybatis-plus集成(重点)
5.Swagger集成
6.Gitee管理项目

2.项目基本介绍

2.1.项目背景

找工作的人、想学习的人
现在社会竞争压力越来愈大,很多应届毕业生毕业后没法直接胜任某类工作,或者是一些已经工作的人慢慢丧失自己学习的能力,最终导致失业无法再次就业。
招聘的单位
虽然求职者非常多,但是很多人的能力达不到用人企业的要求,他们期望一招聘进来马上就能使用,所以需要对求职候选人进行培养筛选。
培训机构
很多培训机构虽然有能力培训人才但是,市场能力比较差,找不到合适的学员,让他们通过培训能找到工作

正是由于以上三类场景,所以我们开发一个源码人力系统,让找工作的人,能够选择特定机构的课程学习,并参与平台发布的招聘,而且还能参与一些活动。 让招聘单位入驻进来发布岗位进行招聘,甚至委托培训机构培训合适的人才。对于配置机构可以发布课程,吸收学员来完成学习并通过收取学费获取商业价值。

2.2.功能模块

A085_HRM_01_项目原型搭建_第1张图片

2.3.项目原型

通过项目原型进一步了解项目的功能,包括:门户首页、课程搜索页、个人中心等 参考“项目原型”

3.项目技术架构

3.1.技术架构

项目采用主流的前后端分离模式,前端分为系统管理前端,门户网站前端(职位站点,课程站点,用户中心等等)。
A085_HRM_01_项目原型搭建_第2张图片

3.2.技术栈

系统管理前端采用技术栈为
Node.js,Vue.js,Npm,WebPack,Vue Cli ,Element UI ,Easy Mock等等。
门户网站前端技术栈为
Html ,css,js ,jquery等等。
后端采用微服务架构技术栈为
微服务架构:按照功能拆分N多个服务,每个服务可以独立技术选型,独立开发,独立部署,独立运维.,单个服务使用基于ssm的springboot,服务间通过spring cloud协调.技术包括:

MyBatis-Plus,SpringBoot ,SpringMvc,SpringCloud(Eureka/Nacos,Zuul/Gateway,Config/Nacos,Feign,Hystrix/Sentinel等等),Redis,Fastdfs/阿里云的OSS对象存储技术,ElasticSearch,RabbitMQ,Velocity; 运维方面:阿里云服务器,Docker,Jenkins,Rancher,K8S等等。

3.3.项目原型图

A085_HRM_01_项目原型搭建_第3张图片

3.4.开发步骤

项目是基于前后端分离的架构进行开发,前后端分离架构总体上包括前端和服务端,通常是多人协作并行开发,开 发步骤如下:

1.接项目,立项
2.需求分析(产品经理) ,需求文档,概要设计,功能原型图,梳理用户的需求,分析业务流程
3.项目经理组建团队开发 PM,SE,TM=PM+SE,项目启动会,开发人员培训(SE),项目原型搭建(SE) 开发文档
4.开发(开发工程师)
 a)接口定义,根据需求分析定义接口
 b)服务端和前端并行开发 ,依据接口进行服务端接口开发。 postman测试
 c)前端开发用户操作界面,并请求服务端接口完成业务处理。 EasyMock模拟数据
 d)前后端集成测试 最终前端调用服务端接口完成业务。 (联调)
5.测试人员测试
6.上线 运维人员
7.运维-留一两个人
 a)在简历中写项目的开发周期,一般写的是6个月左右,开发时间最多2-3个月之间
8.开发其他项目

4.后端项目微服务原型搭建

4.1.创建Git仓库(省略)
4.1.1.登录码云创建仓库
4.1.2.本地克隆仓库
4.1.3.创建项目到仓库目录
4.1.4.忽略不需要提交的内容
4.2.项目结构搭建
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      //用户中心服务
4.3.前端结构搭建

暂时不管,后面再来搭建

hrm-websites-parent
	 hrm-website-system
     hrm-website-course
     hrm-website-user
     hrm-website-job
     hrm-website-active
4.4.SpringCloud集成
4.4.1.顶级父工程 hrm-parent
 
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>cn.itsource.hrmgroupId>
    <artifactId>hrm-parentartifactId>
    <packaging>pompackaging>
    <version>1.0-SNAPSHOTversion>
    <modules>
        <module>hrm-basic-parentmodule>
        <module>hrm-support-parentmodule>
        <module>hrm-system-parentmodule>
    modules>

    
    <properties>
       <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <maven.compiler.source>1.8maven.compiler.source>
        <maven.compiler.target>1.8maven.compiler.target>
    properties>

    
    <parent>
        <groupId> org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.0.5.RELEASEversion>
    parent>

    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>Finchley.SR1version>
                <type>pomtype>
                <scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>


    
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
        dependency>
        
        
        <dependency>
            <groupId>org.apache.commonsgroupId>
            <artifactId>commons-lang3artifactId>
        dependency>
        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
        dependency>
    dependencies>
project>
4.4.2.Eureka注册中心

1)创建项目

hrm-parent
    hrm-support-parent 					//springcloud微服务支持模块
		hrm-eureka-server-1010

2)pom.xml

	<dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
    dependency>
    <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
	dependency>

3)配置文件

spring:
  application:
    name: hrm-eureka
server:
  port: 1010
eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #单机配置

4)入口类

/*注册中心启动类*/
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication1010{
    public static void main( String[] args ){
        SpringApplication.run(EurekaServerApplication1010.class) ;
    }
}

5)启动测试

访问:http://localhost:1010

4.4.3.Zuul 服务网关

1)创建项目

hrm-parent
    hrm-support-parent 					//springcloud微服务支持模块
		hrm-zuul-server-1020

2)导入jar

		
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
        dependency>
       
         
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-zuulartifactId>
        dependency>

3)做配置

#注册中心 , 服务的配置 ,zuul的配置(前缀,忽略服务 ,路由)
eureka:
  client:
    registry-fetch-interval-seconds: 5
    serviceUrl:
      defaultZone: http://localhost:1010/eureka/
  instance:
    prefer-ip-address: true  #使用ip注册到Eureka
    instance-id: zuul-server:1020  #指定客户端实例的ID 
server:
  port: 1020
spring:
  application:
    name: zuul-server #服务名
zuul:
  prefix: "/hrm" #统一访问的前缀
  ignored-services: "*" #所有的服务都不要使用服务名的方式去访问
  routes:
    hrm-system: "/system/**" #系统管理服务 
  retryable: true #是否开启重试功能
  ribbon:
    eager-load.enabled: true  	# 饥饿加载
ribbon:
  MaxAutoRetries: 1 #对当前服务的重试次数
  MaxAutoRetriesNextServer: 1 #切换相同Server的次数
  OkToRetryOnAllOperations: false # 对所有的操作请求都进行重试,如post就不能重试,如果没做幂等处理,重试多次post会造成数据的多次添加或修改
  ConnectTimeout: 10000 #请求连接的超时时间
  ReadTimeout: 10000 #请求处理的超时时间
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 15000
            #如果配置ribbon的重试,hystrix的超时时间要大于ribbon的超时时间

4)入口

//@EnableZuulProxy :开启zuul
@SpringBootApplication
@EnableZuulProxy
@EnableEurekaClient
public class ZuulServerApplication1020 {
    public static void main(String[] args) {
        SpringApplication.run(ZuulServerApplication1020.class) ;
    }
}

5)启动测试

在Eureka中有Zuul就ok

4.4.4.Config Server
  1. Gitee仓库创建
  2. 配置中心Config Server搭建
  3. zuul集成Config Client
4.4.5.基础模块(basic)
Hrm-parent
	hrm-basic-parent  基础模块
		hrm-basic-util 工具
		hrm-basic-common
  1. 基础工具模块(basic-util)
    拷贝基础工具到该模块化中

  2. 基础公共模块
    拷贝BaseQuery到模块中

5.系统管理中心

有一个数据字典很多模块都要使用,先把他实现了

5.1.创建项目
5.1.1.创建模块
hrm-system-parent 系统管理中心
    hrm-system-common 公共代码:domain,query
    hrm-system-server-1040   系统管理中心服务: mapper,service,controller
5.1.2.hrm-system-server-1040导入pom
<dependencies>
    
    <dependency>
        <groupId>cn.itsource.hrmgroupId>
        <artifactId>hrm-system-commonartifactId>
        <version>1.0-SNAPSHOTversion>
    dependency>

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>
    
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
    dependency>
        
dependencies>
5.1.3.yml配置
server:
  port: 1040
spring:
  application:
    name: hrm-system
eureka:
  client:
    service-url:
      defaultZone: http://localhost:1010/eureka
  instance:
    prefer-ip-address: true
		instance-id: hrm-system:1040  #指定客户端实例的ID 
5.1.4.入口类
/**
 * 主启动配置类
 */
@SpringBootApplication
@EnableEurekaClient
public class SystemServerApplication2010
{
    public static void main( String[] args )
    {
        SpringApplication.run(SystemServerApplication2010.class);
    }
}
5.1.5.测试

能够注册到Eureka

5.2.网关配置路由

如果已经在搭建zuul的时候配置了那么现在就不用配置了

zuul:
  prefix: "/hrm" #统一访问的前缀
  ignored-services: "*" #所有的服务都不要使用服务名的方式去访问
  routes:
    system-server: "/system/**" #系统管理服务 

6.MybatisPlus集成

6.1.引入

在真实项目开发中我们的服务模块,一般都要进行数据库操作,并且每个domain都有crud,需多次写重复代码。我们使用MybatisPlus,就不用写重复代码,并且还有模板的功能,可以一键生成daomin,query,mapper接口,mapper.xml,service,controller,非常好用。

6.2.简介
6.2.1.Mybatisplu是什么

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。*-

6.2.2.mybatisplus特点

无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
损耗小:启动即会自动注入基本 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 注入攻击

6.2.3.结构(了解)

A085_HRM_01_项目原型搭建_第4张图片
我们的微服务要生成代码,也要连接数据库,需要集成MyBatis-Plus,同时我们需要搭建一个代码生成器模块,它需要集成Mybatis-plus和Velocity
A085_HRM_01_项目原型搭建_第5张图片

6.3.代码生成项目 - mybatisplus的模块

可以重新开一个项目,也可以就在原来项目里面。为了不影响运行的代码重新开项目。

步骤分析:
1 创建springboot项目
2 导入jar
3 配置
3 写代码测试

6.3.1.创建项目并导入jar
<dependencies>
    <dependency>
        <groupId>com.baomidougroupId>
        <artifactId>mybatis-plus-generatorartifactId>
        <version>3.4.0version>
    dependency>
    <dependency>
        <groupId>org.apache.velocitygroupId>
        <artifactId>velocity-engine-coreartifactId>
        <version>2.2version>
    dependency>
    
    <dependency>
        <groupId>io.springfoxgroupId>
        <artifactId>springfox-swagger2artifactId>
        <version>2.9.2version>
    dependency>
    <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
        <version>8.0.17version>
    dependency>
dependencies>
6.3.2.配置

resource/mybatiesplus-config-system.properties

#controller代码输出基本路径
OutputDirController=D:/workspace/hrm-workspace/hrm-parent/hrm-system-parent/hrm-system-server-1040/src/main/java
#service/mapper代码输出基本路径
OutputDirServiceMapper=D:/workspace/hrm-workspace/hrm-parent/hrm-system-parent/hrm-system-server-1040/src/main/java
#mapper.xml SQL映射文件目录
OutputDirXml=D:/workspace/hrm-workspace/hrm-parent/hrm-system-parent/hrm-system-server-1040/src/main/resources
#domain的输出路径
OutputDirBase=D:/workspace/hrm-workspace/hrm-parent/hrm-system-parent/hrm-system-common/src/main/java

#设置作者
author=wen'ge

#自定义包路径:基础包的路径
#项目根包
parent=itsource.cw
#controller包名
controller=web
#service包名 不生成service接口
service=service
#service实现类包名
service.impl=service.impl
#mapper数据库操作层包名
mapper=mapper
#数据表对应javabean包名
domain=domain
#自定义查询条件包名
query=query
#去除表的前缀
table_prefix=t_
#需要自动生成的表名
tableNames=t_systemdictionary,t_systemdictionaryitem

#数据库连接信息
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql:///hrm-system?serverTimezone=Asia/Shanghai&characterEncoding=utf-8
jdbc.user=root
jdbc.pwd=root
6.3.3.写代码测试

略(见代码生成器工程的源代码)

6.3.4.拷贝模块
在代码生成器路径  resources/templates文件夹中,提供了2个自定义的模板:
query.java.vm
controller.java.vm

注意:
1.我们在使用时,主要需要修改的是它的 包路径
2.需要修改模板中,引入我们处自定义的工具类BaseQuery和PageList时,它的包路径
6.3.5.生成数据字典代码

找一个表数据字典生成代码

6.4.微服务集成MyBatis-plus
6.4.1.hrm-system-common模块
  1. hrm-basic-util模块拷贝工具类
    去课件资料 reousrces/工具类 里面找

  2. hrm-system-commo 导入mybatis-plus依赖

注意:hrm-system-common只需要导入 mybatis-plus-boot-starter,hrm-basic-util 依赖即可

<dependencies>
    <dependency>
        <groupId>itsource.cwgroupId>
        <artifactId>hrm-basic-commonartifactId>
        <version>1.0-SNAPSHOTversion>
    dependency>


    
    <dependency>
        <groupId>com.baomidougroupId>
        <artifactId>mybatis-plus-boot-starterartifactId>
        <version>3.4.0version>
    dependency>
    
    <dependency>
        <groupId>io.springfoxgroupId>
        <artifactId>springfox-swagger2artifactId>
        <version>2.9.2version>
    dependency>
    <dependency>
        <groupId>io.springfoxgroupId>
        <artifactId>springfox-swagger-uiartifactId>
        <version>2.9.2version>
    dependency>
dependencies>

hrm-system-server-1040 服务调整

6.4.2.导入mybatis-plus jar

修改 hrm-system-server-1040 导入如下依赖:

<dependencies>
    <dependency>
        <groupId>itsource.cwgroupId>
        <artifactId>hrm-system-commonartifactId>
        <version>1.0-SNAPSHOTversion>
    dependency>
    <dependency>
        <groupId>itsource.cwgroupId>
        <artifactId>hrm-basic-utilartifactId>
        <version>1.0-SNAPSHOTversion>
    dependency>

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>

    
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
    dependency>
    
    
    
    
    <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
        <version>8.0.17version>
    dependency>
    
    
    <dependency>
        <groupId>com.alibabagroupId>
        <artifactId>druidartifactId>
        <version>1.2.1version>
    dependency>
dependencies>
6.4.3.配置application.yml
#配置数据库的连接
spring:
  application:
    name: hrm-system
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource # 连接池指定 springboot2.02版本默认使用HikariCP 此处要替换成Druid
    driver-class-name: com.mysql.cj.jdbc.Driver # 这个驱动必须用新版,不能用老版
    url: jdbc:mysql:///hrm-system?characterEncoding=utf-8&serverTimezone=GMT%2B8
    username: root
    password: root
    druid: #这是关于德鲁伊连接池的核心配置
      initial-size: 5 # 初始化时建立物理连接的个数
      min-idle: 5 # 最小连接池连接数量,最小空闲数量
      max-active: 20 # 最大连接池连接数量,最大活跃连接数
      max-wait: 60000 # 配置获取连接等待超时的时间
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 300000
      validationQuery: SELECT 1
      testWhileIdle: true
      testOnBorrow: true
      testOnReturn: false
      poolPreparedStatements: true
      maxPoolPreparedStatementPerConnectionSize: 20
      filters: stat,wall
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      stat-view-servlet:
        allow: 0.0.0.0 # 允许哪些IP访问druid监控界面,多个IP以逗号分隔
        login-username: admin # 设置登录帐号
        login-password: 123456 # 设置登录密码
        reset-enable: false # 是否允许重置数据
        # url-pattern: /database/* # 默认访问根路径是:/druid/;也可以自定义设置
mybatis-plus: # mybatis的配置。下面的配置希望执行Sql语句可以打印到 控制台
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 开启mybatis-plus的sql打印
6.4.4.MyBatis-Plus配置类
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

//Spring boot方式来对mybatis-plus3进行 mapper的扫描
@Configuration
@MapperScan("itsource.cw.mapper")
public class MybatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
        // paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }
}
6.4.5.添加swagger-ui的配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {
        ApiInfo apiInfo = new ApiInfoBuilder()
                .title("服务接口文档范例")
                .description("springboot集成框架案例")
                .version("1.0")
                .build();

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo)
                .select()
                //以扫描包的方式
                .apis(RequestHandlerSelectors.basePackage("cn.itsource.cw"))
                .paths(PathSelectors.any())
                .build();
    }
}
6.4.6.程序入口类
package cn.itsource.hrm;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableEurekaClient
public class SystemServerApplication2010{
    public static void main(String[] args) {
        SpringApplication.run(App.class,args);
    }
}
6.4.7.测试-生成代码后再做测试
直接启动工程,并访问swagger-ui的首页,测试controller接口
Swagger-ui的访问地址: http://localhost:1040/swagger-ui.html
6.5.系统管理-数据字典

数据字典就是把系统中的一些不会经常变的一些数据项,使用2个表来维护,数据项的类型使用数据字典类型表,数据项的明细列表使用数据字典的明细表 来维护。

使用代码生成器生成基础代码,然后对接VUE前端做CRUD
A085_HRM_01_项目原型搭建_第6张图片
A085_HRM_01_项目原型搭建_第7张图片

6.5.1.表设计

A085_HRM_01_项目原型搭建_第8张图片
多对一设计

6.5.2.接口测试工具postman

访问本项目地址:http://127.0.0.1:1040/swagger-ui.html
A085_HRM_01_项目原型搭建_第9张图片

6.6.网关配置Swagger

前端开发每次都要记录每个服务ip不好,期望只记忆网关ip就ok,需要做配置

6.6.1.导入依赖
 
       <dependency>
           <groupId>io.springfoxgroupId>
           <artifactId>springfox-swagger2artifactId>
           <version>2.9.2version>
       dependency>
       
       <dependency>
           <groupId>io.springfoxgroupId>
           <artifactId>springfox-swagger-uiartifactId>
           <version>2.9.2version>
       dependency>
6.6.2.Swagger配置类
package cn.itsource.hrm.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger.web.SwaggerResource;
import springfox.documentation.swagger.web.SwaggerResourcesProvider;
import springfox.documentation.swagger.web.UiConfiguration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
import java.util.List;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo());
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("源码人力资源系统")
                .description("源码人力资源接口文档说明")
                .termsOfServiceUrl("http://localhost:1020")
                .contact(new Contact("whale.chen", "", "[email protected]"))
                .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
A085_HRM_01_项目原型搭建_第10张图片

7.课程总结

7.1.重点

项目原型架构图
项目原型架构搭建
Mybatisplus集成

7.2.难点

项目原型架构搭建

7.3.如何掌握?

写代码前先把流程搞清楚,要做哪些事情要知道,记不住可以看我的课件
有些内容,比如配置文件,可以拷贝SpringCloud项目中的,也可以去官网拷贝
代码敲完,做一遍总结

7.4.排错技巧(技巧)

1.根据错误日志来,看不懂就翻译,或者百度这个错误日志
2.详细检查你的代码,根据老师的步骤检查一遍
3.必要时使用Debug排错
4.一个问题超过20分钟搞不定,就可以在群里问同学问老师了

7.5.面试题

1.你们的项目架构是怎么样的,你给我画出来
2.你在集成SpringCloud的时候遇到过什么问题

8.扩展知识或课外阅读推荐(可选)

8.1.扩展知识
  1. maven默认配置
    A085_HRM_01_项目原型搭建_第11张图片
    A085_HRM_01_项目原型搭建_第12张图片
    在这里插入图片描述
    A085_HRM_01_项目原型搭建_第13张图片
    A085_HRM_01_项目原型搭建_第14张图片
  2. idea dashbord
    A085_HRM_01_项目原型搭建_第15张图片
  3. idea2017 三级模块
    A085_HRM_01_项目原型搭建_第16张图片
8.2.课外阅读

Session详解:http://www.cnblogs.com/lonelydreamer/p/6169469.html

你可能感兴趣的:(文档,java)