MyBatis从入门到精通(第5章):5.4 Example 介绍
jdk1.8、MyBatis3.4.6、MySQL数据库5.6.45、Eclipse Version: 2019-12 M2 (4.14.0)
MyBatis从入门到精通(第5章):MyBatis代码生成器
在 MBG 的 context 中将 targetRuntime 配置为 MyBatis3 时,MBG 会生成和 Example 相关的对象和方法,这一节就来介绍与 Example 相关的方法。
新建一个针对 country 表相关的 Example MBG 配置文件,新增的配置文件 generatorConfig-country.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>
<classPathEntry location="C:\Users\kangy\.m2\repository\mysql\mysql-connector-java\5.1.45\mysql-connector-java-5.1.45.jar"/> <context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
<property name="javaFileEncoding" value="UTF-8"/> <commentGenerator>
<property name="suppressDate" value="true"/>
<property name="addRemarkComments" value="true"/>
</commentGenerator> <jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/testmybatis"
userId="root"
password="root">
</jdbcConnection> <javaModelGenerator targetPackage="tk.mybatis.simple.model" targetProject="simple\src\main\java">
<property name="trimStrings" value="true" />
</javaModelGenerator> <sqlMapGenerator targetPackage="tk.mybatis.simple.mapper" targetProject="simple\src\main\resources"/> <javaClientGenerator type="XMLMAPPER" targetPackage="tk.mybatis.simple.mapper" targetProject="simple\src\main\java"/> <table tableName="country">
<generatedKey column="id" sqlStatement="MySql"/>
</table>
</context>
</generatorConfiguration>
这个配置是针对 Eclipse 插件进行的,所以如果使用其他方式,请注意修改 targetProject 属性。
上面这个配置中的包名都是按照第 2 章中的规范来写的,因此会和原有的 Country 对象冲突(XML 和 Mapper 接口因为使用 Eclipse 插件,所以不会有冲突)。这种情况下,先生成代码,然后处理不一致的地方。
生成代码后,可以发现 CountryMapper 接口中增加了大量的基础方法, CountryMapper.xml 中也增加了相应的 SQL 语句。
下面通过在原有的 CountryMapperTest 测试类中添加新测试来了解 Example 的相关用法。先通过全面调用 Example 对象中的方法来了解 Example,代码如下。
@Test
public void testExample() {
// 获取 sqlSession
SqlSession sqlSession = getSqlSession();
try {
// 获取 CountryMapper 接口
CountryMapper countryMapper = sqlSession.getMapper(CountryMapper.class);
//创建 Example 对象
CountryExample example = new CountryExample();
//设置排序规则
example.setOrderByClause("id desc, countryname asc");
//设置是否 distinct 去重
example.setDistinct(true);
//创建条件,只能有一个 createCriteria
CountryExample.Criteria criteria = example.createCriteria();
//id >= 1
criteria.andIdGreaterThanOrEqualTo(1);
//id < 4
criteria.andIdLessThan(4);
//countrycode like '%U%'
//最容易出错的地方,注意 like 必须自己写上通配符的位置,不可能默认两边加 %,like 可以是任何情况
criteria.andCountrycodeLike("%U%");
//or 的情况,可以有多个 or
CountryExample.Criteria or = example.or();
//countryname = 中国
or.andCountrynameEqualTo("中国");
//执行查询
List<Country> countryList = countryMapper.selectByExample(example);
printCountryList(countryList);
} finally {
// 不要忘记关闭 sqlSession
sqlSession.close();
}
}
打印控制台
DEBUG [main] - ==> Preparing: select distinct id, countryname, countrycode from country WHERE ( id >= ? and id < ? and countrycode like ? ) or( countryname = ? ) order by id desc, countryname asc
DEBUG [main] - ==> Parameters: 1(Integer), 4(Integer), %U%(String), 中国(String)
TRACE [main] - <== Columns: id, countryname, countrycode
TRACE [main] - <== Row: 3, 俄罗斯, RU
TRACE [main] - <== Row: 2, 美国, US
DEBUG [main] - <== Total: 2
3 俄罗斯 RU
2 美国 US
除了代码中注释的内容,特别需要注意的地方是 or 的方法。当有多个 or 的时候,SQL 语句就是类似 or(...)or(...)这样的 SQL,如果一个 or 都没有,那就只有 example.createCriteria ()中的查询条件。
除了 selectByExample ,与 UPDATE 相关的有两个方法,分别为 updateByExample 和 updateByExampleSelective 。这两个方法的区别是,当对象的属性为空时,第一个方法会将值更新为 null,第二个方法不会更新 null 属性的字段。通过 Example 的方法一般都是批量操作,由于 country 表存在主键 id,不能被批量更新,因此要使用 updateByExampleSelective 进行测试,代码如下。
@Test
public void testUpdateByExampleSelective() {
// 获取 sqlSession
SqlSession sqlSession = getSqlSession();
try {
// 获取 CountryMapper 接口
CountryMapper countryMapper = sqlSession.getMapper(CountryMapper.class);
//创建 Example 对象
CountryExample example = new CountryExample();
//创建条件,只能有一个 createCriteria
CountryExample.Criteria criteria = example.createCriteria();
//更新所有 id > 2 的国家
criteria.andIdGreaterThan(2);
//创建一个要设置的对象
Country country = new Country();
//将国家名字设置为 China
country.setCountryname("China");
//执行查询
countryMapper.updateByExampleSelective(country, example);
//在把符合条件的结果输出查看
printCountryList(countryMapper.selectByExample(example));
} finally {
// 不要忘记关闭 sqlSession
sqlSession.close();
}
}
public void testUpdateByExampleSelective()

