1. 程式人生 > >MyBatis反向生成工具

MyBatis反向生成工具

在資料持久層通常我們都要寫大量的程式碼和xml對映sql語句來將結果集對映到pojo對應的實體類中
而有了反向生成工具之後可以直接自動生成pojo實體類,還有dao中的介面和mapper對映檔案
大大減少了資料訪問層的工作量

這裡介紹一下反向生成工具的使用,還有一些細節的注意事項

目錄結構如下:

在這裡插入圖片描述

很簡單,就是這麼點東西,下面是xml中的配置檔案:generatorConfig.xml
配置檔案中修改一些自己資料庫名或使用者名稱密碼,表明等相關資訊
這裡注意一點,targetRuntime=“MyBatis3” 這個屬性,會生成帶條件的pojo實體類,
如作條件分頁查詢,可以生成相應的Example類,如果不需要條件查詢,可以寫成targetRuntime=“MyBatis3Simple” 這樣就會生成普通的pojo類。
具體Example條件查詢需要用到MajorExample example=new MajorExample();
Criteria criteria = example.createCriteria(); 這裡就不作具體解釋了。

<?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>
	<context id="testTables" targetRuntime="MyBatis3">
		<commentGenerator>
			<!-- 是否去除自動生成的註釋 true:是 : false:否 -->
			<property name="suppressAllComments" value="true" />
		</commentGenerator>
		<!--資料庫連線的資訊:驅動類、連線地址、使用者名稱、密碼 -->
		<jdbcConnection driverClass="com.mysql.jdbc.Driver"
			connectionURL="jdbc:mysql://localhost:3306/stumanager" userId="root"
			password="hx123">
		</jdbcConnection>
		<!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
			connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg" 
			userId="yycg"
			password="yycg">
		</jdbcConnection> -->

		<!-- 預設false,把JDBC DECIMAL 和 NUMERIC 型別解析為 Integer,為 true時把JDBC DECIMAL 和 
			NUMERIC 型別解析為java.math.BigDecimal -->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>

		<!-- targetProject:生成PO類的位置 -->
		<javaModelGenerator targetPackage="pojo"
			targetProject=".\src">
			<!-- enableSubPackages:是否讓schema作為包的字尾 -->
			<property name="enableSubPackages" value="false" />
			<!-- 從資料庫返回的值被清理前後的空格 -->
			<property name="trimStrings" value="true" />
		</javaModelGenerator>
        <!-- targetProject:mapper對映檔案生成的位置 -->
		<sqlMapGenerator targetPackage="dao.mapper" 
			targetProject=".\src">
			<!-- enableSubPackages:是否讓schema作為包的字尾 -->
			<property name="enableSubPackages" value="false" />
		</sqlMapGenerator>
		<!-- targetPackage:mapper介面生成的位置 -->
		<javaClientGenerator type="XMLMAPPER"
			targetPackage="dao" 
			targetProject=".\src">
			<!-- enableSubPackages:是否讓schema作為包的字尾 -->
			<property name="enableSubPackages" value="false" />
		</javaClientGenerator>
		<!-- 指定資料庫表 -->
		<table tableName="user">
			<!-- 是否啟用跟欄位名一樣的pojo屬性名 -->
			<property name="useActualColumnNames" value="true"/>
		</table>
		<table tableName="role">
			<property name="useActualColumnNames" value="true"/>
		</table>
		<table tableName="post">
			<property name="useActualColumnNames" value="true"/>
		</table>
		<table tableName="classtab">
			<property name="useActualColumnNames" value="true"/>
		</table>
	</context>
</generatorConfiguration>

修改完配置資訊之後,可以直接執行java檔案了



import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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

public class GeneratorSqlmap {

	public void generator() throws Exception{

		List<String> warnings = new ArrayList<String>();
		boolean overwrite = true;
		//指定 逆向工程配置檔案
		File configFile = new File("generatorConfig.xml"); 
		ConfigurationParser cp = new ConfigurationParser(warnings);
		Configuration config = cp.parseConfiguration(configFile);
		DefaultShellCallback callback = new DefaultShellCallback(overwrite);
		MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
				callback, warnings);
		myBatisGenerator.generate(null);

	} 
	public static void main(String[] args) throws Exception {
		try {
			GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
			generatorSqlmap.generator();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

}

右鍵run一下,生成相應的介面,對映檔案和實體類(需要重新整理一下,refresh)

在這裡插入圖片描述

生成完之後將這些檔案拷貝你的工程裡面了。是不是很方便呢。

這裡順便介紹一下帶條件的查詢寫法。
查詢條件被封裝到了工具類SearchCondition裡

public PageInfo<Major> getMajorListByConditions(Integer pageIndex, SearchCondition searchCondition) {
		//分頁外掛開始分頁
		PageHelper.startPage(pageIndex, 4);
		MajorExample example=new MajorExample();
		//建立Criteria物件
		Criteria criteria = example.createCriteria();
		//條件滿足的情況下,新增條件到example裡
		if(searchCondition.getCid()!=null&&searchCondition.getCid()!=-1){
			criteria.andCidEqualTo(searchCondition.getCid());
		}
		if(StringUtils.isNotBlank(searchCondition.getMname())){
			criteria.andMnameLike("%"+searchCondition.getMname()+"%");
		}
		if(searchCondition.getCredit1()!=null){
			criteria.andCreditGreaterThanOrEqualTo(searchCondition.getCredit1());
		}
		if(searchCondition.getCredit2()!=null){
			criteria.andCreditLessThanOrEqualTo(searchCondition.getCredit2());
		}
		//通過條件獲得List
		List<Major> list = majorMapper.selectByExample(example);
		//迴圈遍歷作連表查詢,封裝連表資訊,這裡需要手動在pojo實體類裡新增一個College物件,並加入get/set方法
		for(Major major:list){
			College college = collegeMapper.selectByPrimaryKey(major.getCid());
			major.setCollege(college);
		}
		//返回分頁外掛工具PageInfo
		PageInfo<Major> pageInfo=new PageInfo<Major>(list, 4);
		return pageInfo;
	}

介紹完畢,反向工具可以減少很大的工作量,用習慣之後普通的crud都不在話下了