mybatis Example条件查询

2023-11-02

Criterion是最基本,最底层的Where条件,用于字段级的筛选


  • Criteria

Criteria包含一个Cretiron的集合,每一个Criteria对象内包含的Cretiron之间是由AND连接的,是逻辑与的关系。

oredCriteria

Example内有一个成员叫oredCriteria,是Criteria的集合,就想其名字所预示的一样,这个集合中的Criteria是由OR连接的,是逻辑或关系。oredCriteria就是ORed Criteria。

其他

Example类的distinct字段用于指定DISTINCT查询。

orderByClause字段用于指定ORDER BY条件,这个条件没有构造方法,直接通过传递字符串值指定。


代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import  java.io.IOException;
import  java.io.Reader;
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.apache.log4j.pattern.ClassNamePatternConverter;
import  org.springframework.context.ApplicationContext;
import  org.springframework.context.support.ClassPathXmlApplicationContext;
 
import  cn.itcast.ssm.mapper.ItemsMapper;
import  cn.itcast.ssm.po.ItemsExample;
 
public  class  Student {
 
     public  static  void main( String [] args) throws IOException {
 
         /*方式一  */
         ItemsExample itemsExample1 =  new  ItemsExample();
 
         itemsExample1. or ().andIdEqualTo( 5 ).andNameIsNotNull();
         itemsExample1. or ().andPicEqualTo( "xxx" ).andPicIsNull();
 
         List< Integer > fieldValues =  new  ArrayList< Integer >();
         fieldValues.add( 8 );
         fieldValues.add( 11 );
         fieldValues.add( 14 );
         fieldValues.add( 22 );
         itemsExample1. or ().andIdIn(fieldValues);
         itemsExample1. or ().andIdBetween( 5 9 );
 
         /*  方式二 criteria1与criteria2是or的关系 */
 
         ItemsExample itemsExample2 =  new  ItemsExample();
         ItemsExample.Criteria criteria1 = itemsExample2.createCriteria();
         criteria1.andIdIsNull();
         criteria1.andPriceEqualTo((float)  3 );
 
         ItemsExample.Criteria criteria2 = itemsExample2.createCriteria();
         criteria2.andNameIsNull();
         criteria2.andIdGreaterThanOrEqualTo( 5 );
         itemsExample2. or (criteria2);
 
         //方式一和方式二是等价的
         
         
         // spring获取mapper代理对象
         ApplicationContext applicationContext =  new  ClassPathXmlApplicationContext( "classpath:applicationContext.xml" );
         ItemsMapper itemsMapper = (ItemsMapper) applicationContext.getBean( "itemsMapper" );
         itemsMapper.countByExample(itemsExample2);
 
         // 获取SqlSessionFactory
         String  resource =  "SqlMapConfig.xml" ;
         Reader reader = Resources.getResourceAsReader(resource);
         SqlSessionFactory sqlMapper =  new  SqlSessionFactoryBuilder().build(reader);
         // 获取SqlSession
         SqlSession sqlSession = sqlMapper.openSession();
 
     }
}


JavaBeans类的成员变量一般称为属性(property)。对每个属性访问权限一般定义为privateprotected,而不是定义为public的。注意:属性名必须以小写字母开头。 

对每个属性,一般定义两个public方法,它们分别称为访问方法(getter)和修改方法(setter),允许容器访问和修改bean的属性。 

      public String getColor();

      public void setColor(String);

一个例外是当属性是boolean类型时,访问器方法应该定义为isXxx()形式。


对象类型

虽然可以明确的引用对象的属性名了,但如果要在if元素中测试传入的user参数,仍然要使用_parameter来引用传递进来的实际参数,因为传递进来的User对象的名字是不可考的。如果测试对象的属性,则直接引用属性名字就可以了。

测试user对象:

?
1
< if  test = "_parameter != null" >

测试user对象的属性:

?
1
< if  test = "name != null" >


map类型

传入map类型,直接通过#{keyname}就可以引用到键对应的值。使用@param注释的多个参数值也会组装成一个map数据结构,和直接传递map进来没有区别。

mapper接口:

?
1
int  updateByExample( @Param ( "user" ) User user,  @Param ( "example" ) UserExample example);

sql映射:

?
1
2
3
4
5
6
7
   < update  id = "updateByExample"  parameterType = "map"  >
     update tb_user
     set id = #{user.id,jdbcType=INTEGER},
     ...
     < if  test = "_parameter != null"  >
       < include  refid = "Update_By_Example_Where_Clause"  />
     </ if >

注意这里测试传递进来的map是否为空,仍然使用_parameter











参考文章:

http://ljhzzyx.blog.163.com/blog/static/38380312201412043525595/

http://openwares.net/database/mybatis_generator_example.html

http://openwares.net/database/mybatis_parametertype.html


原文链接:http://tianxingzhe.blog.51cto.com/3390077/1741268

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mybatis Example条件查询 的相关文章