除了以上的 Example 方法,还有 deleteByExample 和 countByExample 两个方法,下面测试这两个方法。
@Test
public void testDeleteByExample() {
// 获取 sqlSession
SqlSession sqlSession = getSqlSession();
try {
// 获取 CountryMapper 接口
CountryMapper countryMapper = sqlSession.getMapper(CountryMapper.class);
//创建 Example 对象
CountryExample example = new CountryExample();
//创建条件,只能有一个 createCriteria
CountryExample.Criteria criteria = example.createCriteria();
//删除所有 id > 2 的国家
criteria.andIdGreaterThan(2);
//执行查询
countryMapper.deleteByExample(example);
//使用 countByExample 查询符合条件的数量,因为删除了,所以这里应该是 0
Assert.assertEquals(0, countryMapper.countByExample(example));
} finally {
// 不要忘记关闭 sqlSession
sqlSession.close();
}
}
public void testDeleteByExample
测试代码输出结果如下。

通过上面几个例子,相信大家对 Example 应该已经有所了解,使用 Example 查询能解决大部分复杂的单表操作,从一定程度上能减少工作量。
但是建议在条件很多并且判断很多的情况下,避免使用 Example 查询。这种情况下,使用 XML 方式会更有效。
===================================================================================================================
end
MyBatis从入门到精通(第5章):5.4 Example 介绍的更多相关文章
- MyBatis从入门到精通(第9章):Spring集成MyBatis(下)
MyBatis从入门到精通(第9章):Spring集成MyBatis(下) springmvc执行流程原理 mybatis-spring 可以帮助我们将MyBatis代码无缝整合到Spring中.使 ...
- MyBatis从入门到精通(第9章):Spring集成MyBatis(中)
MyBatis从入门到精通(第9章):Spring集成MyBatis(中) 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法.应该将应用自身的设计和具体 ...
- MyBatis从入门到精通(第9章):Spring集成MyBatis(上)
MyBatis从入门到精通(第9章):Spring集成MyBatis(上) Spring是一个为了解决企业级Web应用开发过程中面临的复杂性,而被创建的一个非常流行的轻量级框架. mybatis-sp ...
- MyBatis从入门到精通(第5章):MyBatis代码生成器
jdk1.8.MyBatis3.4.6.MySQL数据库5.6.45.Eclipse Version: 2019-12 M2 (4.14.0) MyBatis从入门到精通(第5章):MyBatis代码 ...
- MyBatis从入门到精通(第3章):MyBatis注解方式的基本使用
MyBatis 注解方式就是将 SQL 语句直接写在DAO层的接口上. 在黑马录制的2018年双元视频课:\08 SSM整合案例[企业权限管理系统]\07.订单操作 有使用MyBatis注解进行多表 ...
- MyBatis从入门到精通(第6章):MyBatis 高级查询->6.1.2高级结果映射之一对多映射
jdk1.8.MyBatis3.4.6.MySQL数据库5.6.45.IntelliJ IDEA 2019.3.1 本章主要包含的内容为 MyBatis 的高级结果映射,主要处理数据库一对一.一对多的 ...
- MyBatis从入门到精通(第6章):MyBatis 高级查询->6.1.1高级结果映射之一对一映射
jdk1.8.MyBatis3.4.6.MySQL数据库5.6.45.IntelliJ IDEA 2019.2.4 本章主要包含的内容为 MyBatis 的高级结果映射,主要处理数据库一对一.一对多的 ...
- MyBatis从入门到精通(第4章):MyBatis动态SQL【foreach、bind、OGNL用法】
(第4章):MyBatis动态SQL[foreach.bind.OGNL用法] 4.4 foreach 用法 SQL 语句中有时会使用 IN 关键字,例如 id in (1,2,3).可以使用 ${i ...
- MyBatis从入门到精通(第4章):MyBatis动态SQL【if、choose 和 where、set、trim】
(第4章):MyBatis动态SQL[if.choose 和 where.set.trim] MyBatis 的强大特性之一便是它的动态 SQL.MyBatis 3.4.6版本采用了功能强大的OGNL ...
随机推荐
- 130-PHP子类通过类函数访问父类protected修饰的类成员
<?php class father{ //定义father类 //定义protected修饰的成员属性和方法 protected $money=1000000; protected funct ...
- UVALive 4287 SCC-Tarjan 加边变成强连通分量
还是强连通分量的题目,但是这个题目不同的在于,问你最少要添加多少条有向边,使得整个图变成一个强连通分量 然后结论是,找到那些入度为0的点的数目 和 出度为0的点的数目,取其最大值即可,怎么证明嘛... ...
- EUI库 - 9 - 数据集合 - 列表
List 和DataGroup的区别 1 选中一项 会触发 eui.ItemEvent.ITEM_TAP 事件, 2 有选中项的概念,可以设置 List 里的默认选中项 selectedIn ...
- 了解java常用框架
今天我看了一点看起来比较片面的东西,java常用基本床架,并且在网上搜了相关的知识和概括总结,用来继续后期的学习: 1.struts2框架,这是最经典的框架(可以说没有“之一”).可以帮你快速搭建出一 ...
- 大数据高可用集群环境安装与配置(04)——安装JAVA运行环境
Hadoop运行在java环境,所以在安装Hadoop之前,需要安装好jdk 提前下载好jdk安装包(jdk-8u161-linux-x64.tar.gz),将它上传到指定的安装目录当中,然后运行安装 ...
- 字符串匹配之KMP
说明 KMP算法看懂了觉得特别简单,思路很简单,看不懂之前,查各种资料,看的稀里糊涂,即使网上最简单的解释,依然看的稀里糊涂. 我花了半天时间,争取用最短的篇幅大致搞明白这玩意到底是啥. 这里不扯概念 ...
- C++ STD Gems05
find.find_if.find_first_of.mismatch.search.adjacent_find #include <iostream> #include <vect ...
- 驰骋BPM系统-表单引擎-流程引擎 2020年大换装
关键字:驰骋表单引擎,流程引擎,界面升级. 前言概述: 感谢美工与同事们的辛苦工作,ccbpm新年大换装,迎接爱好着,为这阴霾多日的疫情气愤增添一笔光彩. 本次的色系以浅灰色为主,因为ccbpm大 ...
- 2020牛客寒假算法基础集训营4 G音乐鉴赏
题目描述 作为“音乐鉴赏”课的任课老师,你的课程作为刷学分好课一直受到广泛欢迎.但这一学期,学校制定了新的标准,你的课的优秀率(分数超过90分的人数)被限制在10%以下! 为了应对这个调整,你要求所有 ...
- linux搭建mariadb,windows2008搭建iis+php+wordpress
centos ip:192.168.101 windows ip :192.168.102 centos配置: [root@ml ~]# yum -y install mariadb-server # ...