使用 mybatis-generator 插件
关于配置的详细意义请参考博客:https://www.jianshu.com/p/2cace13b7819
https://www.jianshu.com/p/9a6e9f93ba6d
下面开始写我学习后做的项目。
- 新建一个Spring boot 项目。pom.xml 配置
<?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.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.zdy</groupId>
<artifactId>srpingboot-01-mybatis-generator</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>srpingboot-01-mybatis-generator</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>
<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-maven-plugin -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.dynamic-sql/mybatis-dynamic-sql -->
<!--自动生成动态sql,而且没有xml 文件的时候 的时候需要的依赖包-->
<dependency>
<groupId>org.mybatis.dynamic-sql</groupId>
<artifactId>mybatis-dynamic-sql</artifactId>
<version>1.1.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--generator 插件的使用-->
<!-- mybatis generator 自动生成代码插件 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.0</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
<dependencies>
<!--这里引入了数据库驱动,就不需要在generator.xml里配置
classPathEntry了-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!--依赖版本选择和springboot 自动引入版本一样-->
<version>8.0.19</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
- application.propteries
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 这里使用的是MySql 8.0.15 数据库,需要加时区,保证自己的数据库 存在。
spring.datasource.url=jdbc:mysql://localhost:3306/db_mybatis?\
useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=666666
# 整合Mybatis
# 检查mybatis 配置文件是否存在
mybatis.check-config-location=true
# 配置别名
mybatis.type-aliases-package=com.zdy.springboot.entity
# 配置文件位置
# mybatis.config-location=classpath:mybatis/mybatis-config.xml
#配置mybatis 映射文件位置
mybatis.mapper-locations=classpath:mybatis/mapper/*Mapper.xml
- mybatis-generator.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>
<!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包,这里在插件里配置了数据库依赖这里可以不配置。-->
<!-- <classPathEntry location="D:\maven-repository\mysql\mysql-connector-java\8.0.11\mysql-connector-java-8.0.11.jar"/>-->
<!-- 引入外部配置文件-->
<properties resource="application.properties"></properties>
<!--defaultModelType="flat"这种类型的model会为每个表生成唯一的一个类,这个类中会包含表中所有的字段。-->
<!--你希望不生成和Example查询有关的内容,可进行如下配置
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">-->
<context id="Mysql" targetRuntime="MyBatis3" defaultModelType="flat">
<commentGenerator>
<!--是否生成带注释的时间戳-->
<property name="suppressDate" value="true"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库链接URL,用户名、密码 -->
<jdbcConnection driverClass="${spring.datasource.driver-class-name}"
connectionURL="${spring.datasource.url}"
userId="${spring.datasource.username}"
password="${spring.datasource.password}">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成模型的包名和位置-->
<javaModelGenerator targetPackage="com.zdy.springboot.entity" targetProject="${mybatis.project}">
<!--使用构造方法入参
<property name="constructorBased" value="true"/>-->
<!--MBG会根据catalog和schema来生成子包。如果false就会直接用targetPackage属性。默认为false。-->
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成映射文件的包名和位置-->
<sqlMapGenerator targetPackage="mybatis.mapper" targetProject="${mybatis.resources}">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置-->
<!--context targetRuntime="MyBatis3" 时这里使用的3个选择
NNOTATEDMAPPER: 基于注解的Mapper接口,不会有对应的XML映射文件
MIXEDMAPPER: XML和注解的混合形式,(上面这种情况中的)SqlProvider注解方法会被XML替代。
XMLMAPPER: 所有的方法都在XML中,接口调用依赖XML文件。
-->
<javaClientGenerator type="MIXEDMAPPER" targetPackage="com.zdy.springboot.mapper" targetProject="${mybatis.project}">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!--要想生成数据库中全部的表可以这样配置:
<table tableName="%" />
也可一个一个单独制定。
-->
<!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
<!--enableXXX:XXX代表多种SQL方法,该属性用来指定是否生成对应的XXX语句。-->
<table tableName="t_user" domainObjectName="User"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false"
>
<!--配置为true,则只会生成实体类,默认false-->
<property name="modelOnly" value="false"/>
</table>
</context>
</generatorConfiguration>
- 运行generatot 插件,自动生成代码,在接口上添加@Mapper 和 @Repository ,新建TestController测试,
@RestController
public class TestController {
@Autowired
private UserMapper userMapper;
@GetMapping("/test")
public String test(){
User user = userMapper.selectByPrimaryKey(1);
System.out.println("获取用户数据"+user);
return "success";
}
}
启动项目,在浏览器输 http://localhost:8080/test 观察浏览器和控制态台输出的信息。