Example类是什么?

Example类指定如何构建一个动态的where子句. 表中的每个non-BLOB列可以被包括在where子句中. 例子是展示此类用法的最好方式.

Example类可以用来生成一个几乎无限的where子句.

Example类包含一个内部静态类 Criteria 包含一个用 anded 组合在where子句中的条件列表. Example类包含一个 List 属性,所有内部类Criteria中的子句会用 ored组合在一起. 使用不同属性的 Criteria 类允许您生成无限类型的where子句.

创建 Criteria 对象 可以使用Example类中的 createCriteria() 或者 or() . 如果 Criteria 对象是用 createCriteria() 创建的,它会自动为 List 属性添加一个 Criteria 对象 - 这使得它更容易写一个简单的where子句, 如果您不需要 or 或者其他几个子句组合的话. 用 or(Criteria criteria) 方法创建 Criteria 对象, 方法里的 criteria 对象会被添加进 Criteria 对象的列表中.

重要 我们推荐您只使用 or() 方法创建 Criteria 对象. 我们相信这种方法使代码更有可读性

如何生成Example类?

mybatis的的配置文件可以使用mybatis-generator工具生成,它就可以帮我们生成example类。 
根据 Mybatis 代码生成工具文档,需要一个配置文件,这里命名为:mbgConfiguration.xml放在 src 目录下. 配置文件内容如下:

    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><!-- 配置mysql 驱动jar包路径.用了绝对路径 --><classPathEntry location="D:\Work\Java\eclipse\workspace\myBatisGenerator\WebContent\WEB-INF\lib\mysql-connector-java-5.1.22-bin.jar" /><context id="yihaomen_mysql_tables" targetRuntime="MyBatis3"><!-- 为了防止生成的代码中有很多注释,比较难看,加入下面的配置控制 --><commentGenerator><property name="suppressAllComments" value="true" /><property name="suppressDate" value="true" /></commentGenerator><!-- 注释控制完毕 --><!-- 数据库连接 --><jdbcConnection driverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf8"userId="root"password="password"></jdbcConnection><javaTypeResolver ><property name="forceBigDecimals" value="false" /></javaTypeResolver><!-- 数据表对应的model 层  --><javaModelGenerator targetPackage="com.yihaomen.model" targetProject="src"><property name="enableSubPackages" value="true" /><property name="trimStrings" value="true" /></javaModelGenerator><!-- sql mapper 隐射配置文件 --><sqlMapGenerator targetPackage="com.yihaomen.mapper"  targetProject="src"><property name="enableSubPackages" value="true" /></sqlMapGenerator><!-- 在ibatis2 中是dao层,但在mybatis3中,其实就是mapper接口 --><javaClientGenerator type="XMLMAPPER" targetPackage="com.yihaomen.inter"  targetProject="src"><property name="enableSubPackages" value="true" /></javaClientGenerator><!-- 要对那些数据表进行生成操作,必须要有一个. --><table schema="mybatis" tableName="category" domainObjectName="Category" enableCountByExample="false" enableUpdateByExample="false"enableDeleteByExample="false" enableSelectByExample="false"selectByExampleQueryId="false">     </table></context></generatorConfiguration>

当我们需要生成example类的时候,需要table里面去掉

enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false"

example如何使用?

简单查询

这个例子展示了如何用生成后的Example类去生成一个简单的where子句:

TestTableExample example = new TestTableExample();

example.createCriteria().andField1EqualTo(5); 
作为另一种选择, 下面的方式也是可以的:

TestTableExample example = new TestTableExample();

example.or().andField1EqualTo(5); 
在上面的例子中, 动态生成的where子句是:

where field1 = 5

下面的例子展示了如何用生成后的Example类去生成一个复杂的where子句 (用到了 JSE 5.0 的泛型):

TestTableExample example = new TestTableExample();

example.or() 
.andField1EqualTo(5) 
.andField2IsNull();

example.or() 
.andField3NotEqualTo(9) 
.andField4IsNotNull();

List field5Values = new ArrayList(); 
field5Values.add(8); 
field5Values.add(11); 
field5Values.add(14); 
field5Values.add(22);

example.or() 
.andField5In(field5Values);

example.or() 
.andField6Between(3, 7);

在上面的例子中, 动态生成的where子句是:

where (field1 = 5 and field2 is null) 
or (field3 <> 9 and field4 is not null) 
or (field5 in (8, 11, 14, 22)) 
or (field6 between 3 and 7) 
将会返回满足这些条件的记录结果.

去重复查询 
您可以在所有的Example类中调用 setDistinct(true) 方法进行强制去重复查询.

Criteria类 
Criteria 内部类的每个属性都包含 andXXX 方法,以及如下的标准的SQL查询方法:

IS NULL - 指相关的列必须为NULL 
IS NOT NULL - 指相关的列必须不为NULL 
= (equal) - 指相关的列必须等于方法参数中的值 
<> (not equal) - 指相关的列必须不等于方法参数中的值

