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
|
4).MBG使用步骤
(1).编写MBG的配置文件(重要几处配置)
①.jdbcConnection:配置数据库连接信息
②.javaModelGenerator:配置javaBean的生成策略
③.sqlMapGenerator:配置sql映射文件生成策略
④.javaClientGenerator:配置Mapper接口的生成策略
⑤.table:配置要逆向解析的数据表;tableName:表名;domainObjectName:对应的javaBean名
(2).运行代码生成器生成代码
5).MBG注意
(1).targetRuntime=“MyBatis3“可以生成带条件的增删改查
(2).targetRuntime=“MyBatis3Simple“可以生成基本的增删改查
(3).如果再次生成,建议将之前生成的数据删除,避免xml向后追加内容出现的问题。
2.Generator
1).配置Generator
http://mybatis.org/generator/configreference/xmlconfig.html
(1).
参考文档: http://mybatis.org/generator/configreference/context.html
(2).jdbcConnection
该元素用于指定内省表所需的数据库连接的属性。MyBatis Generator使用JDBC的DatabaseMetaData类来发现您在配置中指定的表的属性。每个元素都需要一个或元素。
参考文档: http://mybatis.org/generator/configreference/jdbcConnection.html
(3).javaTypeResolver
参考文档: http://mybatis.org/generator/configreference/javaTypeResolver.html
(4).javaModelGenerator
参考文档: http://mybatis.org/generator/configreference/javaModelGenerator.html
(5).sqlMapGenerator
该元素用于定义SQL映射生成器的属性。SQL Map Generator为每个自省表构建MyBatis格式的SQL map XML文件。
仅当您选择的javaClientGenerator需要XML时,此元素才是元素的必需子元素。
基于MyBatis Dynamic SQL的运行时不会生成XML,并且如果指定了该元素,则会忽略该元素。
如果未指定javaClientGenerator,则适用以下规则:
- 如果指定sqlMapGenerator,则MBG将仅生成SQL映射XML文件和模型类。
- 如果您未指定sqlMapGenerator,则MBG将仅生成模型类。
参考文档: http://mybatis.org/generator/configreference/sqlMapGenerator.html
(6).javaClientGenerator
该元素用于定义Java客户端生成器的属性。
Java客户端生成器构建Java接口和类,以方便使用所生成的Java模型和XML映射文件。对于MyBatis,生成的对象采用mapper接口的形式。
该元素是元素的可选子元素。如果未指定此元素,则MyBatis Generator(MBG)将不会生成Java客户端接口和类。
参考文档: http://mybatis.org/generator/configreference/javaClientGenerator.html
(7).table
2).运行Generator
(1).选择MBG运行方式
MyBatis Generator(MBG)可以通过以下方式运行
- 在 命令提示符下 使用XML配置
- 作为具有XML配置的Ant任务
- 作为Maven插件
- 从另一个具有XML配置的Java程序
- 从另一个具有基于Java的配置的Java程序
- 作为Eclipse功能
每种方法在链接页面上都有详细说明。
原版:
中文翻译:
(2).MBG XML运行方式
①.生成所需文件XML|JAVA
@Test public void testMbg() throws Exception { Listwarnings = new ArrayList (); 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); Listlist = 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 Listemps = 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 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 { Listwarnings = new ArrayList (); 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 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 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 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