1.MyBatis逆向簡介 mybatis需要程式員自己撰寫sql陳述句,mybatis官方提供逆向工程,可以針對單表自動生成mybatis執行所需要的代碼(mapper.java、mapper.xml、pojo…),可以讓程式員將更多的精力放在繁雜的業務邏輯上, 1).generator下載
| 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 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="https://www.cnblogs.com/CSAH/p/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="https://www.cnblogs.com/CSAH/p/true" /> <property name="trimStrings" value="https://www.cnblogs.com/CSAH/p/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="https://www.cnblogs.com/CSAH/p/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="https://www.cnblogs.com/CSAH/p/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)可以通過以下方式運行
- 在 命令提示符下 使用XML配置
- 作為具有XML配置的Ant任務
- 作為Maven插件
- 從另一個具有XML配置的Java程式
- 從另一個具有基于Java的配置的Java程式
- 作為Eclipse功能
@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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/156468.html
標籤:Java
上一篇:Java連載125-UDP、TCP概念以及ServerSocket示例
下一篇:插入排序之希爾排序(Java)
