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

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. 新建包名,如下图

 

 

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插件,如下

 

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

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和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的自动编译:,如图

 

 

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

 

 

 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/","xxx@gmail.com"))//联系人的信息
                        .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)

看结果

 

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

 

版权声明:本文为lusaisai原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/lusaisai/p/13044415.html