项目版本概况
mybatis-generator-core:1.3.4
mybatis-generator-maven-plugin:1.3.4
mysql-connector-java(项目运行):8.0.22
mysql-connector-java(逆向工程):5.1.47
mybatis-spring-boot-starter:2.1.3
实验日期:2020 年 10 月 22 日
思维导图
数据库设计:
宁愿属性名很长,也不要使用到 mysql 关键字!
(ps:修了一天 bug 的罪恶之源)
pom.xml:
注意:数据库驱动有两个,一个是 mybatis-generator-maven-plugin 的逆向工程数据库驱动,一个是项目运行所需要的数据库驱动!
逆向工程数据库驱动版本不宜过高!
(ps:修了一天 bug 的罪恶之二)
<!-- mybatis逆向工程jar包 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<!--版本和mybatis-generator-maven-plugin保持一致-->
<version>1.3.4</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<!--springboot项目所需的mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
<build>
<plugins>
<!--逆向工程插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<!--版本和mybatis-generator-core保持一致-->
<version>1.3.4</version>
<dependencies>
<!--连接mysql数据库逆向生成代码所用的驱动-->
<!--版本不宜过高!!!-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
<!--生成器总要指定一个配置吧,不然不知道去哪里生成-->
<configuration>
<overwrite>true</overwrite>
<configurationFile>src/main/resources/generator/generatorConfig.xml</configurationFile>
</configuration>
</plugin>
</plugins>
</build>
generatorConfig.xml
注意:~Mapper.xml文件最好指定存放在
src/main/resources/mapper/ 而不要放在src/main/java/com/superkarx/dao/ 与dao层的~Mapper.class 同一个包下
原因是:①默认maven打包不会去打包java目录下的xml、properties等资源文件。②存放在resources目录下可以便于更改
<?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>
<!-- mysql驱动的位置 这个是MySQL连接的jar包,你需要指定你自己计算机上的jar包的位置-->
<!--由于在插件中添加mysql驱动依赖,这里不用了!-->
<!-- <classPathEntry location="C:\Users\wuzexin\.m2\repository\mysql\mysql-connector-java\5.1.47\mysql-connector-java-5.1.47.jar" />-->
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 数据库连接信息 -->
<!--这里是逆向工程所用的jdbc,高版本mysql驱动是要com.mysql.cj.jdbc.Driver-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhsot:3306/user?serverTimezone=UTC&useSSL=false"
userId="root"
password="root"/>
<!-- 默认false,把jdbc decimal 和numeric类型解析为Integer,为true时把jdbc decimal numeric类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- targetProject用于生成bean类的位置,其实就是表对应的类-->
<javaModelGenerator targetPackage="com.superkarx.pojo" targetProject="./src/main/java">
<!-- enableSubPackages配置是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- targetProject配置mapper映射文件生成位置,设置成resource包下-->
<sqlMapGenerator targetPackage="mapper" targetProject="./src/main/resources">
<!-- enableSubPackages配置是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- targetPackage配置mapper接口的位置 -->
<javaClientGenerator targetPackage="com.superkarx.dao" type="XMLMAPPER" targetProject="./src/main/java">
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!-- 指定数据库表 -->
<table tableName="friend"/>
<table tableName="user"/>
</context>
</generatorConfiguration>
生成代码
点击即可逆向生成代码:
生成如下几部分:Mapper接口、实体类、Mapper映射文件
具体生成的代码的解析,见:springboot+mybatis-generator逆向工程自动生成的代码文件内容详细解析(Mapper.xml+实体类+增删查改条件模板类+Mapper接口类)
为什么不生成 service 层和 controller 层?答:mybatis 是持久层框架。
application.properties
Springboot 项目的全局配置
#端口指定
server.port=8080
#远程数据源(高版本要cj,低版本不用)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/user?serverTimezone=UTC&useSSL=false
#mybatis配置
#扫描映射文件
mybatis.mapperLocations=classpath*:mapper/**/*.xml
#扫描配置文件别名(生成的映射文件已经指定)
#mybatis.type-aliases-package=com.superkarx.pojo
#开启驼峰命名(生成的映射文件已经指定)
#mybatis.configuration.map-underscore-to-camel-case=true
#showSql
logging.level.com.superkarx.dao = debug
Service层和Controller层
这里用bean自动注入,实现对mapper接口和mapper映射文件简单的测试
@Service
public class UserService {
private final
FriendMapper friendMapper;
public UserService(FriendMapper friendMapper) {
this.friendMapper = friendMapper;
}
public void insert(Friend friend) {
friendMapper.insert(friend);
}
}
@RestController
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
//编写简单的测试
@RequestMapping("/user")
public String test(){
Friend friend = new Friend();
friend.setFriFriendId(10000);
friend.setFriMasterId(10001);
friend.setFriRename("儿子");
userService.insert(friend);
return "true";
}
}
启动类
@MapperScan是扫描mapper接口(dao层)用的,用Mapper注解也可以,但自动生成的接口是没有此注解的,如果对接口一个个添加注解,假如接口太多,就比较麻烦,一行搞定就很爽!
用了@MapperScan,在service层中的Mapper注入爆红是正常的情况(如果看着不爽,就一个个添加@Mapper注解吧,这样也可以将接口装进bean容器)
@SpringBootApplication
@MapperScan(basePackages = {"com.superkarx.dao"})
public class MiniwebGeneratorApplication {
public static void main(String[] args) {
SpringApplication.run(MiniwebGeneratorApplication.class, args);
}
}
这样是没问题的~
运行测试
在浏览器中输入:http://localhost:8080/user
看后台多了一行数据,证明逆向工程生成的代码可用!
打jar包
服务要上线,一般都是打成 jar 包
成功之后会在 target 目录下看到 jar 包
查看 jar 包的内部目录
mapper 中可以随时修改sql,这就是xml方式的mybatis的好处!