使用前提:
當你開發的java 項目或新子產品的資料庫有N張表操作時,這時要自己寫實體類、dao、SqlMapper.xml等檔案,如果有多個表,就是造成時間浪費降低開發效率,是以建議使用mybatis generator 自動生成工具。可以自動幫助你生成java實體類、dao、mapper.xml等。
第一步:環境配置和pom.xml檔案
pom檔案中加入jar的引入
<!-- mybatis逆向生成mapper和model -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
第二步:建立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>
<!--指定特定資料庫的jdbc驅動jar包的位置-->
<classPathEntry location="D:mysql\mysql-connector-java\5.1.38\mysql-connector-java-5.1.38.jar"/>
<context id="default" targetRuntime="MyBatis3">
<!-- optional,旨在建立class時,對注釋進行控制 -->
<commentGenerator type="com.firehome.utils.MyCommentGenerator">
<property name="suppressAllComments" value="true"/>
<property name="suppressDate" value="true"/>
</commentGenerator>
<!--jdbc的資料庫連接配接 -->
<jdbcConnection
driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/car"
userId="root"
password="123456">
</jdbcConnection>
<!-- 非必需,類型處理器,在資料庫類型和java類型之間的轉換控制-->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- Model模型生成器,用來生成含有主鍵key的類,記錄類 以及查詢Example類
targetPackage 指定生成的model生成所在的包名
targetProject 指定在該項目下所在的路徑
-->
<javaModelGenerator targetPackage="com.firehome.jdc.patient.model"
targetProject=".\src\main\java">
<!-- 是否允許子包,即targetPackage.schemaName.tableName -->
<property name="enableSubPackages" value="true"/>
<!-- 是否對model添加 構造函數 -->
<property name="constructorBased" value="false"/>
<!-- 是否對類CHAR類型的列的資料進行trim操作 -->
<property name="trimStrings" value="true"/>
<!-- 建立的Model對象是否 不可改變 即生成的Model對象不會有 setter方法,隻有構造方法 -->
<property name="immutable" value="false"/>
</javaModelGenerator>
<!--Mapper映射檔案生成所在的目錄 為每一個資料庫的表生成對應的SqlMap檔案 -->
<sqlMapGenerator targetPackage="com.firehome.jdc.patient.mapper"
targetProject=".\src\main\java">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 用戶端代碼,生成易于使用的針對Model對象和XML配置檔案 的代碼
type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper對象
type="MIXEDMAPPER",生成基于注解的Java Model 和相應的Mapper對象
type="XMLMAPPER",生成SQLMap XML檔案和獨立的Mapper接口(相當于dao層接口)
-->
<javaClientGenerator targetPackage="com.firehome.jdc.patient.mapper"
targetProject=".\src\main\java" type="XMLMAPPER">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<table tableName="patient" domainObjectName="Patient">
<!-- enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="tr"
selectByExampleQueryId="true" -->
</table>
</context>
</generatorConfiguration>
使用注意點:
1、classPathEntry 中的location為資料庫連接配接驅動jar包 我用的是mysql-connector-java-5.1.38.jar ,目錄存放在自己電腦本地
2、commentGenerator 對生成的注釋進行控制(文尾提供檔案下載下傳)
該元素有一個可選屬性type,可以指定使用者的實作類,該類需要實作org.mybatis.generator.api.CommentGenerator接口。而且必有一個預設的構造方法。這個屬性接收預設的特殊值DEFAULT,會使用預設的實作類org.mybatis.generator.internal.DefaultCommentGenerator。
因為系統提供了一個預設的實作類,是以對我們來說,自己實作一個會很容易,最簡單的方法就是複制預設實作類代碼到一個新的檔案中,修改類名如
MyCommentGenerator
,在你自己的實作類中,你可以選擇是否繼續支援上面的兩個屬性,你還可以增加對其他屬性的支援。
修改
MyCommentGenerator中的方法addFieldComment即可:
public void addFieldComment(Field field,
IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
if (introspectedColumn.getRemarks() != null && !introspectedColumn.getRemarks().equals("")) {
field.addJavaDocLine("");
}
}
3、jdbcConnection :jdbc的資料庫連接配接
4、javaModelGenerator 生成實體類的相關配置,targetPackage:類名、targetProject:位置
5、sqlMapGenerator 生成的SqlMappser檔案,
6、javaClientGenerator 生成的mapper接口
7、table 資料庫表名及實體類名叫啥
相關配置參考自:https://blog.csdn.net/isea533/article/details/42102297
第三步:生成代碼方式
自動生成有幾種方式,我們這兒直接跑代碼,看起來直接了當,執行下段代碼即可:
public class Test {
public static void main(String[] args) {
args = new String[] { "-configfile", "src\\main\\resources\\mybatis-generator.xml", "-overwrite" };
ShellRunner.main(args);
}
}
生成檔案的展示:
生成檔案的展示:
實體類:
mapper接口:
SqlMapper.xml:
4、除此之外,還會生成PatientExample,此類對單标的操作非常靈活,如果不想使用,删掉即可,或者配置的時候不生成Example類也可。(自己本人以前用過,這兒不寫過多)