SpringBoot集成MyBatis及使用mybatis-generator-plugin生成代码
1 新建项目
2 导入依赖
该示例数据库连接池使用阿里的durid
完整pom.xm文件
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.mbgeneratorp</groupId>
<artifactId>mbgp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mbgp</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
<!--使用durid连接池的依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- mybatis generator 自动生成代码插件 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
<!-- 配置数据库链接及mybatis generator core依赖 生成mapper时使用 -->
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
3 application.yml配置
完整application.yml
# 设置端口
server:
port: 8080
# 设置数据源
spring:
datasource:
url: jdbc:mysql://localhost:3306/mbgp?serverTimezone=UTC
username: root
password: root
# 连接池类型
type: com.alibaba.druid.pool.DruidDataSource
# 驱动
driver-class-name: com.mysql.cj.jdbc.Driver
# 连接池配置
druid:
# 最小数
min-idle: 5
# 最大数
max-active: 20
# 初始大小
initial-size: 5
# 配置获取连接等待超时时间
max-wait: 6000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
time-between-eviction-runs-millis: 60000
# 配置一个连接在池中最小生存时间 单位为毫秒
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打开 PSCache,并且指定每个连接上PSCache的大小
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,wall用于防火墙
filters: stat,wall
# 配置mybatis
mybatis:
mapper-locations: classpath:mappers/*.xml
# 全局的映射,不用在xml文件写实体类的全路径
type-aliases-package: com.mbgeneratorp.mgbp.domain
configuration:
# 开启驼峰映射
map-underscore-to-camel-case: true
4 mybatis-generator插件配置
4.1 generatorConfig.xml配置
pom.xml中mybatis-generator-plugin中有过这样配置
根据配置,在resources目录下新建generator文件夹,并新建generatorConfig.xml配置文件.该配置文件主要描述如下信息:数据库连接配置、类型转换、生成模型的包名及位置、生成映射文件的包名及位置、生成mapper文件的包名及位置、要生成的表等。
完整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>
<context id="DB2Tables">
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 数据库链接URL,用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mbgp"
userId="root"
password="root">
</jdbcConnection>
<!-- 类型转换 -->
<javaTypeResolver>
<!-- 是否使用BigDecimals,false可自动转化以下类型(Long Integer Short等) -->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成模型的包名和位置-->
<javaModelGenerator targetPackage="com.mbgeneratorp.mbgp.domain" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成映射文件的包名和位置-->
<sqlMapGenerator targetPackage="mappers" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.mbgeneratorp.mbgp.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
<table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
<property name="useActualColumnNames" value="false"/>
<!-- 数据库表主键 -->
<generatedKey column="id" sqlStatement="Mysql" identity="true"/>
</table>
</context>
</generatorConfiguration>
注意:如果这里报红
解决办法:
mybatis-generator-config_1_0.dtd文件存在于mybatis-generator-core-1.3.2.jar包中,路径如下org/mybatis/generator/config/xml/mybatis-generator-config_1_0.dtd
可以设置开发工具的dtd配置,配置http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd指向本地项目mybatis-generator-core-1.3.2.jar里的mybatis-generator-config_1_0.dtd
4.2 创建mybatis-generator命令快捷方式
该步骤是为了方便在后续直接通过运行命令方式来操作生成mapper、pojo等,就像运行application一样。
1 、点击maven
5 创建数据库和表
CREATE DATABASE sb_myb_demo charset utf8;
CREATE TABLE user(
user_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
user_name VARCHAR(255) NOT NULL ,
password VARCHAR(255) NOT NULL ,
phone VARCHAR(255) NOT NULL
) ENGINE=INNODB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;
insert into user values(1, '张三', '123456', '1888888888');
6 执行generate,生成pojo及mapper
然后查看项目,发现mapper、pojo等已经生成好,并且生成了相关CRUD方法,如图:
## 7 controller,service层代码
UserService.java:
package com.mbgeneratorp.mbgp.service;
import com.mbgeneratorp.mbgp.domain.User;
public interface UserService {
User selectByPrimaryKey(Integer userId);
}
UserServiceImpl .java
package com.mbgeneratorp.mbgp.service.impl;
import com.mbgeneratorp.mbgp.domain.User;
import com.mbgeneratorp.mbgp.mapper.UserMapper;
import com.mbgeneratorp.mbgp.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
public User selectByPrimaryKey(Integer userId){
return userMapper.selectByPrimaryKey(userId);
}
}
UserController .java
package com.mbgeneratorp.mbgp.Controller;
import com.mbgeneratorp.mbgp.domain.User;
import com.mbgeneratorp.mbgp.service.impl.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserServiceImpl userService;
@RequestMapping("/queryUserById")
public User queryUserById(int id){
User user = userService.selectByPrimaryKey(id);
return user;
}
}
MbgpApplication .java
package com.mbgeneratorp.mbgp;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.mbgeneratorp.mbgp.mapper")
public class MbgpApplication {
public static void main(String[] args) {
SpringApplication.run(MbgpApplication.class, args);
}
}
8 测试
启动工程,在浏览器中访问