????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)依賴包,配置如下:
????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文件净赴,如圖:
內(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類:
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ō)了,如圖:
<!--數(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ù)矿辽。