二:mybatis逆向生成接口和映射

1:添加項目依賴

<dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.18</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.1</version>
        </dependency>
        <!--mybatis逆向生成插件-->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>
    </dependencies>

2:mybatis-generator 配置文件捡多,指定生成類和映射文件的路徑及名稱

image.png
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!--導入屬性配置-->
    <properties resource="sql/jdbc.properties"></properties>
    <!--指定特定數(shù)據(jù)庫的jdbc驅(qū)動jar包的位置-->
    <classPathEntry location="${jdbc.driverLocation}"/>
    <context id="default" targetRuntime="MyBatis3">
        <!-- JavaBean 實現(xiàn) 序列化 接口 -->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
        <!-- genenat entity時,生成toString -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
        <!-- optional,旨在創(chuàng)建class時铐炫,對注釋進行控制 -->
        <!--1:配置文件路徑-->
        <commentGenerator type="mybatis.config.CommentGenerator">
        </commentGenerator>
        <!--jdbc的數(shù)據(jù)庫連接 -->
        <jdbcConnection
                driverClass="${jdbc.driverClass}"
                connectionURL="${jdbc.connectionURL}"
                userId="${jdbc.userId}"
                password="${jdbc.password}">
        </jdbcConnection>
        <!-- 非必需垒手,類型處理器,在數(shù)據(jù)庫類型和java類型之間的轉(zhuǎn)換控制-->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- Model模型生成器,用來生成含有主鍵key的類倒信,記錄類 以及查詢Example類
            targetPackage     指定生成的model生成所在的包名
            targetProject     指定在該項目下所在的路徑
        -->

        <!--2:對應數(shù)據(jù)庫生成的實體類路徑-->
        <javaModelGenerator targetPackage="mybatis.entity"
                            targetProject="src/main/java">
            <!-- 是否允許子包科贬,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="false"/>
            <!-- 是否對model添加 構(gòu)造函數(shù) -->
            <property name="constructorBased" value="false"/>
            <!-- 是否對類CHAR類型的列的數(shù)據(jù)進行trim操作 -->
            <property name="trimStrings" value="true"/>
            <!-- 建立的Model對象是否 不可改變  即生成的Model對象不會有 setter方法,只有構(gòu)造方法 -->
            <property name="immutable" value="false"/>
            <!--2.1:指定生成的實體繼承此實體類-->
            <!--<property name="rootClass" value="com.building.cloudclientuser.base.MybatisBaseModel"/>-->
        </javaModelGenerator>

        <!--Mapper映射文件生成所在的目錄 為每一個數(shù)據(jù)庫的表生成對應的SqlMap文件 -->

        <!--3:對應接口生成的xml文件路徑-->
        <sqlMapGenerator targetPackage="myBatisMapper"
                         targetProject="src/main/resources/">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>

        <!-- 客戶端代碼鳖悠,生成易于使用的針對Model對象和XML配置文件 的代碼
                type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper對象
                type="MIXEDMAPPER",生成基于注解的Java Model 和相應的Mapper對象
                type="XMLMAPPER",生成SQLMap XML文件和獨立的Mapper接口
        -->

        <!--4:對應生成的數(shù)據(jù)庫操作接口類文件路徑-->
        <javaClientGenerator targetPackage="mybatis.dao"
                             targetProject="src/main/java" type="XMLMAPPER">
            <property name="enableSubPackages" value="true"/>
            <!--4.1:指定生成的接口繼承此接口-->
            <!--<property name="rootInterface" value="com.building.cloudclientuser.base.MybatisBaseDao"/>-->
        </javaClientGenerator>

        <!--指定User會查詢到mysql默認數(shù)據(jù)庫中的user表,設(shè)置 catalog 指定數(shù)據(jù)庫-->
        <table tableName="student" mapperName="StudentDao" catalog="mybatis" delimitIdentifiers="true"
               domainObjectName="StudentModel"  enableCountByExample="false"
               enableUpdateByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" selectByExampleQueryId="false">
            <property name="ignoreQualifiersAtRuntime" value="true"/>
            <!-- 下面子屬性是保持數(shù)據(jù)庫與實體類字段名一致性 -->
            <property name="useActualColumnNames" value="true"/>
        </table>
    </context>
