本文是作者原创,版权归作者所有.若要转载,请注明出处.

springboot集成mybatis和mybatis-generator插件

1.新建Springboot项目(略)

2.导入相关依赖

<!--spring-boot-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> <dependencies>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<!--mybatis逆向工程-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--Druid 数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
<!--devtools热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
<!-- swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency> </dependencies> <build>
<plugins>
<!--maven插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--mybatis逆向工程-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins> <!--加载xml等文件为资源文件-->
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
<include>**/*.tld</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>

3. 修改application.yml配置文件

server:
port: 5000 #端口号
servlet:
context-path: /pdzx #项目路径 spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://10.3.11.69:3306/pdzx?characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT%2B8
username: pdzx_pro
password: cde35TGB3910
jackson:
#格式化日期
date-format: yyyy-MM-dd HH:mm:ss
#时区配置
time-zone: Asia/Shanghai
devtools:
restart:
enabled: true #设置开启热部署
additional-paths: src/main/java #重启资源目录 mybatis:
type-aliases-package: com.pdzx.po #别名
mapper-locations: classpath:com/pdzx/mapper/*.xml #mybatis的sql文件xml路径配置

3. 新建包名,如下图

springboot集成mybatis(逆向工程),热部署以及整合Swagger2-LMLPHP

4. 自动生成代码文件generatorConfig.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <!-- 配置生成器 -->
<generatorConfiguration> <!-- 可以用于加载配置项或者配置文件
resource:配置资源加载地址,使用resource,从classpath开始找,比如com/myproject/generatorConfig.properties
url:配置资源加载地质,使用URL的方式,比如file:///C:/myfolder/generatorConfig.properties.
注意,两个属性只能选址一个
-->
<!--导入属性配置-->
<properties resource="datasource.properties"/> <!--指定特定数据库的jdbc驱动jar包的位置-->
<!-- 暂时不清楚怎么指定相对路径,只能指定maven仓库中的jar包 -->
<!--<classPathEntry location="D:/repository/mysql/mysql-connector-java/5.1.28/mysql-connector-java-5.1.28.jar"/>--> <classPathEntry location="D:/repository/mysql/mysql-connector-java/8.0.16/mysql-connector-java-8.0.16.jar"/> <!--
context:生成一组对象的环境
id:必选,上下文id,用于在生成错误时提示
targetRuntime:
1,MyBatis3:默认的值,生成基于MyBatis3.x以上版本的内容,包括XXXBySample;
2,MyBatis3Simple:类似MyBatis3,只是不生成XXXBySample;
-->
<context id="default" targetRuntime="MyBatis3"> <!--生成的bean是没有tostring方法的,所以如果要想生成tostring方法的话,需要在generatorConfig.xml中加上如下配置-->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"></plugin>
<!-- 去除生成文件的注释 -->
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="suppressAllComments" value="true"/>
<property name="javaFileEncoding" value="UTF-8"/>
</commentGenerator> <!--jdbc的数据库连接,直接写死也可以 -->
<jdbcConnection
driverClass="${jdbc.driverClass}"
connectionURL="${jdbc.url}"
userId="${jdbc.username}"
password="${jdbc.password}">
</jdbcConnection> <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver> <!-- Model模型生成器,用来生成数据库对应的实体类
targetPackage 指定生成的model生成所在的包名
targetProject 指定在该项目下所在的路径
-->
<javaModelGenerator targetPackage="com.pdzx.entity" targetProject="src/main/java">
<!-- 是否允许子包,eg:fase路径com.pdzx.entity, true:com.pdzx.entity..[schemaName] -->
<property name="enableSubPackages" value="false"/>
<!-- 是否对model添加 构造函数 -->
<property name="constructorBased" value="false"/>
<!-- 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法,只有构造方法 -->
<property name="immutable" value="false"/>
<!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
<property name="trimStrings" value="false"/>
</javaModelGenerator> <!--mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件,就是用xml写SQL的方式 -->
<sqlMapGenerator targetPackage="com.pdzx.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator> <!-- 生成易于使用的针对Model对象和XML配置文件 的代码,即dao层接口文件
type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
-->
<!-- targetPackage:mapper接口dao生成的位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.pdzx.dao" targetProject="src/main/java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator> <!--
tableName为对应的数据库表
domainObjectName是要生成的实体类
enable*ByExample是否生成 example类 -->
<table tableName="b_video_info"
domainObjectName="VideoInfo"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false">
<!-- 上面的属性都可以使用子标签形式表示 -->
<!-- 是否使用真实字段名,设置为false将自动驼峰转换 -->
<property name="useActualColumnNames" value="false" />
</table> </context>
</generatorConfiguration>

5. 引用的数据库配置文件datasource.properties

jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://10.3.11.69:3306/pdzx?characterEncoding=utf8&useSSL=false&allowMultiQueries=true&nullCatalogMeansCurrent=true
jdbc.username=pdzx_pro
jdbc.password=cde35TGB3910

注意:如果mysql的驱动版本较高,mybatis自动生成代码可能只有insert()和insertSelective()

解决方案:在jdbc url后增加nullCatalogMeansCurrent=true即可

6.在idea中执行maven插件,如下

springboot集成mybatis(逆向工程),热部署以及整合Swagger2-LMLPHP

生成的逻辑代码和自己写的文件如下

dao层

@Repository
public interface VideoInfoMapper { int deleteByPrimaryKey(Integer id); int insert(VideoInfo record); int insertSelective(VideoInfo record); VideoInfo selectByPrimaryKey(Integer id); int updateByPrimaryKeySelective(VideoInfo record); int updateByPrimaryKey(VideoInfo record);
}

service层

public interface VideoInfoService {
VideoInfo selectByPrimaryKey(Integer id);
}

实现类

@Service
public class VideoInfoServiceImpl implements VideoInfoService { @Autowired
private VideoInfoMapper videoInfoMapper; @Override
public VideoInfo selectByPrimaryKey(Integer id) {
return videoInfoMapper.selectByPrimaryKey(id);
}
}

controller层

@RequestMapping("video")
@RestController
public class VideoInfoController {
@Autowired
private VideoInfoService videoInfoService; @GetMapping("/selectByPrimaryKey")
public VideoInfo selectByPrimaryKey(Integer id){
return videoInfoService.selectByPrimaryKey(id);
} @GetMapping("/hello")
public String hello(){
return "hello springboot-mybatis-xml";
} @GetMapping("/hi")
public String hi(){
return "hi springboot-mybatis-xml";
} }

7.生成文件后在启动类中添加注解@MapperScan

@MapperScan("com.pdzx.dao")
@SpringBootApplication
public class VideoApplication { public static void main(String[] args) {
SpringApplication.run(VideoApplication.class);
} }

8.访问以下路径,测试

http://localhost:5000/pdzx/video/selectByPrimaryKey?id=83

看结果

springboot集成mybatis(逆向工程),热部署以及整合Swagger2-LMLPHP

 至此,springboot集成mybatis和mybatis-generator插件成功

springboot集成热部署

1.注意依赖

<!--devtools热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>

2.注意配置

spring:
devtools:
restart:
enabled: true #设置开启热部署
additional-paths: src/main/java #重启资源目录

3.设置IDEA的自动编译:,如图

springboot集成mybatis(逆向工程),热部署以及整合Swagger2-LMLPHP

4.安装ctrl + shift + alt + /,选择Registry,勾上 Compiler autoMake allow when app running,如图

springboot集成mybatis(逆向工程),热部署以及整合Swagger2-LMLPHP

5.重启idea即可生效

SpringBoot整合Swagger2

1.两个Swagger2相关的依赖

     <!-- swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>

2.Swagger2配置

package com.pdzx.config;

import springfox.documentation.service.Contact;
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.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2; /**
* Created by bianxh on 2019/1/21.
*/
@Configuration
@EnableSwagger2//启用Swagger2
public class SwaggerApp { //http://localhost:5000/pdzx/swagger-ui.html 项目路径/swagger-ui.html
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.pathMapping("/")//配置映射路径和要扫描的接口的位置
.select()
.apis(RequestHandlerSelectors.basePackage("com.pdzx.controller"))//配置要扫描的接口的位置
.paths(PathSelectors.any())
.build().apiInfo(new ApiInfoBuilder()//配置一下Swagger2文档网站的信息
.title("SpringBoot整合Swagger")//网站的title
.description("本站是平大客户端的接口文档信息")//网站的描述
.version("9.0")//接口版本
.contact(new Contact("平大开发部","http://www.shpingda.com/","[email protected]"))//联系人的信息
.license("The Apache License")//使用的协议
.licenseUrl("http://www.baidu.com")//
.build());
}
}

