MyBatis逆向工程
MyBatis Generator簡介
MyBatis Generator簡稱MBG,是一個專門為MyBatis架構使用者定制的代碼生成器,可以快速的根據資料庫表生成對應的映射檔案、接口,以及bean類。支援基本的增删改查,以及QBC風格的條件查詢。但是表連接配接、存儲過程等這些複雜sql的定義需要手動編寫;
MBG的搭建
項目目錄結構
![]()
MyBatis逆向工程MyBatis逆向工程MyBatis Generator簡介MBG的搭建待條件複雜查詢
MBG jar包
官方位址:http://www.mybatis.org/generator/
github位址:https://github.com/mybatis/generator/releases
maven位址:
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
pom檔案
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.soft863</groupId>
<artifactId>mbg</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>mbg</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
<!-- MyBatis generator(逆向工程) -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
<!-- log4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
<!-- mysql驅動 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.1</version>
</dependency>
</dependencies>
<build>
<finalName>mbg</finalName>
</build>
</project>
MBG配置檔案
建立MBG配置檔案mbg.xml(這裡我放在的項目的根目錄下);
<?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>
<!--
targetRuntime:指定生成代碼的運作目标
可選值:
MyBatis:可以生成動态WHERE條件的SQL
MyBatis3Simple:隻能生成簡單的CURD
Ibatista2Java2
Ibatista2Java5
-->
<context id="DB2Tables" targetRuntime="MyBatis3Simple">
<!-- 指定如何連接配接到目标資料庫 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/db_echarts"
userId="root"
password="root">
</jdbcConnection>
<!-- Java類型解析器 -->
<javaTypeResolver>
<!-- 是否強制轉換BigDecimals -->
<property name="forceBigDecimals" value="false"></property>
</javaTypeResolver>
<!-- 配置JavaBean的生成政策 -->
<!--
targetPackage:目标包名;
targetProject:目标工程;
-->
<javaModelGenerator targetPackage="com.soft863.mbg.entity" targetProject="./src/main/java">
<property name="enableSubPackages" value="true"></property>
<property name="trimStrings" value="true"></property>
</javaModelGenerator>
<!-- sql映射生成政策 -->
<sqlMapGenerator targetPackage="com.soft863.mbg.dao.mapper" targetProject="./src/main/java">
<property name="enableSubPackages" value="true"></property>
</sqlMapGenerator>
<!--mapper接口的所在位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.soft863.mbg.dao" targetProject="./src/main/java">
<property name="enableSubPackages" value="true"></property>
</javaClientGenerator>
<!-- 根據表建立JavaBean-->
<!--
tableName:表名;
domainObjectName:要生成的類名;
-->
<table tableName="t_goods" domainObjectName="Goods"></table>
<table tableName="t_score" domainObjectName="Score"></table>
</context>
</generatorConfiguration>
測試
說明:
a)testMbg()方法是執行MBG配置檔案的方法,運作該方法,會生成bean、接口、映射檔案;
b)後面兩個方法是測試生成内容的測試方法;
package com.soft863.mbg.test;
import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.BeforeClass;
import org.junit.Test;
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 com.soft863.mbg.dao.GoodsMapper;
import com.soft863.mbg.entity.Goods;
public class TestCase {
/**
* 運作逆向工程配置檔案
* @throws Exception
*/
@Test
public void testMbg() throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("mbg.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);
}
private static SqlSessionFactory ssf = null;
@BeforeClass
public static void beforeClass() {
InputStream is = TestCase.class.getResourceAsStream("/mybatis-config.xml");
ssf = new SqlSessionFactoryBuilder().build(is);
}
/**
* 測試Mybatis3Simple逆向工程生成的功能
*/
@Test
public void testMybatis3Simple() {
SqlSession session = ssf.openSession();
GoodsMapper goodsDao = session.getMapper(GoodsMapper.class);
List<Goods> list = goodsDao.selectAll();
for (Goods goods : list) {
System.out.println(goods.getGoodsid());
}
session.close();
}
}
待條件複雜查詢
項目目錄結構
![]()
MyBatis逆向工程MyBatis逆向工程MyBatis Generator簡介MBG的搭建待條件複雜查詢
使用複雜的條件查詢,要在MBG配置檔案中,<context>标簽的targetRuntime屬性修改為“Mybatis3”,該參數值支援生成複雜的mapper檔案;
注:修改mbg.xml後,在運作執行MBG配置檔案方法前,先把原來生成的所有檔案删掉,防止新生成的檔案覆寫原檔案時發出錯誤;
修改後的<context>标簽,如下:
<context id="DB2Tables" targetRuntime="MyBatis3">
測試
/**
* 測試Mybatis3逆向工程生成的功能
*/
@Test
public void testMybatis3() {
SqlSession session = ssf.openSession();
GoodsMapper goodsDao = session.getMapper(GoodsMapper.class);
/*
* selectByExample():查詢多條記錄,參數為null時,查詢所有記錄,指定參數時,參數是查詢的條件
*/
// 查詢所有記錄
List<Goods> list = goodsDao.selectByExample(null);
for (Goods goods : list) {
System.out.println(goods.getGoodsid());
}
System.out.println("----------------------");
// 根據條件查詢記錄
GoodsExample example = new GoodsExample(); // XxxExample類封裝的查詢條件
Criteria criteria = example.createCriteria(); // Criteria中封裝了一系列的條件拼接方法
criteria.andGoodstotalBetween(0, 100); // 商品數量在0到100之間的商品
/*
* 多個where條件的關系是and時,調用and開頭的方法設定條件即可;
* 如果是 or 的關系,則要新建立一個Criteria對象,設定條件,然後使用example.or(Criteria對象)
* 方法就可以拼接上 or 的條件
*/
Criteria criteria2 = example.createCriteria();
criteria2.andGoodstotalEqualTo(200);
example.or(criteria2);
List<Goods> list2 = goodsDao.selectByExample(example); // 查詢結果
for (Goods goods : list2) {
System.out.println(goods.getGoodsid());
}
session.close();
}