首页 > 其他分享 >hibernate Restrictions用法

hibernate Restrictions用法

时间:2023-05-16 10:07:03浏览次数:47  
标签:Restrictions hibernate like -- age list 用法 add


[url]http://xuganggogo.iteye.com/blog/440078[/url]
QBC常用限定方法
[b]Restrictions.eq --> equal,等于.
Restrictions.ne --> 不等于
Restrictions.allEq --> 利用Map来进行多个等于的限制,参数为Map对象,使用key/value进行多个等于的比对,相当于多个Restrictions.eq的效果
Restrictions.gt --> great-than > 大于
Restrictions.ge --> great-equal >= 大于等于
Restrictions.lt --> less-than, < 小于
Restrictions.le --> less-equal <= 小于等于
Restrictions.between --> 对应SQL的between子句
Restrictions.like --> 对应SQL的LIKE子句
Restrictions.in --> 对应SQL的in子句
Restrictions.and --> and 关系
Restrictions.or --> or 关系
Restrictions.isNull --> 判断属性是否为空,为空则返回true
Restrictions.isNotNull --> 与isNull相反
Restrictions.sqlRestriction --> SQL限定的查询
Order.asc --> 根据传入的字段进行升序排序
Order.desc --> 根据传入的字段进行降序排序
MatchMode.EXACT --> 字符串精确匹配.相当于"like 'value'"
MatchMode.ANYWHERE --> 字符串在中间匹配.相当于"like '%value%'"
MatchMode.START --> 字符串在最前面的位置.相当于"like 'value%'"
MatchMode.END --> 字符串在最后面的位置.相当于"like '%value'"[/b]
例子
查询年龄在20-30岁之间的所有学生对象

