barriers / 阅读 / 详情

hibernate里‘query’和‘ Criteria’分别什么时候用

2023-07-07 01:10:26
共3条回复
snjk

来自:《J2EE开源编程精要15讲:整合Eclipse、Struts、Hibernate和Spring的Java Web开发》

9.1 Hibernate数据查询

讲要点:

Hibernate数据查询

利用关联关系操纵对象

Hibernate事务

Hibernate的Cache管理

9.1 Hibernate数据查询

数据查询与检索是Hibernate的一个亮点。Hibernate的数据查询方式主要有3种,它们是:

Hibernate Query Language(HQL)

Criteria Query

Native SQL

下面对这3种查询方式分别进行讲解。

9.1.1 Hibernate Query Language(HQL)

Hibernate Query Language(HQL)提供了十分强大的功能,推荐大家使用这种查询方式。HQL具有与SQL语言类似的语法规范,只不过SQL针对表中字段进行查询,而HQL针对持久化对象,它用来取得对象,而不进行update、delete和insert等操作。而且HQL是完全面向对象的,具备继承、多态和关联等特性。

1.from子句

from字句是最简单的HQL语句,例如 from Student,也可以写成select s from Student s。它简单地返回Student类的所有实例。

除了Java类和属性的名称外,HQL语句对大小写并不敏感,所以在上一句HQL语句中,from与FROM是相同的,但是Student与student就不同了,所以上述语句写成from student就会报错。下列程序演示如何通过执行from语句取得所有的Student对象。

Query query = session.createQuery(“from Student”);

List list = query.list();

for (int i=0;i<list.size(); i++)

{

Student stu = (Student)list.get(i);

System.out.println(stu.getName());

}

如果执行HQL语句“from Student, Course”,并不简单地返回两个对象,而是返回这两个对象的的笛卡儿积,这类似于SQL语句中字段的全外连接。在实际应用中,像“from Student, Course”这样的语句几乎不会出现。

2.select子句

有时并不需要得到对象的所有属性,这时可以使用select子句进行属性查询,例如,select s.name from Student s。下面程序演示如何执行这个语句:

Query query = session.createQuery(“select s.name from Student s”);

List list = query.list();

for (int i=0;i<list.size(); i++) {

String name = (String)list.get(i);

System.out.println(name());

}

如果要查询两个以上的属性,查询结果会以数组的方式返回,如下所示:

Query query = session.createQuery(“select s.name, s.sex from Student as s”);

List list = query.list();

for (int i=0;i<list.size(); i++) {

Object obj[] = (Object[])list.get(i);

System.out.println(name(obj[0] + “的性别是:” +obj[1]));

}

在使用属性查询时,由于使用对象数组,操作和理解都不太方便,如果将一个object[]中所有成员封装成一个对象就方便多了。下面的程序将查询结果进行了实例化:

Query query = session.createQuery(“select new Student(s.name, s.sex) from Student s”);

List list = query.list();

for (int i=0;i<list.size(); i++) {

Student stu = (Student)list.get(i);

System.out.println(stu.getName());

}

要正确运行以上程序,还需要在Student类中加入一个如下的构造函数:

public Student(String name, String sex)

{

this.name = name;

this.sex = sex;

}

3.统计函数查询

可以在HQL中使用函数,经常使用的函数有:

count():统计记录条数

min():求最小值

max():求最大值

sum():求和

age():求平均值

例如,要取得Student实例的数量,可以编写如下HQL语句:

select count(*) from Student

取得Student的平均年龄的HQL语句如下:

select avg(s.age) from Student as s

可以使用distinct去除重复数据:

select distinct s.age from Student as s

4.where子句

HQL也支持子查询,它通过where子句实现这一机制。where子句让用户缩小要返回的实例的列表范围,例如下面语句会返回所有名字为“Bill”的Student实例:

Query query = session.createQuery("from Student as s where s.name="Bill" ");

where子句允许出现的表达式包括了SQL中可以使用的大多数情况:

数学操作:+,-,*,/

真假比较操作:=,>=,<=,<>,!=,like

逻辑操作:and,or, not

字符串连接:||

SQL标量函数:例如upper()和lower()

如果子查询返回多条记录,可以用以下的关键字来量化:

all:表示所有的记录。

any:表示所有记录中的任意一条。

some:与any用法相同。

in:与any等价。

exists:表示子查询至少要返回一条记录。

例如,下面语句返回所有学生的年龄都大于22的班级对象:

from Group g where 22<all (select s.age from g.students s)

下述语句返回在所有学生中有一个学生的年龄等于22的班级:

from Group g where 22=any (select s.age from g.students s)

或者

from Group g where 22=some (select s.age from g.students s)

或者

from Group g where 22 in (select s.age from g.students s)

5.order by 子句

查询返回的列表可以按照任何返回的类或者组件的属性排序:

from Student s order by s.name asc

asc和desc是可选的,分别代表升序或者降序。

6.连接查询

与SQL查询一样, HQL也支持连接查询,如内连接、外连接和交叉连接。

inner join:内连接

left outer join:左外连接

right outer join:右外连接

full join:全连接,但不常用

下面重点讲解内连接查询,左外连接和右外连接查询和内连接大同小异,而全连接几乎不怎么使用。

inner join可以简写为join,例如在查询得到Group对象时,内连接取得对应的Student对象,实现的程序如下。

……//打开Session,开启事务

Student stu = null; //声明Student实例

Group group = null; //声明Group实例

Query query = session.createQuery("from Group g join g.students");

List list = query.list();

Object obj[] = null; //声明对象数组

for(int i=0;i<list.size();i++) {

obj = (Object[])list.get(i); //取得集合中的第i个数组

group = (Group)obj[0]; //group是数组中第一个对象

stu = (Student)obj[1]; //stu是数组中第二个对象

System.out.println(stu.getName() + "属于:" +group.getName() );

}

……//提交事务,关闭Session

9.1.2 Criteria Query方式

当查询数据时,人们往往需要设置查询条件。在SQL或HQL语句中,查询条件常常放在where子句中。此外,Hibernate还支持Criteria查询(Criteria Query),这种查询方式把查询条件封装为一个Criteria对象。在实际应用中,使用Session的createCriteria()方法构建一个org.hibernate.Criteria实例,然后把具体的查询条件通过Criteria的add()方法加入到Criteria实例中。这样,程序员可以不使用SQL甚至HQL的情况下进行数据查询,如例程9-1所示。

例程9-1 Criteria应用实例

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

Criteria cr = session.createCriteria(Student.class); //生成一个Criteria对象

cr.add(Restrictions.eq("name", "Bill"));//等价于where name="Bill"

