gpt4 book ai didi

Mybatis Criteria使用and和or进行联合条件查询的操作方法

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 32 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Mybatis Criteria使用and和or进行联合条件查询的操作方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

之前用Mybatis框架反向的实体,还有实体里面的Example,之前只是知道Example里面放的是条件查询的方法,可以一直不知道怎么用,到今天才开始知道怎么简单的用。在我们前台查询的时候会有许多的条件传过来:先看个例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public List<Contact> searchByExample(Contact contact) {
         System.out.println( "searchByExampleContact" );
         ContactExample example = new ContactExample();
         ContactExample.Criteria cri = example.createCriteria();
         if ( this .objectAttrNullCheck(contact, "username" ))
             cri.andUsernameEqualTo(contact.getUsername());
         if ( this .objectAttrNullCheck(contact, "password" ))
             cri.andPasswordEqualTo(contact.getPassword());
         ContactMapper vcontactMapper = sqlSession
                 .getMapper(ContactMapper. class );
         List<Contact> returnList = vcontactMapper.selectByExample(example);
         return returnList;
}

这是简单的用户登录的后台代码,example中有一个Criterria的方法,里面 。

?
1
2
andUsernameEqualTo
andPasswordEqualTo

  都是在生成example的时候生成的。这两个方法是判断单值的.

Criterion 。

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

Criteria 。

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

其它 。

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
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();
     }
}

代码案例2:

?
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
public void getQueryExampleByCondition(Example example, OrderQuery query) {
  
         Criteria criteria1 = example.createCriteria();
  
         // 设置 criteria2 与 criteria1 为 or 方式关联
         Criteria criteria2 = example.or();
        
         if (query != null ) {
             
             if (query.getLoadSrc() != null && query.getLoadSrc() != - 1 ) {
                 criteria1.andEqualTo( "loadSrc" , query.getLoadSrc());
             }
                     
             if (!StringUtil.isEmpty(query.getOrderNo())) {
                 criteria1.andLike( "orderNo" , "%" + query.getOrderNo() + "%" );
             }
  
             // 以下 3 个会用 OR 方式加上 criteria2 中的条件
             if (query.getStatus() != null && query.getStatus() != - 1 ) {
                 criteria1.andEqualTo( "status" , query.getStatus());
                 criteria2.andEqualTo( "status" , query.getStatus());
             }
  
             if (!StringUtil.isEmpty(query.getRepayDateEnd())) {
                 criteria1.andLessThanOrEqualTo( "repayDate" , query.getRepayDateEnd());
                 criteria2.andLessThanOrEqualTo( "repayDate" , query.getRepayDateEnd());
             }
  
             if (!StringUtil.isEmpty(query.getLoanDay())) {
                 criteria1.andEqualTo( "loanDay" , query.getLoanDay());
                 criteria1.andEqualTo( "loanDay" , query.getLoanDay());
             }
  
         }
     }

其中 criteria1 和 criteria2 是 or 的关系.

根据传入参数不同,执行 sql 效果类似:

?
1
SELECT * FROM xxxx WHERE (load_type = 5 AND loan_day = 7) OR (order_No = 5)

where 后面第一个圆括号中的条件组合 load_type = 5 AND loan_day = 7 是 criteria1中的条件, 。

第二个圆括号中的条件 order_No = 5 是 criteria2 中的条件设置.

Criteria的and和or进行联合查询 。

?
1
2
3
4
5
6
7
8
9
10
DemoExample example= new DemoExample ();
DemoExample.Criteria criteria=example.createCriteria();
criteria.andidEqualTo(id);
criteria.andStatusEqualTo( "0" );
         
DemoExample.Criteria criteria2=example.createCriteria();
criteria2.andidEqualTo(id);
criteria2.andstatusEqualTo( "1" );
example.or(criteria2);
dao.countByExample(example);

生成如下SQL 。

?
1
select count (*) from demo WHERE ( ID = ? and STATUS = ? ) or ( ID = ? and STATUS = ? )

极限就是为了超越而存在的 。

到此这篇关于Mybatis Criteria的and和or进行联合条件查询 的文章就介绍到这了,更多相关Mybatis and和or联合条件查询 内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://www.cnblogs.com/liboware/p/12008645.html 。

最后此篇关于Mybatis Criteria使用and和or进行联合条件查询的操作方法的文章就讲到这里了,如果你想了解更多关于Mybatis Criteria使用and和or进行联合条件查询的操作方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com