(greater than) - 指相关的列必须大于方法参数中的值 
= (greater than or equal) - 指相关的列必须大于等于方法参数中的值 
< (less than) - 指相关的列必须小于于方法参数中的值 
<= (less than or equal) - 指相关的列必须小于等于方法参数中的值 
LIKE - 指相关的列必须 “like” 方法参数中的值. 这个方法不用必须加入 ‘%’, 您必须设置方法参数中的值. 
NOT LIKE - 指相关的列必须 “not like” 方法参数中的值. 这个方法不用必须加入 ‘%’, 您必须设置方法参数中的值. 
BETWEEN - 指相关的列必须在 “between” 方法参数中的两个值之间. 
NOT BETWEEN - 指相关的列必须不在 “not between” 方法参数中的两个值之间. 
IN - 指相关的列必须在传入的方法参数的list中. 
NOT IN - 指相关的列必须不在传入的方法参数的list中.

转载于:https://www.cnblogs.com/duanwandao/p/9984629.html

[mybatis]Example的用法相关推荐

  1. Mybatis的FIELD用法

    Mybatis的FIELD用法 <foreach collection="l" item="id" open=" ORDER BY FIELD( ...

  2. Mybatis IFNULL函数用法

    Mybatis IFNULL函数用法 实例: SELECT IFNULL 假设:select * from user where userId=1有返回结果那么直接返回子查询结果 ((select * ...

  3. mybatis if test 用法_SpringBoot整合Mybatis-Plus 实战之动态SQL,Mybatis拿得出手的功能之一...

    MyBatis的动态SQL是最令人喜欢的功能 在了解 动态SQL之前,你首先得知道一个表达式 OGNL,这个是基础! 面试常问问题 : Mybatis 中$与#的区别? 是将传入的值当做字符串的形式, ...

  4. 后端技术:mybatis中resultMap用法示例笔记

    1.概念 resultMap属于mybatis返回操作结果的一个标签,可以用来映射select查询出来结果的集合,主要作用是将实体类中的字段与数据库表中的字段进行关联映射.并且支持复杂的返回结果类型. ...

  5. MyBatis动态SQL------------------choose用法

    下面主要记录 choose用法 介绍: MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时 ...

  6. MyBatis中exists用法

    MyBatis框架中的exists用法 exists用法 使用示例 总结 exists用法 exists: 如果括号内子查询语句返回结果不为空,说明where条件成立,就会执行主SQL语句 如果括号内 ...

  7. MyBatis中foreach用法

    foreach用法 SQL语句中有时会使用in关键字,如id in {1,2,3},我们可以使用${ids}方式直接获取值,但是这种方法不能防止SQL注入,想避免SQL注入的话就需要使用#{id}的方 ...

  8. Mybatis中limit用法与分页查询

    数据库使用的是mysql 要想在Mybatis中使用分页查询,首先要清楚mysql中limit的用法. limit a,b a是从第a+1条数据开始,b是指读取几条数据 例如:select * fro ...

  9. MyBatis中select用法

    使用MyBatis时,只需要在XML中添加一个select元素,写一个SQL,再做一些简单的配置就可以实现映射 使用XML方式 MyBatis支持用接口来调用方法,通过参数注解@param设置参数名字 ...

  10. mybatis choose when用法

    mybatis choose when的用法: mapper.xml: <select id="query" resultType="map" param ...

最新文章

  1. JavaScript对象掺杂点原型
  2. hdu 1520 没有上司的晚会
  3. 命令查看java的class字节码文件、verbose、synchronize、javac、javap
  4. BZOJ 1012 最大数
  5. linux如何自动清buff,centos7
  6. Oracle查询优化-02给查询结果排序
  7. 简明python教程 --C++程序员的视角(八):标准库
  8. python中如何定义颜色_Python图像处理之颜色的定义与使用分析
  9. case when then else多个条件_CentOS「linux」学习笔记24:if和case多个条件判断
  10. Undefined control sequence.l.463 \cita
  11. 多并发编程基础 之进程 Process
  12. Visual Studio 远程调试设置
  13. android opencl sdk,在新的Android Studio中使用OpenCL
  14. 用Java实现邮件的发送
  15. 计算机科学家刘欣,科学家都爱啥运动?
  16. ARM嵌入式——堆栈寻址
  17. 在外部JS中使用validity进行表单验证出现未定义问题
  18. HDFS启动报错Expected to be able to read up until at least txid but unable to find any edit logs
  19. 常见的软件测试人员面试问题
  20. dede(织梦)待审核定更插件

热门文章

  1. Java I/O系统之转换流
  2. 【渝粤教育】国家开放大学2018年秋季 0169-22T工程制图基础 参考试题
  3. 【渝粤教育】国家开放大学2018年春季 0176-21T电机学(一) 参考试题
  4. 【渝粤教育】电大中专职业生涯规划作业 题库
  5. 循环神经网络系列(二) LSTM 和 GRU
  6. 算法与数据结构(一)-导学
  7. 从OpenGL ES 2.0到Direct3D 11.1之路
  8. Python实现人工神经网络逼近股票价格
  9. P2158 [SDOI2008]仪仗队 欧拉函数
  10. 以向量和矩阵的视角抽象万物