List list = session.createCriteria(Student.class)
      .add(Restrictions.between("age",new Integer(20),new Integer(30)).list();


查询学生姓名在AAA,BBB,CCC之间的学生对象


String[] names = {"AAA","BBB","CCC"};
List list = session.createCriteria(Student.class)
      .add(Restrictions.in("name",names)).list();


查询年龄为空的学生对象


List list = session.createCriteria(Student.class)
      .add(Restrictions.isNull("age")).list();


查询年龄等于20或者年龄为空的学生对象


List list = session.createCriteria(Student.class)
      .add(Restrictions.or(Restrictions.eq("age",new Integer(20)),
                 Restrictions.isNull("age")).list();


--------------------------------------------------------------------


使用QBC实现动态查询


public List findStudents(String name,int age){
 Criteria criteria = session.createCriteria(Student.class);
 if(name != null){
  criteria.add(Restrictions.liek("name",name,MatchMode.ANYWHERE));
 }
 if(age != 0){
  criteria.add(Restrictions.eq("age",new Integer(age)));
 }
 criteria.addOrder(Order.asc("name"));//根据名字升序排列
 return criteria.list();
}



-----------------------------------------------------------------------------------


今天用了写hibernate高级查询时用了Restrictions(当然Expression也是可以以的)这个类.感觉不错.


下面的代码写的不易读.其实核心就是一句


Restrictions.or(Restrictions.like(),Restrictions.or(Restrictions.like,........))


里面的or可以无限加的.还是比较好用



Session session = getHibernateTemplate().getSessionFactory()
                .openSession();
        Criteria criteria = session.createCriteria(Film.class);
        List<Film> list = criteria.add(
            Restrictions.or(Restrictions.like("description", key,MatchMode.ANYWHERE),
            Restrictions.or(Restrictions.like("name", key,MatchMode.ANYWHERE),
                Restrictions.or(    Restrictions.like("direct", key,MatchMode.ANYWHERE),
                Restrictions.or(Restrictions.like("mainplay",key,MatchMode.ANYWHERE),
                        Restrictions.like("filearea", key,MatchMode.ANYWHERE)))))).list();

        session.close();
        return list;



如果需要循环设置OR查询,可以用到disjunction,以下两段代码实现同样的功能。


List cats = sess.createCriteria(Cat.class)
    .add( Restrictions.like("name", "Fritz%") )
    .add( Restrictions.or(
        Restrictions.eq( "age", new Integer(0) ),
        Restrictions.isNull("age")
    ) )
    .list();


List cats = sess.createCriteria(Cat.class)
    .add( Restrictions.in( "name", new String[] { "Fritz", "Izi", "Pk" } ) )
    .add( Restrictions.disjunction()
        .add( Restrictions.isNull("age") )
        .add( Restrictions.eq("age", new Integer(0) ) )
        .add( Restrictions.eq("age", new Integer(1) ) )
        .add( Restrictions.eq("age", new Integer(2) ) )
    ) )
    .list();

标签:Restrictions,hibernate,like,--,age,list,用法,add
From: https://blog.51cto.com/u_3871599/6282421

相关文章

  • oracle中的merge into用法解析
    1.如果存在更新,不存在插入MERGEINTOmerge_targettargetUSING(SELECTB.name,B.age,B.target_idFROMmerge_sourceB)sourceON(target.id=source.target_id)WHENMATCHEDTHENUPDATESETtarget.name=source.name,target.age=source.ageWHENNOTMATCHE......
  • 16、MapReduce的基本用法示例-自定义序列化、排序、分区、分组和topN
    文章目录Hadoop系列文章目录一、pom.xml与测试数据说明、日志配置1、pom.xml2、数据字段说明3、日志配置二、序列化1、需求2、实现说明3、实现1)、bean2)、Mapper3)、Reducer4)、Driver4、验证三、排序1、需求2、实现说明3、实现1)、bean2)、Mapper3)、Reducer4)、Driver4、验证四、分区1......
  • C#中TabControl相关用法
    https://blog.csdn.net/fenglearning/article/details/118330487https://blog.csdn.net/u011555996/article/details/53199362?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-53199362-blog-118330487.23......
  • react状态管理store用法二: 使用Hooks 配置redux
    react最通用的状态管理方案就是的redux,下面介绍通过Hooks的方式使用reduxnpminstallreact-redux@reduxjs/toolkit-S 创建store1.新建store文件夹,在下面新建index.tsx文件和slices文件夹,其中slices文件夹用来定义需要放进store的数据结构和方法slices文件夹下新建app......
  • Oracle中start with...connect by prior子句用法
    connectby是结构化查询中用到的,其基本语法是:select...fromtablenamestartwith条件1connectby条件2where条件3;例:select*fromtablestartwithorg_id='HBHqfWGWPy'connectbypriororg_id=parent_id;简单说来是将一个树状......
  • Java中getResourceAsStream的用法,读取jar里面的文件
    首先,Java中的getResourceAsStream有以下几种:1.Class.getResourceAsStream(Stringpath):path不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。2.Class.getClassLoader.getRe......
  • Hibernate之update(1)——更新部分字段
    Hibernate中如果直接使用Session.update(Objecto),会把这个表中的所有字段更新一遍。如果你没有对你需要更新的字段以外的字段赋值,那么这些字段会被置空。publicclassTeacherTest{@Testpublicvoidupdate(){Sessionsession=HibernateUitl.getSession......
  • Python中字典的用法
    字典用于存放具有映射关系的数据。相当于保存了两组数据,其中一组数据是关键数据,被称为key;另一组数据可通过key来访问,被称为value。字典相当于2字段表格,但value值可通过列表的形式扩展data={"李太白”:[23742364782642342323234,28,"男","青莲居士","唐朝"],"姜子牙......
  • Go语言中List 基本用法与源码详解
    Go-list在Go语言的标准库中,提供了一个container包,这个包中提供了三种数据类型,就是heap,list和ring,本节要讲的是list的使用以及源码剖析。要使用Go提供的list链表,则首先需要导入list包,如下所示:packagemainimport("container/list")导入包之后,需要了解list中定义了两种数据......
  • Golang基础--context的用法
    context包是go并发中常用的包,用于设置截至日期,同步信号,传递请求相关的值。应用场景每一个http请求的request都会启动一个goroutine处理这个请求,后续跟进的这个请求可能还需要访问数据库,做安全验证,访问控制,日志记录等,这时候就会由最早的goroutine启动后续的多个goroutine,这......