1、包結構
2、pom文件
2.1、定義properties
<properties>
<mbg.version>1.3.6</mbg.version>
<java.version>1.8</java.version>
<!-- Java接口和實體類生成路徑
targetMapperPackage是生成的接口包名
targetModelPackage是生成的實體類包名
-->
<targetJavaProject>${basedir}/src/main/java</targetJavaProject>
<targetMapperPackage>com.asiainfo.group.springbootmybatisdemo.mapper</targetMapperPackage>
<targetModelPackage>com.asiainfo.group.springbootmybatisdemo.entity</targetModelPackage>
<!-- XML生成路徑 -->
<targetResourcesProject>${basedir}/src/main/resources</targetResourcesProject>
<targetXMLPackage>mapper</targetXMLPackage>
</properties>
2.2、依賴
<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>
</dependencies>
2.3、插件
<build>
<plugins>
<!--mbg插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>${mbg.version}</version>
<configuration>
<!-- MBG配置文件路徑 -->
<configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<!-- 是否覆蓋,true表示會替換生成的JAVA文件,false則不覆蓋 -->
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>
3、核心配置文件application.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis_study?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
username: root
password: ok
mybatis:
type-aliases-package: com.asiainfo.group.springbootmybatisdemo.entity
mapper-locations: classpath:mapper/*Mapper.xml
#開啓sql日誌
logging:
level:
com.asiainfo.group.springbootmybatisdemo.mapper: DEBUG
4、jdbc.properties(供generatorConfig.xml引用)
jdbc.driver-class-name: com.mysql.cj.jdbc.Driver
jdbc.url: jdbc:mysql://localhost:3306/mybatis_study?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
jdbc.username: root
jdbc.password: ok
jdbc.location=D:/dev/maven/repo/mysql/mysql-connector-java/8.0.20/mysql-connector-java-8.0.20.jar
5、mybatis-generator核心配置文件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">
<!--下列所有xml標籤順序不能顛倒、不能多不能少-->
<generatorConfiguration>
<!-- mysql數據源配置文件路徑,0或1個 -->
<properties resource="jdbc.properties"/>
<!-- 數據庫驅動:選擇你的本地硬盤上面的數據庫驅動包,0或多個-->
<classPathEntry location="${jdbc.location}"/>
<!--1或多個,用於指定生成一組對象的環境
defaultModelType:如何生成實體類
1、conditional:這是默認值,這個模型和下面的hierarchical類似,除了如果那個單獨的類將只包含一個字段,將不會生成一個單獨的類
因此,如果一個表的主鍵只有一個字段,那麼不會爲該字段生成單獨的實體類,會將該字段合併到基本實體類中。
2、flat:該模型爲每一張表只生成一個實體類。這個實體類包含表中的所有字段。這種模型最簡單,推薦使用。
3、hierarchical:如果表有主鍵,那麼該模型會產生一個單獨的主鍵實體類,如果表還有BLOB字段,則會爲表生成一個包含所有BLOB字段
的單獨的實體類,然後爲所有其他的字段生成一個單獨的實體類。 MBG會在所有生成的實體類之間維護一個繼承關係
targetRuntime:用於指定生成的代碼的運行時環境
1、MyBatis3:*這是默認值*
2、MyBatis3Simple
3、Ibatis2Java2
4、Ibatis2Java5
如果你希望不生成和Example查詢有關的內容,那麼可以按照如下進行配置
使用MyBatis3Simple可以避免在後面的<table>中逐個進行配置
-->
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<!--autoDelimitKeywords,當表名或者字段名爲SQL關鍵字的時候,可以設置該屬性爲true,
MBG會自動給表名或字段名添加分隔符-->
<property name="autoDelimitKeywords" value="true"/>
<!--beginningDelimiter和endingDelimiter的默認值爲雙引號("),
在Mysql中不能這麼寫,所以還要將這兩個默認值改爲反單引號(`)
例如:select * from `user info`-->
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!--插件用於擴展或修改通過MyBatis Generator (MBG)代碼生成器生成的代碼-->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
<commentGenerator>
<!-- 是否去除自動生成的註釋 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
<!--阻止生成的註釋包含時間戳-->
<property name="suppressDate" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="${jdbc.driver-class-name}"
connectionURL="${jdbc.url}"
userId="${jdbc.username}"
password="${jdbc.password}">
<!--解決(當不同數據庫中存在相同的表名時,生成的代碼有問題)的問題-->
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<!--
默認false,把JDBC DECIMAL 和 NUMERIC 類型解析爲 Integer
true,把JDBC DECIMAL 和 NUMERIC 類型解析爲java.math.BigDecimal
-->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 實體類生成路徑 -->
<javaModelGenerator targetPackage="${targetModelPackage}" targetProject="${targetJavaProject}"/>
<!-- XML生成路徑 -->
<sqlMapGenerator targetPackage="${targetXMLPackage}" targetProject="${targetResourcesProject}"/>
<!-- 接口生成路徑 -->
<javaClientGenerator targetPackage="${targetMapperPackage}" targetProject="${targetJavaProject}" type="XMLMAPPER"/>
<!--生成全部的表名,用%-->
<table tableName="user" schema="mybatis_study"/>
<table tableName="role" schema="mybatis_study"/>
</context>
</generatorConfiguration>
6、執行插件,自動生成dao接口、實體類和sql映射文件