MyBatis反向生成工具
阿新 • • 發佈:2018-12-11
在資料持久層通常我們都要寫大量的程式碼和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都不在話下了