</generatorConfiguration>
#mysql驅(qū)動的路徑
jdbc.driverLocation=/Users/apple/Tomcat/apache-tomcat-9.0.14/webapps/ROOT/WEB-INF/lib/mysql-connector-java-5.1.6.jar
jdbc.driverClass=com.mysql.cj.jdbc.Driver
#根據(jù)自己的地址修改
jdbc.connectionURL=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&useSSL=false&useServerPrepStmts=true&cachePrepStmts=true
jdbc.userId=root
jdbc.password=********

3:CommentGenerator竞穷,用來讀取sql數(shù)據(jù)庫的屬性等

package mybatis.config;

import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.InnerClass;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.internal.DefaultCommentGenerator;

import org.mybatis.generator.api.dom.java.Field;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

// 注釋生成 會獲取到mysql數(shù)據(jù)庫字段注釋
public class CommentGenerator extends DefaultCommentGenerator {
    private Properties properties;
    private Properties systemPro;
    private boolean suppressDate;
    private boolean suppressAllComments;
    private String currentDateStr;

    public CommentGenerator() {
        super();
        properties = new Properties();
        systemPro = System.getProperties();
        suppressDate = false;
        suppressAllComments = false;
        currentDateStr = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date());
    }

    public void addFieldComment(Field field, IntrospectedTable introspectedTable,
                                IntrospectedColumn introspectedColumn) {
        if (suppressAllComments) {
            return;
        }
        StringBuilder sb = new StringBuilder();
        field.addJavaDocLine("/**");
        sb.append(" * ");
        sb.append(introspectedColumn.getRemarks());
        field.addJavaDocLine(sb.toString().replace("\n", " "));
        field.addJavaDocLine(" */");
    }

    public void addFieldComment(Field field, IntrospectedTable introspectedTable) {

    }

    public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {

    }

    public void addGetterComment(Method method, IntrospectedTable introspectedTable,
                                 IntrospectedColumn introspectedColumn) {

    }

    public void addSetterComment(Method method, IntrospectedTable introspectedTable,
                                 IntrospectedColumn introspectedColumn) {

    }

    public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {

    }

    public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {

    }
}

4:創(chuàng)建啟動類MyBatisGeneratorRun

package mybatis.config;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

// 自動生成插件啟動類
public class MyBatisGeneratorRun {

    public static void main(String[] args) throws Exception{
        MyBatisGeneratorRun app = new MyBatisGeneratorRun();
        System.out.println(app.getClass().getResource("/").getPath());
        app.generator();
        System.out.println(System.getProperty("user.dir"));
    }
    public void generator() throws Exception{
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("myBatis/generator.config.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(resourceAsStream);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
        for(String warning:warnings){
            System.out.println(warning);
        }
    }
}

5:運行MyBatisGeneratorRun類唐责,生成實體類與映射文件

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瘾带,隨后出現(xiàn)的幾起案子鼠哥,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件朴恳,死亡現(xiàn)場離奇詭異抄罕,居然都是意外死亡,警方通過查閱死者的電腦和手機于颖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進店門呆贿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人森渐,你說我怎么就攤上這事做入。” “怎么了同衣?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵竟块,是天一觀的道長。 經(jīng)常有香客問我耐齐,道長浪秘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任埠况,我火速辦了婚禮耸携,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辕翰。我一直安慰自己夺衍,他們只是感情好,可當我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布金蜀。 她就那樣靜靜地躺著刷后,像睡著了一般的畴。 火紅的嫁衣襯著肌膚如雪渊抄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天丧裁,我揣著相機與錄音护桦,去河邊找鬼。 笑死煎娇,一個胖子當著我的面吹牛二庵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缓呛,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼催享,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了哟绊?” 一聲冷哼從身側(cè)響起因妙,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后攀涵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铣耘,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年以故,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜗细。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡怒详,死狀恐怖炉媒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情棘利,我是刑警寧澤橱野,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站善玫,受9級特大地震影響水援,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜茅郎,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一蜗元、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧系冗,春花似錦奕扣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奔害,卻和暖如春楷兽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背华临。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工芯杀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雅潭。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓揭厚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親扶供。 傳聞我的和親對象是個殘疾皇子筛圆,可洞房花燭夜當晚...
    茶點故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內(nèi)容