List list = cr.list();

Student stu = (Student)list.get(0);

System.out.println(stu.getName());

1.常用的查询限制方法

在例程9-1中,Restrictions.eq()方法表示equal,即等于的情况。Restrictions类提供了查询限制机制。它提供了许多方法,以实现查询限制。这些方法及其他一些criteria常用查询限制方法列于表9-1中。

表9-1 Criteria Query常用的查询限制方法

方 法 说 明

Restrictions.eq() equal,=

Restrictions.allEq() 参数为Map对象,使用key/value进行多个等于的对比,相当于多个Restrictions.eq()的效果

Restrictions.gt() greater-than, >

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,否则返回false

Restrictions.isNotNull() 与Restrictions.isNull()相反

Order.asc() 根据传入的字段进行升序排序

Order.desc() 根据传入的字段进行降序排序

MatchMode.EXACT 字符串精确匹配,相当于“like "value"”

MatchMode.ANYWHERE 字符串在中间位置,相当于“like "%value%"”

MatchMode.START 字符串在最前面的位置,相当于“like "value%"”

MatchMode.END 字符串在最后面的位置,相当于“like "%value"”

例1:查询学生名字以t开头的所有Student对象。

Criteria cr = session.createCriteria(Student.class);

cr.add(Restrictions.like(“name”, “t%”))

List list = cr.list();

Student stu = (Student)list.get(0);

或者使用另一种方式:

Criteria cr = session.createCriteria(Student.class);

cr.add(Restrictions.like(“name”, “t”, MatchMode.START))

List list = cr.list();

Student stu = (Student)list.get(0);

例2:查询学生姓名在Bill, Jack和Tom之间的所有Student对象。

String[] names = {“Bill”, “Jack”, “Tom”}

Criteria cr = session.createCriteria(Student.class);

cr.add(Restrictions.in(“name”, names))

List list = cr.list();

Student stu = (Student)list.get(0);

例3:查询学生的年龄age等于22或age为空(null)的所有Student对象。

Criteria cr = session.createCriteria(Student.class);

