mybatis-generator自動(dòng)生成Dao鼠冕、Model添寺、Mapping

????Mybatis屬于半自動(dòng)ORM,在使用這個(gè)框架中懈费,工作量最大的就是書寫Mapping的映射文件计露,由于手動(dòng)書寫很容易出錯(cuò),我們可以利用Mybatis-Generator來(lái)幫我們自動(dòng)生成文件。

? ? 研究了一下下票罐,發(fā)現(xiàn)mybatis-generator有幾種配置及使用方式叉趣,下面介紹一下我選擇的使用方式,以生成一個(gè)verCode類為例:

1该押、首先疗杉,需要用到的依賴有:mysql-connector-java,mybatis-generator-core蚕礼。

????本人使用的是maven構(gòu)建乡数,首先需要在pom.xml文件添加相關(guān)依賴包,配置如下:

圖1?

????dependencies中添加:

```

????<dependency>

????? <groupId>mysql</groupId>

????? <artifactId>mysql-connector-java</artifactId>

????? <version>5.1.43</version>

????? <!--生命周期-->

????? <scope>runtime</scope>

????</dependency>

? ? <dependency>

????????<groupId>org.mybatis.generator</groupId>

????????<artifactId>mybatis-generator-core</artifactId>

????????<version>1.3.5</version>

????</dependency>

```


2闻牡、在resources下添加mbg.xml文件净赴,如圖:

圖2

內(nèi)容如下:

<?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">

? <!-- 配置數(shù)據(jù)庫(kù)連接信息 -->

? <context id="DB2Tables" targetRuntime="MyBatis3">

? ? ? <!-- 取消生成注釋 -->

? ? ? ? <property name="suppressAllComments" value="true" />

? ? ? <jdbcConnection driverClass="com.mysql.jdbc.Driver"

? ? ? ? connectionURL="jdbc:mysql://127.0.0.1:3306/xxx" userId="root"

? ? ? ? password="123456">

? ? ? <!--生成數(shù)字時(shí) 是否強(qiáng)制使用 bigdecimal 類-->


? ? ? ? <property name="forceBigDecimals" value="false" />

? ? ? <!-- 指定javaBean的生成位置 -->

? ? ? <javaModelGenerator targetPackage="com.lym.entity"

? ? ? ? targetProject=".\src\main\java">

? ? ? ? <property name="enableSubPackages" value="true" />

? ? ? ? <property name="trimStrings" value="true" />

? ? ? <!-- 指定 mapper 映射文件生成的位置 -->

? ? ? <sqlMapGenerator targetPackage="mapper" targetProject=".\src\main\resources">

? ? ? ? <property name="enableSubPackages" value="true" />

? ? ? <!-- 指定dao接口生成的位置,mapper接口 -->

? ? ? <javaClientGenerator type="XMLMAPPER"

? ? ? ? targetPackage="com.lym.dao" targetProject=".\src\main\java">

? ? ? ? <property name="enableSubPackages" value="true" />

? ? ? <!-- 表名? ? 實(shí)體類名 -->

? ? ? <table tableName="vercode" domainObjectName="verCode">


上面配置文件中的:? <table tableName="vercode" domainObjectName="verCode"> 的?tableName是數(shù)據(jù)庫(kù)中的表名,domainObjectName為項(xiàng)目中的model名罩润。每次需要生成某張表的時(shí)候玖翅,就將表名和實(shí)體類名換成需要生成的對(duì)象。


3割以、配置util類:

圖3

package com.lym.util;

import org.mybatis.generator.api.MyBatisGenerator;

import org.mybatis.generator.api.ProgressCallback;

import org.mybatis.generator.api.VerboseProgressCallback;

import org.mybatis.generator.config.Configuration;

import org.mybatis.generator.config.xml.ConfigurationParser;

import org.mybatis.generator.exception.InvalidConfigurationException;

import org.mybatis.generator.exception.XMLParserException;

import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;

import java.io.IOException;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

/**

* mybatis generator代碼自動(dòng)生成工具

* @author mi

*

*/

public class MybatisGenerator {

public static void main(String[] args)throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException{

List warnings =new ArrayList();

? ? ? boolean overwrite =true;

? ? ? File configFile =new File("src/main/resources/mbg.xml");

? ? ? ConfigurationParser cp =new ConfigurationParser(warnings);

? ? ? Configuration config = cp.parseConfiguration(configFile);

? ? ? DefaultShellCallback callback =new DefaultShellCallback(overwrite);

? ? ? MyBatisGenerator myBatisGenerator =new MyBatisGenerator(config, callback, warnings);

? ? ? ProgressCallback progressCallback =new VerboseProgressCallback();

//? ? myBatisGenerator.generate(null);

? ? ? myBatisGenerator.generate(progressCallback);

? ? ? System.out.println("successful");

? }

}


4金度、注意:需要配置spring-mybatis.xml,我使用的是Druid連接的严沥,也可以使用c3p0等等猜极,我就不詳細(xì)說(shuō)了,如圖:

圖4
圖5


圖6

<!--數(shù)據(jù)庫(kù)連接池druid-->

? <groupId>com.alibaba

? <artifactId>druid

? <version>1.1.10

</dependency>


<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

? ? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"

? ? ? xsi:schemaLocation="

http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

? ? ? http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

? ? <!-- 配置整合mybatis過(guò)程 -->

? ? <!-- 1消玄、配置數(shù)據(jù)庫(kù)相關(guān)參數(shù)properties的屬性:${url}-->

