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
(1).<context>
<context>元素用于指定生成一组对象的环境。子元素用于指定要连接的数据库,要生成的对象的类型以及要进行自检的表。
	<!-- <context>元素用于指定生成一组对象的环境。子元素用于指定要连接的数据库,要生成的对象的类型以及要进行自检的表。 -->
<!-- targetRuntime="MyBatis3Simple":生成简单版的CRUD -->
<!-- targetRuntime="MyBatis3":生成复杂版的CRUD -->
<!-- id:此上下文的唯一标识符。该值将在某些错误消息中使用。 -->
<context id="DB2Tables" targetRuntime="MyBatis3">
</context>
 
 
(2).jdbcConnection
该元素用于指定内省表所需的数据库连接的属性。MyBatis Generator使用JDBC的DatabaseMetaData类来发现您在配置中指定的表的属性。每个<context>元素都需要一个<connectionFactory>或<jdbcConnection >元素。
	<!-- 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>元素的可选子元素。
		<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>

  

 
(4).javaModelGenerator
<javaModelGenerator>元素用于定义Java模型生成器的属性。Java模型生成器将构建与自省表匹配的主键类,记录类和“按示例查询”类。此元素是<context>元素的必需子元素。
		<!-- 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客户端接口和类。
		<!-- 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映射器界面
必须至少指定一个<table>元素作为<context>元素的必需子元素。您可以指定无限的表元素。
		<!-- 指定要逆向分析哪些表:根据表要创建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();
}
} }

  

 
 

06、MyBatis 逆向工程的更多相关文章

  1. mybatis0212 mybatis逆向工程 (MyBatis Generator)

    1mybatis逆向工程 (MyBatis Generator) .1什么是mybatis的逆向工程 mybatis官方为了提高开发效率,提高自动对单表生成sql,包括生成 :mapper.xml.m ...

  2. 【JAVA - SSM】之MyBatis逆向工程的使用

    MyBatis逆向工程可以方便的从数据库中将表自动映射到JAVA POJO类,并同时生成Mapper.xml和Mapper接口,方便实用.下面介绍一下逆向工程的使用方法. 使用逆向工程,我们最好是新建 ...

  3. Mybatis 逆向工程

    Mybatis逆向工程: 推荐用Java和XML Configuration的方式生成逆向文件 Java类: package generation; import java.io.File; impo ...

  4. mybatis逆向工程

    一.背景 在实际开发中我们会自己去写mapper映射文件,接口,数据库表对应的实体类,如果需求任务比较少,咱们还可以慢慢的一个一个去写,但是这是不现实的,因为在工作中我们的任务是很多的,这时mybat ...

  5. JAVAEE——Mybatis第二天:输入和输出映射、动态sql、关联查询、Mybatis整合spring、Mybatis逆向工程

    1. 学习计划 1.输入映射和输出映射 a) 输入参数映射 b) 返回值映射 2.动态sql a) If标签 b) Where标签 c) Sql片段 d) Foreach标签 3.关联查询 a) 一对 ...

  6. mybatis框架(7)---mybatis逆向工程

    mybatis逆向工程 ​ 逆向工程的目的就是缩减了我们的开发时间.所谓mybatis逆向工程,就是mybatis会根据我们设计好的数据表,自动生成pojo.mapper以及mapper.xml. 接 ...

  7. 学习笔记01(mybatis逆向工程)

    今天来看看一个常用的小功能,就是mybatis的逆向工程.(数据库是mysql) 什么是逆向工程呢?看名字就知道反方向的一个什么工程! 其实啊,如果是平常我们自己学习实践一些小项目的时候,应该是先瞎写 ...

  8. mybatis逆向工程的注意事项,以及数据库表

    1.选择性更新,如果有新参数就更换成新参数,如果参数是null就不更新,还是原来的参数 2.mybatis使用逆向工程,数据库建表的字段user_id必须用下滑线隔开,这样生成的对象private L ...

  9. IDEA Maven项目的Mybatis逆向工程

    IDEA Maven项目的Mybatis逆向工程 1.配置.pom 如果是在多模块开发下,该文件逆向工程要生成的那个模块下的pom文件. <build> <plugins> & ...

  10. Maven项目下的Mybatis逆向工程

    IDEA Maven项目的Mybatis逆向工程 1.配置.pom 如果是在多模块开发下,该文件逆向工程要生成的那个模块下的pom文件. <build> <plugins> & ...

随机推荐

  1. zookeeper 集群搭建 转

    通过 VMware ,我们安装了三台虚拟机,用来搭建 zookeeper 集群,虚拟机网络地址如下: hostname                      ipaddress           ...

  2. go函数可见性

    可见性 可见性,包内任何变量或函数都是能访问的.包外的话,首字母大写是可导出的,能够被其他包访问或者调用,小写表示是私有的,不能被外部包访问或调用

  3. linux(centos8):为prometheus安装grafana(grafana-7.0.3)

    一,grafana的用途 1,grafana是什么? grafana 是用 go 语言编写的开源应用, 它的主要用途是大规模指标数据的可视化展现 它是现在网络架构/应用分析中最流行的时序数据展示工具 ...

  4. Linux+Nginx/Apache下的PHP exec函数执行Linux命令

    1.php.ini配置文件 打开PHP的配置文件,里面有一行 disable_function 的值,此处记录了禁止运行的函数,在里面将exec和shell_exec.system等函数删除. 2.权 ...

  5. centos7 添加环境变量

    修改/etc/profile文件使其永久性生效,并对所有系统用户生效 PATH=$PATH:/usr/local/php/bin export PATH source /etc/profile

  6. 论文解读《ImageNet Classification with Deep Convolutional Neural Networks》

    这篇论文提出了AlexNet,奠定了深度学习在CV领域中的地位. 1. ReLu激活函数 2. Dropout 3. 数据增强 网络的架构如图所示 包含八个学习层:五个卷积神经网络和三个全连接网络,并 ...

  7. 企业级数据大屏设计如何实现,div+html+echarts

    大屏是什么? 大屏设计是最近比较流行的概念,一般按照功能来分有几种: 1. 可交互的触摸屏,大多运用在互动教学课程或者报告演示现场,用户可结合交互操作来阐述具体内容.设计师需要对交互形式和传达内容作统 ...

  8. 一个Task.Factory.StartNew的错误用法

    同事写了这样一段代码: FactoryStartNew类: using System; using System.Collections.Generic; using System.Linq; usi ...

  9. STM32入门系列-复位程序

    已经对启动文有了大致了解,再来看看系统在复位过程中做了哪些工作.复位程序如下: 1 ; Reset handler 2 3 Reset_Handler PROC 4 5 EXPORT Reset_Ha ...

  10. DateTimeFormatter接替SimpleDateFormat

    java程序猿经常会碰到的一个问题就是日期格式化.当接收参数中有日期或时间,那么就需要与前端商量好其格式,这边我知道是2种:1.时间戳 2.字符串. 先说一下时间戳,这个形势的参数,Java只需new ...