cr.add(Restrictions.eq(“age”, new Integer(22));

cr.add(Restrictions.isNull(“age”));

List list = cr.list();

Student stu = (Student)list.get(0);

例4:查询学生姓名以字母F开头的所有Student对象,并按姓名升序排序。

Criteria cr = session.createCriteria(Student.class);

cr.add(Restrictions.like(“name”, “F%”);

cr.addOrder(Order.asc(“name”));

List list = cr.list();

Student stu = (Student)list.get(0);

调用Order.asc的方法应是Criteria的addOrder()方法。

2.连接限制

在Criteria 查询中使用FetchMode来实现连接限制。在HQL语句中,可以通过fetch关键字来表示预先抓取(Eager fetching),如下所示:

from Group g

left join fetch g.students s

where g.name like "%2005"

可以使用Criteria的API完成同样的功能,如下所示:

Criteria cr = session.createCriteria(Group.class);

cr.setFetchMode(“students”, FetchMode.EAGER);

cr.add(Restrictions.like(“name”, “2005”, MatchMode.END))

List list = cr.list();

以上两种方式编写的代码,都使用相同的SQL语句完成它们的功能,如下所示:

select g.*, s.* from Group g

left outer join Student s

on g.id = s.group_id

where g.name like "%2005"

clou

简单的说用query进行复杂查询时,你的sql语句和语法应该比较熟练。用criteria 提供一种面向对象的思路去查询,你的sql学的不是很好关系不大。

当然query功能更强大些。

苏州马小云

一般来说。为了方便。比较简单的查询可以用query。在查询条件比较多的时候,可以用criteria

相关推荐

criteria的中文意思

标准
2023-07-06 23:00:007

criteria是什么意思

标准或者准则
2023-07-06 23:00:223

criteria的复数是什么?

criteria是复数,criterion是单数,而它的复数也可以使criterions=criteria多用复数criteria意思是标准,尺度类似的词:就象media是medium的复数形式。而medium的复数也可以使mediums=media。criteria属于不规则变化。Criterion 接口的主要实现包括: Example 、 Junction 和 SimpleExpression 。而Junction 的实际使用是它的两个子类 conjunction 和 disjunction ,分别是使用 AND 和 OR 操作符进行来联结查询条件集合。Criterion 的实例可以通过 Restrictions 工具类来创建,Restrictions 提供了大量的静态方法,如 eq (等于)、 ge (大于等于)、 between 等来方法的创建 Criterion 查询条件(SimpleExpression 实例)。扩展资料创建实例Criteria crit = sess.createCriteria(Cat.class);crit.setMaxResults(50);List cats = crit.list();结果集排序List cats = sess.createCriteria(Cat.class).add( Restrictions.like("name", "F%").addOrder( Order.asc("name") ).addOrder( Order.desc("age") ).setMaxResults(50)
2023-07-06 23:00:322

criteria什么意

汉语意思是标准。criterian. 标准,准则,条件,尺度这是误用率极高的一个名词。跟media、data一样,criteria其实是复数形式,对应的单数原形是criterion。例句:I love both fiction and nonfiction, so I"m not overly picky when it comes to reading material. My only criterion is, it needs to be a book that has actual substance. (小说和非小说类的书籍我都喜欢,所以我在选择阅读内容的时候不会太过挑剔。我的唯一标准是,书里必须有实际的内容。)The criteria she has listed in a potential boyfriend are insane. If she is not willing to compromise, she will probably stay single for the rest of her life. (她列出来的潜在男友需要达到的条件简直太疯狂了。如果她不愿意妥协,估计就要一辈子单身了。)
2023-07-06 23:01:191

criteria是什么意思

标准
2023-07-06 23:01:404

criteria和standard的区别?

criteria standard[辨析];standard:标准.指法定的或一般公认的标准. criterion:criteria的单数.标准.指有特殊的确实性,令人信服而用以判断 其他事物.俗称规范.也就是在standard基础上,加以验证而形成的规范.
2023-07-06 23:02:132

急!!criteria 和criterion 的区别??

criteria 是criterion的复数形式
2023-07-06 23:02:201

criteria和standard的区别?

standard一般指具体事物的标准,可以做形容词和名词criteria多用于抽象的事物的标准,只可以做名词
2023-07-06 23:02:313

Excel里的数据库函数的criteria是什么意思?

在countif函数中,criteria指的是在某行或某列中所拥有的相关文字或数字数量。例子:在columnA中穿插键入10个以下的A,B或C,使用countif函数计算该column中有几个A,在某单元个内键入=countif(A1:A10,"A").A1:A10指的是range,而"A"指的是要excell帮忙计算从A1到A10中,到底有几个A。尝试上述例子,或许能够帮你理解criteria的意思。
2023-07-06 23:02:401

criteria与criterion区别

前面复数后面单数
2023-07-06 23:03:005

exsel中的criteria是什么意思

标准
2023-07-06 23:03:164

standard和criteria,criterion有什么差别

criteria是criterion的复数形式   criterion与standard的区别是前者是一般的标准,如择偶标准,后者的标准是组织和正府机构制定的标准,如空气的排放标准,质量标准等 手机提问的朋友在客户端右上角评价点【满意】即可.
2023-07-06 23:03:241

请教Hibernate 的 Criteria 的 in 查询

Hibernate中提供了三种查询方式,分别为HQL、Criteria查询、本地化SQL查询,实际应用中,有很多人忽略了Criteria的用处,觉得不如另外两种贴近SQL方式便捷,实际则未必,很多情况下Criteria更具有优势;本篇文章就对Criteria查询做一个全面的介绍,以期尽可能的将更多的Criteria强大的查询功能展现出来;1、首先新建一个Maven Web Project项目,本次使用的是hibernate4.3.11版本,使用MySql数据库,添加如下依赖:[html] view plain copy<!-- 引入mysql jar依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <!-- 引入hibernate依赖 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.3.11.Final</version> </dependency> 新建完毕后,项目结构如下:2、entity包下面放置的是通过Hibernate反向工程生成的实体映射类,samples包下面放置测试类,同样hibernate.cfg.xml文件需要配置,在此就不一一展示了,好了,准备工程就这么多,下面开始介绍Criteria的实际操作;3、Criteria查询3.1 获取Criteria对象[java] view plain copypackage com.hibernate.samples; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.hibernate.entity.SlEmployee; public class HibernateTest { // 声明一个Hibernate Session类型的变量 private Session session; @Before public void getSession(){ Configuration config = new Configuration().configure(); SessionFactory sessionFactory = config.buildSessionFactory(); session = sessionFactory.openSession(); } @After public void closeSession(){ if(session != null){ session.close(); } } @Test public void doCreateCriteriaInstance(){ // 获取Criteria实例对象 Criteria criteria = session.createCriteria(SlEmployee.class); Assert.assertNotNull(criteria); } } 3.2 在SQL中,我们可以通过WHERE关键字对条件进行定义,那么在Criteria中呢?看例子[java] view plain copy@Test public void doConditionQueryInCriteria() { // 获取Criteria实例对象 Criteria criteria = session.createCriteria(SlEmployee.class); // 查询出王姓员工且收入在3000到5000之间的 // 类似于HQL中 WHERE employeeName LIKE "王%" AND salary BETWEEN 3000 AND 5000 List emps = criteria.add(Restrictions.like("employeeName", "王%")) .add(Restrictions.between("salary", 3000.0, 5000.0)).list(); // 查询出工资在4000以下或5000以上的王姓员工 // 可以通过Restrictions的or或and进行逻辑分组 emps = criteria.add(Restrictions.like("employeeName", "王%")) .add(Restrictions.or(Restrictions.gt("salary", 5000D), Restrictions.lt("salary", 3000D))).list(); // 查询出岗位是软件工程师或测试工程师,且学历是硕士、本科或大专的员工有哪些 emps = criteria.add(Restrictions.in("position", new String[] { "软件工程师", "测试工程师" })) .add(Restrictions.disjunction().add(Restrictions.eq("degree", "硕士")).add(Restrictions.eq("degree", "本科")) .add(Restrictions.eq("degree", "大专"))) .list(); } 上述三个查询可以看出Restrictions类提供了内建Cretirion类型来满足各种查询状况,此外Criteria还有一个特别强大的功能,那就是允许你直接指定SQL查询,看例子[html] view plain copyList emps = criteria.add(Restrictions.sqlRestriction("birthday > "1980-01-01" AND employee_name like "刘%"")).list(); 上述无论是birthday还是employee_name都是数据库中表的字段名称,看起来是不是特别好用,此外还可以直接通过属性实例构建查询条件,比如要查询出学习是高中、中专的员工有哪些:[java] view plain copyList emps = criteria.add(Property.forName("degree").in(new String[]{"高中","中专"})).list(); 3.3 对结果集进行排序,同样可以分为上述两种方式[java] view plain copyList emps = criteria.add(Restrictions.sqlRestriction("birthday > "1970-01-01"")).addOrder(Order.asc("birthday")) .addOrder(Order.desc("salary")).list(); List emps = criteria.add(Restrictions.sqlRestriction("birthday > "1970-01-01"")) .addOrder(Property.forName("birthday").asc()).addOrder(Property.forName("salary").desc()).list(); 3.4 上述几个例子直接演示了对我们想要实体的操作,大家都知道每个实体都会有好多关联实体,比如一个请假实体类会关联请假申请人与审批人、一篇博客会关联作者和分类信息实体、一个订单会关联多个商品实体,顾客实体,地址实体等,如果此时我们想通过对关联实体的限制,最终限制想要的实体,那应该怎么处理呢,看例子;[java] view plain copy// 比如我们想查询北京各个公司中,员工学历中包括高中、中专、大专的公司部门有哪些 List depts = criteria.add(Restrictions.sqlRestriction("dept_name LIKE "北京%"")) .createCriteria("slEmployees").add(Restrictions.in("degree", new String[]{"高中","中专","大专"})).list(); 上述方法生成下列SQL文[sql] view plain copyfrom sl_dept this_ inner join sl_employee slemployee1_ on this_.dept_id=slemployee1_.DEPT_ID where dept_name LIKE "北京%" and slemployee1_.DEGREE in ( ?, ?, ? ) 通过该实例我们可以得出:a)可以通过createCriteria方法来通过关联实体限制最终查询实体;b)默认采用内连接的方式关联查询那么如果我们想采用比如左连接,右连接甚至是全外连接的话又该怎么做呢,看例子:[java] view plain copyList depts = criteria.add(Restrictions.sqlRestriction("dept_name LIKE "北京%"")).createAlias("slEmployees", "emps2", JoinType.LEFT_OUTER_JOIN, Restrictions.gt("salary",6000.0)).list(); 生成SQL如下:[sql] view plain copyfrom sl_dept this_ left outer join sl_employee emps2x1_ on this_.dept_id=emps2x1_.DEPT_ID and ( emps2x1_.SALARY>? ) where dept_name LIKE "北京%" 另外同样在createCriteria方法中也同样可以指定查询方式;
2023-07-06 23:03:321

Criteria 和 DetachedCriteria的区别与使用

Criteria 和 DetachedCriteria 的主要区别在于创建的形式不一样, Criteria 是在线的,所以它是由 Hibernate Session 进行创建的;而 DetachedCriteria 是离线的,创建时无需Session,DetachedCriteria 提供了 2 个静态方法 forClass(Class) 或 forEntityName(Name)进行DetachedCriteria 实例的创建。 Spring 的框架提供了getHibernateTemplate().findByCriteria(detachedCriteria) 方法可以很方便地根据DetachedCriteria 来返回查询结果。Criteria 和 DetachedCriteria 均可使用 Criterion 和 Projection 设置查询条件。可以设置 FetchMode( 联合查询抓取的模式 ) ,设置排序方式。对于 Criteria 还可以设置 FlushModel(冲刷 Session 的方式)和 LockMode (数据库锁模式)。下面对 Criterion 和 Projection 进行详细说明。Criterion 是 Criteria 的查询条件。Criteria 提供了 add(Criterion criterion) 方法来添加查询条件。Criterion 接口的主要实现包括: Example 、 Junction 和 SimpleExpression 。而Junction 的实际使用是它的两个子类 conjunction 和 disjunction ,分别是使用 AND 和 OR 操作符进行来联结查询条件集合。Criterion 的实例可以通过 Restrictions 工具类来创建,Restrictions 提供了大量的静态方法,如 eq (等于)、 ge (大于等于)、 between 等来方法的创建 Criterion 查询条件(SimpleExpression 实例)。除此之外, Restrictions 还提供了方法来创建 conjunction 和disjunction 实例,通过往该实例的 add(Criteria) 方法来增加查询条件形成一个查询条件集合。至于 Example 的创建有所不同, Example 本身提供了一个静态方法 create(Objectentity) ,即根据一个对象(实际使用中一般是映射到数据库的对象)来创建。然后可以设置一些过滤条件:Example exampleUser =Example.create(u).ignoreCase() // 忽略大小写.enableLike(MatchMode.ANYWHERE);// 对 String 类型的属性,无论在那里值在那里都匹配。相当于 %value%Project 主要是让 Criteria 能够进行报表查询,并可以实现分组。 Project 主要有SimpleProjection 、 ProjectionList 和 Property 三个实现。其中 SimpleProjection 和ProjectionList 的实例化是由内建的 Projections 来完成,如提供的 avg 、 count 、 max 、min 、 sum 可以让开发者很容易对某个字段进行统计查询。 Property 是对某个字段进行查询条件的设置,如通过Porperty.forName(“color”).in(new String[]{“black”,”red”,”write”}); 则可以创建一个 Project 实例。通过criteria 的 add(Project) 方法加入到查询条件中去。 使用 Criteria 进行查询,主要要清晰的是 Hibernate 提供了那些类和方法来满足开发中查询条件的创建和组装,下面介绍几种用法:1. 创建一个Criteria 实例org.hibernate.Criteria接口表示特定持久类的一个查询。Session是 Criteria实例的工厂。Criteria crit = sess.createCriteria(Cat.class);crit.setMaxResults(50);List cats = crit.list();2. 限制结果集内容一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例。org.hibernate.criterion.Restrictions类 定义了获得某些内置Criterion类型的工厂方法。List cats = sess.createCriteria(Cat.class) .add( Restrictions.like("name", "Fritz%") ) .add( Restrictions.between("weight", minWeight, maxWeight) ) .list();约束可以按逻辑分组。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();Hibernate提供了相当多的内置criterion类型(Restrictions 子类), 但是尤其有用的是可以允许你直接使用SQL。List cats = sess.createCriteria(Cat.class) .add( Restrictions.sql("lower({alias}.name) like lower(?)", "Fritz%",Hibernate.STRING) ) .list();{alias}占位符应当被替换为被查询实体的列别名。Property实例是获得一个条件的另外一种途径。你可以通过调用Property.forName() 创建一个Property。Property age = Property.forName("age");List cats = sess.createCriteria(Cat.class) .add( Restrictions.disjunction() .add( age.isNull() ) .add( age.eq( new Integer(0) ) ) .add( age.eq( new Integer(1) ) ) .add( age.eq( new Integer(2) ) ) ) ) .add( Property.forName("name").in( new String[] { "Fritz", "Izi", "Pk" } ) ) .list();3. 结果集排序你可以使用org.hibernate.criterion.Order来为查询结果排序。List cats = sess.createCriteria(Cat.class) .add( Restrictions.like("name", "F%") .addOrder( Order.asc("name") ) .addOrder( Order.desc("age") ) .setMaxResults(50) .list();List cats = sess.createCriteria(Cat.class) .add( Property.forName("name").like("F%") ) .addOrder( Property.forName("name").asc() ) .addOrder( Property.forName("age").desc() ) .setMaxResults(50) .list();
2023-07-06 23:03:391

criteria可数还是不可数

复数 criteria是criterion 的复数 当然,如果是这里是专有名词的话,那就是单数(没听过,不知道是不是专有)
2023-07-06 23:03:471

JAVA中Criteria是什么?

HQL是在java语言层面之外的另一种数据查询语言,和SQL极其接近,通用性强,便于SQL经验者使用,需要语法解析。考虑移植性时使用。Criteria API是在java语言内的接口,不需要语法解析,直接操作底层对象,写出查询代码没有通用性。性能最大优化时使用。两者都用于数据的增删查改操作。
2023-07-06 23:03:552

在java中Criteria 的具体使用方法

完成具体的用法 百度文科有 自己下下来word文档总比别人下载了贴在这里方便地址在下面 我刚看了一下是比较全的
2023-07-06 23:04:054

standard和criteria,criterion有什么差别

criteria是criterion的复数形式  criterion与standard的区别是前者是一般的标准,如择偶标准,后者的标准是组织和正府机构制定的标准,如空气的排放标准,质量标准等  请采纳如果你认可我的回答,敬请及时采纳,~如果你认可我的回答,请及时点击【采纳为满意回答】按钮~~手机提问的朋友在客户端右上角评价点【满意】即可。~你的采纳是我前进的动力~~O(∩_∩)O,记得好评和采纳,互相帮助
2023-07-06 23:04:121

java中criteria联查的使用方法

联合查询需要在对应的po有关联,然后criteria.createALias ,了解一下criteria的别名,其实就是连接表。你要统计可以使用投影criteria.setProjection,如统计行数可以用criteria.setProjection(Projections.rowCount()),统计field字段总数用setPrejection(Projections.sum(field)) 等。
2023-07-06 23:04:351

criteria与criterion两词有什么区别?

前者是后者的复数形式。
2023-07-06 23:04:422

(紧急)关于excel中的SUMIF函数在实际应用中的问题 这个函数中的criteria 最多只能识别对应16位数的编码

在哪些地方有数字编码,它们是什么意思?
2023-07-06 23:04:517

under criteria的说法对吗?不对的话criteria该和哪个介词搭配呢?

可以criteria该和介词by,at,of,in,on搭配例句Issued under stricter criteria, they provide added assurance for EV enabled web sites, that they are who they claim to be.该证书的颁发标准更加严格,它们对于声明支持 EV 的网站能够提供更充分的保障。The outcome was a general pressure to try to find a way to provide mortgages to those who, under normal criteria, would not qualify.结果是一个一般的压力,试图找到一种方式来提供贷款给那些在正常标准,不合格。At first, the rankings of the alternatives for the group under quantitative criteria were derived from the digital evaluation by linear weighted sum method.首先,对各决策者以数值进行评价的定量指标,用线性加权和法求得决策群体对供应商的排序;
2023-07-06 23:05:051

在Excel的DSUM函数中,database,field,和criteria分别指的是什么

DSUM(database,field,criteria)Database 构成列表或数据库的单元格区域。数据库是包含一组相关数据的列表,其中包含相关信息的行为记录,而包含数据的列为字段。列表的第一行包含着每一列的标志。Field 指定函数所使用的列。输入两端带双引号的列标签,如“使用年数”或“产量”;或是代表列表中列位置的数字(没有引号):1 表示第一列,2 表示第二列,依此类推。Criteria 是包含所指定条件的单元格区域。您可以对参数 criteria 使用任何区域,只要此区域包含至少一个列标签,并且列标签下包含至少一个在其中为列指定条件的单元格。Lookup_value LOOKUP 在第一个向量中搜索的值。Lookup_value 可以是数字、文本、逻辑值、名称或对值的引用。Lookup_vector 只包含一行或一列的区域。lookup_vector 中的值可以是文本、数字或逻辑值。要点 lookup_vector 中的值必须以升序顺序放置:...,-2, -1, 0, 1, 2, ...;A-Z;FALSE, TRUE。否则,LOOKUP 可能无法提供正确的值。大写文本和小写文本是等同的。Result_vector 只包含一行或一列的区域。它必须与 lookup_vector 大小相同。如果对这两个函数的应用不理解,可以在线百度hi我,说不定我可以帮到你。
2023-07-06 23:05:141

DetachedCriteria criteria = DetachedCriteria.forClass(BugDetail.class);是什么意思

分离标准=标准类独立标准(错误详细信息类)
2023-07-06 23:05:232

java的Hibernate框架中的Criteria查询方式,如何进行连表查询?

哥们,放弃JAVA吧,天堂有路你不走,地狱无门你闯进来啊
2023-07-06 23:05:492

请问excel里函数sumif(range,criteria,sun rang)

首先你得知道这个函数是干什么用的,其次你要清楚你想这些数据做何处理。看看EXCEL里的帮助吧,那里说得很详细。
2023-07-06 23:05:583

countifs多条件计数,当criteria为区域(数组)时怎么理解?求理论大神帮忙!

COUNTIFS是一个Excel函数,它可以根据多个条件统计特定的单元格数量。当一个条件是一个区域(数组)时,可以理解为这个区域是所有满足条件的单元格的集合。关于F列的公式,这需要根据具体的公式进行分析。如果您能提供具体的公式,我将很愿意帮助您进行分析。COUNTIFS函数内部进行的统计是对于给定的多个条件,找到所有满足条件的单元格,并统计它们的数量。因此,COUNTIFS函数可以用于统计满足特定条件的数据数量,例如,您可以使用COUNTIFS函数统计符合特定日期范围、特定数值范围和特定字符串的单元格数量。
2023-07-06 23:06:066

SUMIFS公式中 criteria1 能不能引用某一单元格内的值?如果能应该怎么弄呢?

在公式中可以引用某一单元格内的值,引用时有三种方法。一、相对引用。Excel中的引用默认为相对引用,也就是说,如果在公式里直接输入单元格的地址,就是相对引用。即在公式中对单元格的引用只相对于公式所在的位置,如果公式的位置改变,则公式引用的单元格地址也改变,但引用地址与公式之间的相对位置关系保持不变。二、绝对引用。在行号和列标的前面加上美元符号,就是绝对引用,公式中对单元格的引用只和单元格相对于工作表的位置有关,而与公式的位置无关。当使用绝对引用的公式位置改变时,不会影响公式的内容和结果。三、混合引用。如果只在行号前有美元符号,或只在列标前有美元符号,则为混合引用,表示只相对于单元格行的引用,或者相对于单元格列的运用。在混合引用的情况下,如果公式改变位置,引用中的绝对部分不会改变,而相对部分发生变化。
2023-07-06 23:06:392

inclusion criteria是什么意思

inclusion criteria纳入标准双语对照词典结果:inclusion criteria[英][u026anu02c8klu:u0292u0259n krau026au02c8tu026au0259ru026au0259][美][u026anu02c8kluu0292u0259n krau026au02c8tu026aru026au0259][医]选择标准; 以上结果来自金山词霸例句:1.Studies identified in your search that do not meet the inclusion criteria of the review maybe listed under characteristics of excluded studies, along with the reason each study wasexcluded. 检索到但不符合纳入标准的文献可以列入排除研究特征表(characteristics of excludedstudies)中,其中要包含排除理由。-----------------------------------如有疑问欢迎追问!满意请点击右上方【选为满意回答】按钮
2023-07-06 23:06:471

hibernate的query和criteria的区别

criteria是hibernate特有的查询的方法,是面向对象的一种查询,可以让没有sql基础的开发者也能够准确的使用hibernate来操作数据库。而query也分为两种,一种是普通的sql,另一种是hql。这里解释一下hql,hql就是面向对象的一种sql,表名对应的是类名,而表中的字段对应的就是类的属性。例如:sql : select * from user_info where id = 1;hql : from UserInfo where id = 1;
2023-07-06 23:06:561

Spring Data Mongodb的Criteria类(all、and、andOperator、elemMatch)

[](javascript:void(0); "添加到收藏夹") Criteria类提供了以下方法,所有这些方法都对应于MongoDB中的运算符: 匹配数组时,若文档中数组个数和顺序不满足要求时,无法进行匹配。 使用$all关键字可以取消该限制。 相当于 相当于 andOperator 解决的是查询的是同一个字段多个约束的问题,会生成 $and 操作符 相当于 默认情况下,多条件查询一个数组。文档内的数组一个元素满足所有条件,也可以是每个元素只满足一部分条件但加起来满足所有条件。 使用$elemMatch操作符表示要求数组中至少一个元素满足所有条件。 案例一:寻找成绩大于80小于90的数组。如果不使用 elemMatch 的话,文档数组中的每个元素只满足一部分条件但加起来满足所有条件即可。 若不使用 elemMatch ,那么60小于90,120大于80, 数组2 也会输出。 得到的数据: 案例二:其中members是一个数组,包含的是每个群组成员的ID,假设要查询ID是2的用户参与的组。 实际的执行语句: 案例三:将 key=area,value=IT 的对象所在的文档筛选出来。 正确案例: 最终输出的原生语句: 错误案例: 内置文档数组默认是一个元素满足所有条件也可以每个元素只满足一部分条件但加起来满足所有条件。 内联数组的两个文档均满足部分的 key=area,value=IT 条件,也可以完成筛选。 最终输出的原生语句: spring mongodb Criteria中"and"与"andOperator"方法的区别及"$and"如何工作 Spring Data Mongodb的官方文档 java 中使用Criteria 进行mongodb的各种操作 模糊查询 精确查询 等等
2023-07-06 23:07:021

Criteria 类是用来做什么的?api中貌似没得

你应该查询Hibernate API。用来实现复杂条件查询的吧。
2023-07-06 23:07:093

hibernate criteria模糊查询 怎么写

Hibernate-Criteria 模糊查询Criteria Query通过面向对象化的设计,将数据查询条件封装为一个对象。简单来 讲,Criteria Query可以看作是传统SQL的对象化表示,如: Criteria criteria = session.createCriteria(User.class); criteria.add(Expression.eq("name","Erica")); criteria.add(Expression.eq("sex",new Integer(1))); 这里的criteria 实例实际上是SQL “Select * from t_user where name="Erica" and sex=1”的封装(我们可以打开Hibernate 的show_sql 选项
2023-07-06 23:07:191

怎么使用Criteria 添加一个最大时间的条件

用工具栏“插入函数”可以通过“有关该函数的帮助”查看函数的具体用法。SUMIFS对某一区域内满足多重条件的单元格求和。要点 SUMIFS 和 SUMIF 的参数顺序不同。具体而言,sum_range 参数在 SUMIFS 中是第一个参数,而在 SUMIF 中则是第三个参数。如果要复制和编辑这些相似函数,请确保按正确顺序放置参数。语法SUMIFS(sum_range,criteria_range1,criteria1,criteria_range2,criteria2…)Sum_range 是要求和的一个或多个单元格,其中包括数字或包含数字的名称、数组或引用。空值和文本值会被忽略。Criteria_range1, criteria_range2, … 是计算关联条件的 1 至 127 个区域。Criteria1, criteria2, … 是数字、表达式、单元格引用或文本形式的 1 至 127 个条件,用于定义要对哪些单元格求和。例如,条件可以表示为 32、"32"、">32"、"apples" 或 B4。
2023-07-06 23:07:261

Mybatis中example[Criteria]使用

我们这个直接看源码看如何由example映射到sql语句 Stock.java 只有5个属性。 StockMapper.java: 我看只看countByExample接口,看名字就知道是返回给定example参数的结果个数。 再看 StockMapper.xml该方法实现: 很简单给定参数类型StockExample 返回Long类型 select count(*) from stock 返回满足条件的stock表中数据数量 再看<include refid="Example_Where_Clause" /> foreach表示循环,分隔符是or(或者)重点在于数据集oredCriteria,我们去给定参数StockExample中寻找oredCriteria 是一个List刚好和上面的集合对应了,看看单个Criteria是什么 再看GeneratedCriteria 我们发现Criteria里面居然还有一个list,我们翻上去看刚好与上面一个foreach里面还有一个foreach对应,那接下来研究Criterion 这就是该类的声明,里面有这些值,这时候应该结合着之前xml第二层foreach属性看了,知道这些值有啥用 一看我们根据when知道有四类情况,noValue,singleValue,betweenValue,listValue,对应着查询中四种情况 1.只是单纯是否非空 2.value=?多少查询 3.两者之间查询 4.在list中查询。 所以我们构建的查询参数就是criterion,看一下上面四种咋构建吧 以下均是lGeneratedCriterial类中方法,addCriterion是把生成的Criterion加到Ctriteria中 1.是否非空: 2.值查询 public Criteria andIdEqualTo(Integer value) { addCriterion("id =", value, "id"); return (Criteria) this; } 3.两者之间 public Criteria andSaleNotBetween(Integer value1, Integer value2) { addCriterion("sale not between", value1, value2, "sale"); return (Criteria) this; } 4.list public Criteria andVersionNotIn(List<Integer> values) { addCriterion("version not in", values, "version"); return (Criteria) this; } 完结,相信通过上面的源码剖析,大家都知道如何构建查询条件了把。 总结 StockExample.java 构造 三个参数 orderByClause:返回结果升降排序,字段+空格+acs/dcs(升序/降序)例子count acs setOrderByClause方法注入 distinct:true/false 返回结果去不去重复,setDistinct注入 oredCriteria:就是查询参数,之前狗讲了啥意思,构造方法 构造Criteria 收工。
2023-07-06 23:07:331

index和criteria的区别

index [in·dex· || "u026andeks]n. 索引, 指数, 指针v. 编入索引中; 指出criterion [cri·te·ri·on || krau026a"tu026au0259ru026au0259n]n. 标准; 规范; 准据
2023-07-06 23:07:401

criteria是什么意思?怎么读?能举出例句么?

criteria [krai"tiu0259riu0259] n. 标准,条件(criterion的复数) The criteria will be different from those that pertain elsewhere.这里的标准将不同于其他地方适用的标准。《21世纪大英汉词典》
2023-07-06 23:08:193

函数criteria是什么意思

在countif函数中,criteria指的是在某行或某列中所拥有的相关文字或数字数量。例子:在column A中穿插键入10个以下的A,B或C,使用countif函数计算该column中有几个A,在某单元个内键入=countif(A1:A10,"A").A1:A10指的是range,而"A"指的是要excell帮忙计算从A1到A10中,到底有几个A。尝试上述例子,或许能够帮你理解criteria的意思。
2023-07-06 23:10:431

Excel里的数据库函数的criteria是什么意思?

在countif函数中,criteria指的是在某行或某列中所拥有的相关文字或数字数量。例子:在column A中穿插键入10个以下的A,B或C,使用countif函数计算该column中有几个A,在某单元个内键入=countif(A1:A10,"A").A1:A10指的是range,而"A"指的是要excell帮忙计算从A1到A10中,到底有几个A。尝试上述例子,或许能够帮你理解criteria的意思。
2023-07-06 23:11:011

criteria造句

1、Then I"ll give general design criteria and I"m only going to feature just a few.我会给你们总体的设计标准,我不只会给一些设计的特点。2、"Honestly, it"s too early to test or set criteria for children who are only seven."坦白说,对仅仅7岁大的孩子进行考查或设立什么标准确实为时过早。3、Criteria of this classification system are outlined later in this article.本文稍后将简要描述这种分类系统的标准。4、Pi is the priority value of the ith criteria group.Pi是第 i 个标准组的优先级的值。5、You can preload messages and assign specific criteria to when they should be sent.你可以预紧讯息,并指派特定标准时,应发出。6、Those perceptions depend upon their sharing criteria and authorities in case of dissensus.如果意见分歧,这些看法取决于他们的共同标准和权威。
2023-07-06 23:11:141

criteria函数怎么用

在countif函数中,criteria指的是在某行或某列中所拥有的相关文字或数字数量。例子:在column A中穿插键入10个以下的A,B或C,使用countif函数计算该column中有几个A,在某单元个内键入=countif(A1:A10,"A").A1:A10指的是range,而"A"指的是要excell帮忙计算从A1到A10中,到底有几个A。尝试上述例子,或许能够帮你理解criteria的意思。
2023-07-06 23:11:351

Criteria 和 DetachedCriteria的区别与使用

Criteria 和 DetachedCriteria 的主要区别在于创建的形式不一样, Criteria 是在线的,所以它是由 Hibernate Session 进行创建的;而 DetachedCriteria 是离线的,创建时无需Session,DetachedCriteria 提供了 2 个静态方法 forClass(Class) 或 forEntityName(Name)进行DetachedCriteria 实例的创建。 Spring 的框架提供了getHibernateTemplate().findByCriteria(detachedCriteria) 方法可以很方便地根据DetachedCriteria 来返回查询结果。Criteria 和 DetachedCriteria 均可使用 Criterion 和 Projection 设置查询条件。可以设置 FetchMode( 联合查询抓取的模式 ) ,设置排序方式。对于 Criteria 还可以设置 FlushModel(冲刷 Session 的方式)和 LockMode (数据库锁模式)。
2023-07-06 23:11:421

英语criteria和standard作为标准区别是什么?

两个差别很大,意思大不相同,criteria 不是标准,是条件或因素。standards 单纯讲“标准”
2023-07-06 23:11:491

criteria怎么做分组查询

建议用hibernate离线查询方式实现,如:Criteria criteria = createCriteria(Product.class);DetachedCriteria dc = DetachedCriteria.forClass(Specification.class,"s");dc.add(Restrictions.le("price", price));criteria.add(Subqueries.notExists(dc));
2023-07-06 23:12:071

example里criteria怎么用and

criteria 英[krau026a"tu026au0259ru026au0259] 美[krau026au02c8tu026aru026au0259] n. (批评、判断等的) 标准,准则( criterion的名词复数 ); (criterion的复数) ; [例句]Each hotel is inspected and, if it fulfils certain criteria, is recommended.会对每家旅馆都进行检查,如果它达到了一定的标准,就获得推荐。[其他] 原型: criterion
2023-07-06 23:12:151

specification和criteria有什么不同?

specification是规格,详细说明书的意思;criteria是标准,准则的意思。
2023-07-06 23:12:221

请教Hibernate 的 Criteria 的 in 查询

Hibernate中提供了三种查询方式,分别为HQL、Criteria查询、本地化SQL查询,实际应用中,有很多人忽略了Criteria的用处,觉得不如另外两种贴近SQL方式便捷,实际则未必,很多情况下Criteria更具有优势;本篇文章就对Criteria查询做一个全面的介绍,以期尽可能的将更多的Criteria强大的查询功能展现出来;1、首先新建一个Maven Web Project项目,本次使用的是hibernate4.3.11版本,使用MySql数据库,添加如下依赖:[html] view plain copy<!-- 引入mysql jar依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <!-- 引入hibernate依赖 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.3.11.Final</version> </dependency> 新建完毕后,项目结构如下:2、entity包下面放置的是通过Hibernate反向工程生成的实体映射类,samples包下面放置测试类,同样hibernate.cfg.xml文件需要配置,在此就不一一展示了,好了,准备工程就这么多,下面开始介绍Criteria的实际操作;3、Criteria查询3.1 获取Criteria对象[java] view plain copypackage com.hibernate.samples; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.hibernate.entity.SlEmployee; public class HibernateTest { // 声明一个Hibernate Session类型的变量 private Session session; @Before public void getSession(){ Configuration config = new Configuration().configure(); SessionFactory sessionFactory = config.buildSessionFactory(); session = sessionFactory.openSession(); } @After public void closeSession(){ if(session != null){ session.close(); } } @Test public void doCreateCriteriaInstance(){ // 获取Criteria实例对象 Criteria criteria = session.createCriteria(SlEmployee.class); Assert.assertNotNull(criteria); } } 3.2 在SQL中,我们可以通过WHERE关键字对条件进行定义,那么在Criteria中呢?看例子[java] view plain copy@Test public void doConditionQueryInCriteria() { // 获取Criteria实例对象 Criteria criteria = session.createCriteria(SlEmployee.class); // 查询出王姓员工且收入在3000到5000之间的 // 类似于HQL中 WHERE employeeName LIKE "王%" AND salary BETWEEN 3000 AND 5000 List emps = criteria.add(Restrictions.like("employeeName", "王%")) .add(Restrictions.between("salary", 3000.0, 5000.0)).list(); // 查询出工资在4000以下或5000以上的王姓员工 // 可以通过Restrictions的or或and进行逻辑分组 emps = criteria.add(Restrictions.like("employeeName", "王%")) .add(Restrictions.or(Restrictions.gt("salary", 5000D), Restrictions.lt("salary", 3000D))).list(); // 查询出岗位是软件工程师或测试工程师,且学历是硕士、本科或大专的员工有哪些 emps = criteria.add(Restrictions.in("position", new String[] { "软件工程师", "测试工程师" })) .add(Restrictions.disjunction().add(Restrictions.eq("degree", "硕士")).add(Restrictions.eq("degree", "本科")) .add(Restrictions.eq("degree", "大专"))) .list(); } 上述三个查询可以看出Restrictions类提供了内建Cretirion类型来满足各种查询状况,此外Criteria还有一个特别强大的功能,那就是允许你直接指定SQL查询,看例子[html] view plain copyList emps = criteria.add(Restrictions.sqlRestriction("birthday > "1980-01-01" AND employee_name like "刘%"")).list(); 上述无论是birthday还是employee_name都是数据库中表的字段名称,看起来是不是特别好用,此外还可以直接通过属性实例构建查询条件,比如要查询出学习是高中、中专的员工有哪些:[java] view plain copyList emps = criteria.add(Property.forName("degree").in(new String[]{"高中","中专"})).list(); 3.3 对结果集进行排序,同样可以分为上述两种方式[java] view plain copyList emps = criteria.add(Restrictions.sqlRestriction("birthday > "1970-01-01"")).addOrder(Order.asc("birthday")) .addOrder(Order.desc("salary")).list(); List emps = criteria.add(Restrictions.sqlRestriction("birthday > "1970-01-01"")) .addOrder(Property.forName("birthday").asc()).addOrder(Property.forName("salary").desc()).list(); 3.4 上述几个例子直接演示了对我们想要实体的操作,大家都知道每个实体都会有好多关联实体,比如一个请假实体类会关联请假申请人与审批人、一篇博客会关联作者和分类信息实体、一个订单会关联多个商品实体,顾客实体,地址实体等,如果此时我们想通过对关联实体的限制,最终限制想要的实体,那应该怎么处理呢,看例子;[java] view plain copy// 比如我们想查询北京各个公司中,员工学历中包括高中、中专、大专的公司部门有哪些 List depts = criteria.add(Restrictions.sqlRestriction("dept_name LIKE "北京%"")) .createCriteria("slEmployees").add(Restrictions.in("degree", new String[]{"高中","中专","大专"})).list(); 上述方法生成下列SQL文[sql] view plain copyfrom sl_dept this_ inner join sl_employee slemployee1_ on this_.dept_id=slemployee1_.DEPT_ID where dept_name LIKE "北京%" and slemployee1_.DEGREE in ( ?, ?, ? ) 通过该实例我们可以得出:a)可以通过createCriteria方法来通过关联实体限制最终查询实体;b)默认采用内连接的方式关联查询那么如果我们想采用比如左连接,右连接甚至是全外连接的话又该怎么做呢,看例子:[java] view plain copyList depts = criteria.add(Restrictions.sqlRestriction("dept_name LIKE "北京%"")).createAlias("slEmployees", "emps2", JoinType.LEFT_OUTER_JOIN, Restrictions.gt("salary",6000.0)).list(); 生成SQL如下:[sql] view plain copyfrom sl_dept this_ left outer join sl_employee emps2x1_ on this_.dept_id=emps2x1_.DEPT_ID and ( emps2x1_.SALARY>? ) where dept_name LIKE "北京%" 另外同样在createCriteria方法中也同样可以指定查询方式;
2023-07-06 23:12:291

请教Hibernate 的 Criteria 的 in 查询

Criteria criteria = createCriteria(shenroll.class); criteria.add(Restrictions.eq("shActId",shActId)); criteria.add(Restrictions.eq("shUserId",shUserId));
2023-07-06 23:12:361

hibernate使用criteria怎么实现排序分组

/** * 使用对象的查询方法 * * @param c:查询的类 * @param obj:查询的对象 * @param orber:按那个字段排序 * @param row:每页多少条记录 * @param page:第几页 * @return List: 集合 */ public List find(Class c, Object obj, String[] orber, int row, int page) { List list = null; try { Criteria criteria = HibernateSessionFactory.getSession() .createCriteria(c); if (obj != null) { Example example = Example.create(obj); example.enableLike(MatchMode.ANYWHERE);// 匹配模式,使用模糊查询必填项。 example.excludeNone();// 空的不做查询条件 example.excludeZeroes();// 0不要查询 example.ignoreCase(); // 不区分大小写 criteria.add(example); } if (row > 0 && page > 0) { criteria.setMaxResults(row);// 最大显示记录数 criteria.setFirstResult((page - 1) * row);// 从第几条开始 } // 判断是否有排序请求,如果有加入到排序方法中 if (orber != null) { for (int i = 0; i < orber.length; i++) criteria.addOrder(Order.desc(orber[i])); } list = criteria.list(); return list; } catch (HibernateException e) { e.printStackTrace(); return null; } finally { HibernateSessionFactory.closeSession(); } } /** * 使用HQL查询语句 * * @param hql:hql语言 * @param row:每页显示多少记录 * @param page:显示第几页 * @param params: * 所传的对应参数 * @return List: 返回集合 */ public List find(String hql, int row, int page, ArrayList params) { try { query = HibernateSessionFactory.getSession().createQuery(hql); if (null != params) {// 循环把给参数赋值 for (int i = 0; i < params.size(); i++) { query.setParameter(i, params.get(i)); } } if (row > 0 && page > 0) { query.setMaxResults(row);// 每页显示多少条记录 query.setFirstResult((page - 1) * row);// 显示第几条记录 } return query.list(); } catch (HibernateException e) { e.printStackTrace(); return null; } finally { HibernateSessionFactory.closeSession(); } }
2023-07-06 23:12:431

mybatis 怎么自动生成 criteria 语句

用过Hibernate的人都知道,hibernate 是可以配置 show_sql 显示 自动生成的SQL 语句,用format_sql 可以格式化SQL 语句,但如果用 mybatis 怎么实现这个功能呢, 在网上搜索了下,基本都是通过配置日志来实现的,比如配置我们最常用的 log4j.properties 来实现。log4j.properties 内容程序代码log4j.rootCategory=info, stdout , Rlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%nlog4j.appender.R=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.R.File=D:/my_log.loglog4j.appender.R.layout=org.apache.log4j.PatternLayoutlog4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%nlog4j.logger.com.ibatis=debuglog4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debuglog4j.logger.com.ibatis.common.jdbc.ScriptRunner=debuglog4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debuglog4j.logger.java.sql.Connection=debuglog4j.logger.java.sql.Statement=debuglog4j.logger.java.sql.PreparedStatement=debug,stdout 有人在网上说不能用 slf4j.jar ,这个说法应该是错误的, slf4j 只是提供了很多接口,可以供很多日志系统用,并不是具体的解决方案,我的jar 包用到 slf4j-api-1.5.8.jarslf4j-log4j12-1.5.8.jarlog4j-1.2.15.jar貌似版本比较老,但可以使用,可以参考一下。通过这种方式mybatis 就可以在控制台打印出sql语句,并且也可以写到日志文件中去。但是还没有format sql, 我也在研究,不过目前没进展,应该mybatis 不支持吧。
2023-07-06 23:12:501