3.创建接口

@RestController
@Api(tags = "用户管理相关接口")//可以用来标记当前Controller的功能
@RequestMapping("/user")
public class UserController { @PostMapping("/addUser")
@ApiOperation("添加用户的接口")//用来标记一个方法的作用
@ApiImplicitParams(//如果有多个参数,多个@ApiImplicitParam注解需要放在一个@ApiImplicitParams注解中
{
//用来描述一个参数,可以配置参数的中文含义,也可以给参数设置默认值,这样在接口测试的时候可以避免手动输入
@ApiImplicitParam(name = "username", value = "用户名", defaultValue = "李四"),
//假如开发者需要指定一个参数必填,@RequestParam(required = true)注解不能省略
@ApiImplicitParam(name = "address", value = "用户地址", defaultValue = "深圳", required = true)
}
)
public User addUser(@RequestParam( "username") String username, @RequestParam( "address") String address) {
User user = new User();
user.setUsername(username);
user.setAddress(address);
return user;
} @GetMapping("/getUserById")
@ApiOperation("根据id查询用户的接口")
@ApiImplicitParam(name = "id", value = "用户id", defaultValue = "99", required = true)
public User getUserById(@RequestParam( "id") Integer id) {
User user = new User();
user.setId(id);
return user;
} @PutMapping("/updateUserById")
@ApiOperation("根据id更新用户的接口")//如果参数是一个对象(例如上文的更新接口),对于参数的描述也可以放在实体类中
public User updateUserById(@RequestBody User user) {
return user;
}
}

user

@ApiModel
public class User { @ApiModelProperty(value = "用户id")
private Integer id;
@ApiModelProperty(value = "用户名")
private String username;
@ApiModelProperty(value = "用户地址")
private String address; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} }

4.访问一下路径(项目路径/swagger-ui.html)

看结果

springboot集成mybatis(逆向工程),热部署以及整合Swagger2-LMLPHP

5.测试,点击Execute按钮,表示发送请求进行测试。测试结果会展示在下面的Response中

springboot集成mybatis(逆向工程),热部署以及整合Swagger2-LMLPHP

05-11 15:21