1.MyBatis逆向簡介 mybatis需要程式員自己編寫sql語句,mybatis官方提供逆向工程,可以針對單表自動生成mybatis執行所需要的代碼(mapper.java、mapper.xml、pojo…),可以讓程式員將更多的精力放在繁雜的業務邏輯上。 1).generator下載 2). ...
1.MyBatis逆向簡介 mybatis需要程式員自己編寫sql語句,mybatis官方提供逆向工程,可以針對單表自動生成mybatis執行所需要的代碼(mapper.java、mapper.xml、pojo…),可以讓程式員將更多的精力放在繁雜的業務邏輯上。 1).generator下載 2).generator文檔 3).jar包
ehcache-core-2.6.8.jar log4j.jar mybatis-3.4.1.jar mybatis-ehcache-1.0.3.jar mybatis-generator-core-1.3.2.jar mysql-connector-java-5.1.37-bin.jar ojdbc6.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.2.jar |
<!-- <context>元素用於指定生成一組對象的環境。子元素用於指定要連接的資料庫,要生成的對象的類型以及要進行自檢的表。 --> <!-- targetRuntime="MyBatis3Simple":生成簡單版的CRUD --> <!-- targetRuntime="MyBatis3":生成複雜版的CRUD --> <!-- id:此上下文的唯一標識符。該值將在某些錯誤消息中使用。 --> <context id="DB2Tables" targetRuntime="MyBatis3"> </context>(2).jdbcConnection 該元素用於指定內省表所需的資料庫連接的屬性。MyBatis Generator使用JDBC的DatabaseMetaData類來發現您在配置中指定的表的屬性。每個<context>元素都需要一個<connectionFactory>或<jdbcConnection >元素。 參考文檔:http://mybatis.org/generator/configreference/jdbcConnection.html
<!-- jdbcConnection:指定如何連接到目標資料庫 --> <!-- MyBatis Generator使用JDBC的DatabaseMetaData類來發現您在配置中指定的表的屬性。--> <!-- 每個<context>元素都需要一個<connectionFactory>或<jdbcConnection >元素。 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mybatis?allowMultiQueries=true" userId="root" password="root123"> </jdbcConnection>
(3).javaTypeResolver <javaTypeResolver>元素用於定義Java Type Resolver的屬性。Java類型解析器用於根據資料庫列信息計算Java類型。預設的Java Type Resolver嘗試通過儘可能替換Integral類型(Long,Integer,Short等)來使JDBC DECIMAL和NUMERIC類型更易於使用。如果這種行為是不希望的,請將屬性“ forceBigDecimals”設置為“ true”。如果您想要不同於預設行為的行為,也可以替換自己的實現。此元素是<context>元素的可選子元素。 參考文檔:http://mybatis.org/generator/configreference/javaTypeResolver.html
<javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver>
(4).javaModelGenerator <javaModelGenerator>元素用於定義Java模型生成器的屬性。Java模型生成器將構建與自省表匹配的主鍵類,記錄類和“按示例查詢”類。此元素是<context>元素的必需子元素。 參考文檔:http://mybatis.org/generator/configreference/javaModelGenerator.html
<!-- javaModelGenerator:指定javaBean的生成策略 --> <!-- targetProject:生成目標包名 --> <!-- targetProject:目標工程 --> <!-- http://mybatis.org/generator/configreference/javaModelGenerator.html --> <javaModelGenerator targetPackage="com.atguigu.mybatis.bean" targetProject=".\src"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaModelGenerator>
(5).sqlMapGenerator 該元素用於定義SQL映射生成器的屬性。SQL Map Generator為每個自省表構建MyBatis格式的SQL map XML文件。 僅當您選擇的javaClientGenerator需要XML時,此元素才是<context>元素的必需子元素。 基於MyBatis Dynamic SQL的運行時不會生成XML,並且如果指定了該元素,則會忽略該元素。 如果未指定javaClientGenerator,則適用以下規則:
- 如果指定sqlMapGenerator,則MBG將僅生成SQL映射XML文件和模型類。
- 如果您未指定sqlMapGenerator,則MBG將僅生成模型類。
<!-- sqlMapGenerator:sql映射生成策略; --> <sqlMapGenerator targetPackage="com.atguigu.mybatis.dao" targetProject=".\conf"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator>
(6).javaClientGenerator 該元素用於定義Java客戶端生成器的屬性。 Java客戶端生成器構建Java介面和類,以方便使用所生成的Java模型和XML映射文件。對於MyBatis,生成的對象採用mapper介面的形式。 該元素是<context>元素的可選子元素。如果未指定此元素,則MyBatis Generator(MBG)將不會生成Java客戶端介面和類。 參考文檔:http://mybatis.org/generator/configreference/javaClientGenerator.html
<!-- javaClientGenerator:指定mapper介面所在的位置 --> <!-- http://mybatis.org/generator/configreference/javaClientGenerator.html --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.atguigu.mybatis.dao" targetProject=".\src"> <property name="enableSubPackages" value="true" /> </javaClientGenerator>
(7).table <table>元素用於選擇資料庫中用於自省的表。選定的表將導致為每個表生成以下對象:
- MyBatis格式化的SQL Map文件
- 構成表“模型”的一組類,包括:
- 一個與表的主鍵匹配的類(如果表具有主鍵)。
- 一個類,用於匹配表中不在主鍵中的欄位和非BLOB欄位。如果有,該類將擴展主鍵。
- 一個用於保存表中任何BLOB欄位(如果有)的類。該類將擴展前兩個類之一,具體取決於表的配置。
- 一個用於在不同的“按示例”方法(selectByExample,deleteByExample)中生成動態where子句的類。
- (可選)MyBatis映射器界面
<!-- 指定要逆向分析哪些表:根據表要創建javaBean --> <!-- http://mybatis.org/generator/configreference/table.html --> <table tableName="tbl_dept" domainObjectName="Department"></table> <table tableName="tbl_employee" domainObjectName="Employee"></table>
2).運行Generator (1).選擇MBG運行方式 MyBatis Generator(MBG)可以通過以下方式運行 每種方法在鏈接頁面上都有詳細說明。 原版: 中文翻譯: (2).MBG XML運行方式 ①.生成所需文件XML|JAVA
@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); }
②.獲取ID(在Simple情況下)
@Test public void testSimple() throws IOException { SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession openSession = sqlSessionFactory.openSession(); try { EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); List<Employee> list = mapper.selectAll(); for (Employee employee : list) { System.out.println(employee.getId()); } }finally { openSession.close(); } }
③.拼接查詢條件(在MyBatis3情況下)
@Test public void testMyBatis3() throws IOException{ SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession openSession = sqlSessionFactory.openSession(); try{ EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); //1.查詢所有ID List<Employee> emps = mapper.selectByExample(null); // for(Employee employee:emps) { // System.out.println(employee.getId()); // } //2.查詢查詢員工名字中有e字母的和員工性別是1的 封裝員工查詢條件的example EmployeeExample example = new EmployeeExample(); //創建一個Criteria,這個Criteria就是拼裝查詢條件; Criteria criteria = example.createCriteria(); criteria.andLastNameLike("%e%"); criteria.andGenderEqualTo("1"); Criteria criteria2 = example.createCriteria(); criteria2.andEmailLike("%e"); example.or(criteria2); List<Employee> list = mapper.selectByExample(example); for(Employee employee:list) { System.out.println(employee.getId()); } }finally{ openSession.close(); } }
④.完整Test代碼
package com.atguigu.mybatis.test; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.jupiter.api.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.atguigu.mybatis.bean.Employee; import com.atguigu.mybatis.bean.EmployeeExample; import com.atguigu.mybatis.bean.EmployeeExample.Criteria; import com.atguigu.mybatis.dao.EmployeeMapper; class MyBatisTest { public SqlSessionFactory getSqlSessionFactory() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); return new SqlSessionFactoryBuilder().build(inputStream); } @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); } // @Test // public void testSimple() throws IOException { // SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); // SqlSession openSession = sqlSessionFactory.openSession(); // try { // EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); // List<Employee> list = mapper.selectAll(); // for (Employee employee : list) { // System.out.println(employee.getId()); // } // }finally { // openSession.close(); // } // } @Test public void testMyBatis3() throws IOException{ SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession openSession = sqlSessionFactory.openSession(); try{ EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); //1.查詢所有ID List<Employee> emps = mapper.selectByExample(null); // for(Employee employee:emps) { // System.out.println(employee.getId()); // } //2.查詢查詢員工名字中有e字母的和員工性別是1的 封裝員工查詢條件的example EmployeeExample example = new EmployeeExample(); //創建一個Criteria,這個Criteria就是拼裝查詢條件; Criteria criteria = example.createCriteria(); criteria.andLastNameLike("%e%"); criteria.andGenderEqualTo("1"); Criteria criteria2 = example.createCriteria(); criteria2.andEmailLike("%e"); example.or(criteria2); List<Employee> list = mapper.selectByExample(example); for(Employee employee:list) { System.out.println(employee.getId()); } }finally{ openSession.close(); } } }
參考文檔:https://github.com/mybatis/generator http://mybatis.org/generator/quickstart.html