随机推荐

  • integer对比==与equals区别

    对于 与equals区别在于 在于对象和值两者之间都会比较 而equals只是值得比较 大部分数据情况下最好用equlas integer的取值范围在 128 127之间的 在这之间的值在integerCache cache中产生无论出现多
  • 【小程序】小程序如何实现滑动翻页(类似刷短视频的交互效果)

    在微信小程序中实现上下滑动翻页的效果其实非常简单 可以说一学就会 这篇文章将非常详细地教大家如何实现这一交互 数据准备 首先我们在 Page 的 data 属性中添加两个变量 data biases title Fundenmental A
  • SQL查询语句

    目录 1 回顾SQL查询语句 2 SQL查询子句 3 WHERE子句 4 DISTINCT数据去重 5 GROUP BY子句 5 1 统计函数 5 2 GROUP BY分组 6 ORDER BY子句 7 LIMIT子句 8 SQL多表查询
  • 科技新技术

    3D打印 智慧城市 人脸识别 NFC 无线充电 in cell
  • 基于单边jacobi的奇异值分解(SVD)

    基于单边jacobi的奇异值分解 SVD 对于奇异值分解 SVD 相信很多学过线性代数 高等代数的同学都不会很陌生 但是怎么实现呢 接下来就来详细说说 为了方便讨论 本文所有的讨论仅限定于实数空间 奇异值分解的含义就是将矩阵A分解成一个酉矩
  • springmvc中,post,get请求接收参数的常用方式

    在Spring MVC中 可以使用以下几种方式来接收GET请求中的参数 使用 RequestParam注解 可以将请求参数绑定到方法的参数上 例如 GetMapping example public String example Reque
  • 设置WPF的DataGrid多行显示不同的颜色

    两种方式 1 直接设置样式
  • 基于stm32f103rct6的呼吸灯实现

    一 PWM 在stm32中 输出pwm的方式有很多 第一种是可以用普通IO口输出pwm 第二种是利用定时器的pwm的IO口或复用IO口 pwm端口 STM32 的定时器除了 TIM6 和 7 其他的定时器都可以用来产生 PWM 输出 其中高
  • 大型网站系统设计应考虑的问题

    大型网站系统设计应考虑的问题 1 服务器软件架构 集中服务 微服务 云服务 2 部署方案 分布式 集群部署 3 均衡负载方案 Nginx反向代理实现均衡负载 HAProxy Keepalived双机高可用均衡负载方案 4 缓存方案 redi
  • 导入和导出功能用例设计

    1 用例 2 用例模板 用例模板
  • 【ERP】概念_填制、修改、作废、删除凭证

    目录 1 概述 2 填制凭证 3 修改凭证 无痕修改和有痕修改 4 作废恢复凭证 删
  • 开放API调用了,通过API实现各类脑洞的时刻

    在3月2号 OpenAI公开了ChatGPT相关的API 可以通过API实现对ChatGPT的调用了 POST https api openai com v1 chat completions curl https api openai c
  • vue实现点击复制功能

    实现思路 通过模拟输入框的复制来完成对事件的复制 一 通过点击事件完成创建一个输入框 二 输入框要在正常的编辑状态下原生复制方法才会生效 三 完成上列操作后有移除输入框 代码 a style color 000000 复制链接 a copy
  • 使用canvas做动态背景

    参考自 https blog csdn net kiddd fu article details 78399629 在自己写网页的时候用了一个动态canvas作动态背景原本一直显示有问题 后来发现必须得把script的引用放在最后面 不然无
  • Android Jetpack(2):DataBinding的使用

    Android DataBinding 从入门到进阶 DataBinding 介绍 DataBinding是什么 DataBinding 是谷歌官方发布的一个框架 顾名思义即为数据绑定 是 MVVM 模式在 Android 上的一种实现 用
  • dataguard日常管理

    auther skate time 2009 08 02 dataguard日常管理 1 fail over 2 switchover 3 更改保护模式 4 常用命令和视图 fail over 1 如果在dataguard中做了fail o
  • thinkpad x1e 隐士进入bios

    thinkpad x1e 隐士进入bios 启动的时候 同时按 fn f1 两个键需要连续不停的按 bios页 同时按 fn f12 两个键需要连续不停的按 简单页 1 选择方向键startup 然后选择Boot按回车键 更改第一启动项从外
  • Pycharm报错Non-zero exit code (2)

    问题现象 通常我们拿到一个Python项目后 项目中有requirement txt文件 里面有列出需要安装的三方库 使用pycharm直接安装这些库时 报错 Non zero exit code 2 解决方案 第一种临时解决方案 是在py
  • 大佬为你揭秘微信支付的系统架构,你想知道的都在这里了

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由李跃森发表于云 社区专栏 李跃森 腾讯云PostgreSQL首席架构师 腾讯数据库团队架构师 负责微信支付商户系统核心数据库的架构设计和研发 PostgreSQL x2社区核心
  • mybatis Example条件查询

    Criterion是最基本 最底层的Where条件 用于字段级的筛选 Criteria Criteria包含一个Cretiron的集合 每一个Criteria对象内包含的Cretiron之间是由AND连接的 是逻辑与的关系 oredCrit