? ? <context:property-placeholder location="classpath:jdbc.properties"/>

? ? <!-- 2跟伏、配置數(shù)據(jù)庫(kù)連接池 -->

? ? <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">

? ? ? ? <!-- 基本屬性 url、user翩瓜、password -->

? ? ? ? <property name="url" value="${jdbc.url2}" />

? ? ? ? <property name="username" value="${jdbc.user}" />

? ? ? ? <property name="password" value="${jdbc.password2}" />

? ? ? ? <!-- 配置初始化大小受扳、最小、最大 -->

? ? ? ? <property name="initialSize" value="1" />

? ? ? ? <property name="minIdle" value="1" />

? ? ? ? <property name="maxActive" value="20" />

? ? ? ? <!-- 配置獲取連接等待超時(shí)的時(shí)間 -->

? ? ? ? <property name="maxWait" value="60000" />

? ? ? ? <!-- 配置間隔多久才進(jìn)行一次檢測(cè)兔跌,檢測(cè)需要關(guān)閉的空閑連接勘高,單位是毫秒 -->

? ? ? ? <property name="timeBetweenEvictionRunsMillis" value="60000" />

? ? ? ? <!-- 配置一個(gè)連接在池中最小生存的時(shí)間,單位是毫秒 -->

? ? ? ? <property name="minEvictableIdleTimeMillis" value="300000" />

? ? ? ? <property name="validationQuery" value="SELECT 'x'" />

? ? ? ? <property name="testWhileIdle" value="true" />

? ? ? ? <property name="testOnBorrow" value="false" />

? ? ? ? <property name="testOnReturn" value="false" />

? ? ? ? <!-- 打開PSCache坟桅,并且指定每個(gè)連接上PSCache的大小 -->

? ? ? ? <property name="poolPreparedStatements" value="true" />

? ? ? ? <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />

? ? ? ? <!-- 配置監(jiān)控統(tǒng)計(jì)攔截的filters -->

? ? ? ? <property name="filters" value="stat" />

? ? <!-- 3华望、配置SqlSessionFactory對(duì)象(mybaits與spring整合配置) -->

? ? <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

? ? ? ? <!-- 注入數(shù)據(jù)庫(kù)連接池 -->

? ? ? ? <property name="dataSource" ref="dataSource"/>

? ? ? ? <!-- 配置MyBatis全局配置文件:mybaits-congfig.xml -->

? ? ? ? <property name="configLocation" value="classpath:conf/mybatis-config.xml"/>

? ? ? ? <!-- 掃描entity包 使用別名 -->

? ? ? ? <property name="typeAliasesPackage" value="com.lym.entity"/>

? ? ? ? <!-- 掃描sql配置文件mapper -->

? ? ? ? <property name="mapperLocations" value="classpath:mapper/*.xml"/>

? ? <!-- 4、配置掃描DAO接口包仅乓,動(dòng)態(tài)實(shí)現(xiàn)dao接口赖舟,注入spring容器中 -->

? ? <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" >

? ? ? ? <!-- 注入SqlSessionFactory -->

? ? ? ? <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>

? ? ? ? <!-- 給出掃描DAO接口包 -->

? ? ? ? <property name="basePackage" value="com.lym.dao"/>

</beans>


5、到此為止方灾,所有的配置已完畢建蹄,運(yùn)行?MybatisGenerator?,就能得到verCode的實(shí)體類裕偿,mapper洞慎,和dao了。

這種方法好的地方就是:配置好之后很方便嘿棘,每次只需要修改mgb.xml最后一行的兩個(gè)參數(shù)劲腿,再運(yùn)行一下MybatisGenerator就行了。

缺點(diǎn)是:需要先搭建好項(xiàng)目環(huán)境鸟妙,并且conf焦人、mapper、dao重父、entity文件里面都需要有東西花椭。也就是說(shuō),在第一次使用mgb文件逆向生成的時(shí)候房午,需要先在這些文件夾里面放一些數(shù)據(jù)矿辽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市郭厌,隨后出現(xiàn)的幾起案子袋倔,更是在濱河造成了極大的恐慌,老刑警劉巖折柠,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宾娜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡扇售,警方通過(guò)查閱死者的電腦和手機(jī)前塔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)承冰,“玉大人嘱根,你說(shuō)我怎么就攤上這事∠镄福” “怎么了该抒?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)顶燕。 經(jīng)常有香客問(wèn)我凑保,道長(zhǎng),這世上最難降的妖魔是什么涌攻? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任欧引,我火速辦了婚禮,結(jié)果婚禮上恳谎,老公的妹妹穿的比我還像新娘芝此。我一直安慰自己憋肖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布婚苹。 她就那樣靜靜地躺著岸更,像睡著了一般。 火紅的嫁衣襯著肌膚如雪膊升。 梳的紋絲不亂的頭發(fā)上怎炊,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音廓译,去河邊找鬼评肆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛非区,可吹牛的內(nèi)容都是我干的瓜挽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼征绸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼秸抚!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起歹垫,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤剥汤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后排惨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吭敢,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年暮芭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鹿驼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辕宏,死狀恐怖畜晰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瑞筐,我是刑警寧澤凄鼻,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站聚假,受9級(jí)特大地震影響块蚌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜膘格,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一峭范、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瘪贱,春花似錦纱控、人聲如沸辆毡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)舶掖。三九已至,卻和暖如春唾那,著一層夾襖步出監(jiān)牢的瞬間访锻,已是汗流浹背褪尝。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工闹获, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人河哑。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓避诽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親璃谨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沙庐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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