Hibernate查询_Criteria

合集下载

hibernate sql写法

hibernate sql写法

hibernate sql写法Hibernate是一个开源的、高效的、强大的Java持久化框架,它提供了面向对象的方式来操作关系型数据库。

使用Hibernate,开发者可以以一种简单、灵活的方式进行数据库操作,而无需编写大量的SQL 语句。

在Hibernate中,我们可以通过编写映射文件或注解来定义实体类与数据库表之间的映射关系,通过Session对象来执行对数据库的操作。

在Hibernate中,SQL语句可以通过多种方式来编写。

下面将针对Hibernate中的SQL编写进行详细介绍。

1. HQL(Hibernate Query Language)Hibernate Query Language(HQL)是一种面向对象的查询语言,它类似于SQL语句,但是使用的是实体类和属性名,而不是表名和列名。

HQL可以实现对实体对象的查询、更新和删除等操作。

以下是HQL的一些常用语法:-查询所有的实体对象:FROM实体类名-条件查询:FROM实体类名WHERE条件-投影查询:SELECT属性列表FROM实体类名-排序查询:FROM实体类名ORDER BY属性ASC/DESC-分页查询:FROM实体类名LIMIT开始位置,查询数量HQL的编写与SQL类似,但是可以直接使用实体类和属性名,从而更加面向对象。

例如,以下HQL语句可以查询出所有年龄大于18岁的用户:FROM User WHERE age > 182.原生SQL查询除了HQL,Hibernate还支持原生的SQL查询。

原生SQL查询可以直接编写传统的SQL语句,但是需要使用Session对象的createNativeQuery方法来执行。

以下是原生SQL查询的一些常用语法:-执行查询:session.createNativeQuery("SELECT * FROM表名").getResultList()-执行更新或删除:session.createNativeQuery("UPDATE/DELETE FROM表名WHERE条件").executeUpdate()-参数绑定:Query.setParameter(参数名,参数值)原生SQL查询可以更灵活地操作数据库,但是需要注意SQL语句的安全性和兼容性问题。

criteriaquery 检索nested类型 -回复

criteriaquery 检索nested类型 -回复

criteriaquery 检索nested类型-回复CriteriaQuery是Hibernate框架中的一种查询方法,用于进行复杂的查询操作。

在本文中,我们将重点介绍如何使用CriteriaQuery来检索nested类型的数据。

第一步:了解nested类型Nested类型是一种特殊的数据类型,它允许将一个文档嵌套在另一个文档中。

在关系型数据库中,我们通常使用外键来建立文档之间的关系,而在NoSQL数据库中,使用nested类型可以更方便地表示文档之间的嵌套关系。

第二步:创建实体类和映射文件在使用CriteriaQuery检索nested类型之前,我们首先需要创建相应的实体类和映射文件。

假设我们有两个实体类:Order和Product,其中Order中包含一个名为products的nested类型的属性。

我们可以使用注解或XML文件来定义实体类和映射关系。

第三步:创建CriteriaBuilder和CriteriaQuery对象在使用CriteriaQuery之前,我们需要创建CriteriaBuilder和CriteriaQuery对象。

CriteriaBuilder是用于构建查询条件的类,而CriteriaQuery是用于构建查询语句本身的类。

javaCriteriaBuilder cb = session.getCriteriaBuilder();CriteriaQuery<Order> cq = cb.createQuery(Order.class);Root<Order> root = cq.from(Order.class);第四步:创建Join对象由于我们要检索nested类型的数据,因此需要使用Join操作来处理嵌套在Order中的products属性。

我们可以使用CriteriaQuery的join方法来创建Join对象。

javaJoin<Order, Product> productJoin = root.join("products");第五步:设置查询条件在使用CriteriaQuery进行查询之前,我们还可以设置各种查询条件。

Criteria查询

Criteria查询

Criteria查询实现分页 2-1
Criteria 的setMaxResults()方法可以限定查询 返回数据的行数 Criteria 的setFirstResult()设定查询返回结果 的第一行数据的位置 结合以上Criteria的两个方法即可实现简单分页
Criteria查询实现分页 2-2
Criteria查询排序 2-1
Criteria 查询不仅能组合出SQL中where子句的 功能,还可以组合出排序查询功能 使用org.hibernate.criterion.Order对结果进行 排序 排序的方法为:
asc() desc()
Criteria查询排序 2-2
SessionFactory sessionFactory = new Configuration().configure() 创建Criteria对象 .buildSessionFactory(); Session session = sessionFactory.openSession(); Criteria criteria = session.createCriteria(House.class); criteria.addOrder(Order.desc("price")); List result = criteria.list(); 以价格降序的方式排列 Iterator it = result.iterator(); while (it.hasNext()) { 加入Order 条件 House house = (House) it.next(); System.out.println("标题:" + house.getTitle() + " 价格" + house.getPrice()); } session.close(); sessionFactory.close(); 演示示例:Criteria排序

Hibernate查询详解

Hibernate查询详解

Hibernate查询首先介绍get()和load()方法的区别:get()方法和load()方法的区别主要在于对二级缓存的使用上。

load()方法会使用二级缓存,而get()方法在一级缓存没有找到会直接查询数据库,不会去二级缓存中查找。

get():如果在数据库中没有记录会返回空,get()无论如何都会返回数据.load():如果数据库中没有记录会抛出异常,如果有数据返回的是一个代理对象。

list和iterator()方法之间的区别:(N+1?)list()方法在执行时,直接运行查询结果所需要的查询语句。

iterator()方法则是先执行得到对象ID的查询,然后在根据每个ID值去取得所要查询的对象。

因此:对于list()方式的查询通常只会执行一个SQL语句,而对于iterator()方法的查询则可能需要执行N+1条SQL语句(N为结果集中的记录数).结果集的处理方法不同:list()方法会一次活的所有的结果集对象,而且他会依据查询的结果初始化所有的结果集对象。

如果在结果集非常庞大的时候会占据非常多的内存,甚至会造成内存溢出的情况发生。

iterator()方法在执行时不会一次初始化所有的对象,而是根据对结果集的访问情况来初始化对象。

一次在访问中可以控制缓存中对象的数量,以避免占用过多的缓存,导致内存溢出情况的发生。

HQL:HQL是一种面向对象的查询语言,HQL的操作对象是类、实例和属性等。

SQL:sql的操作对象是数据表和列等数据对象。

Hql是完全面向对象的查询语言,因此可以支持继承和多条等特征。

HQL查询依赖于Query类,每个Query实例对应一个查询对象。

定参数的功能,Query 接口才是真正的HQL查询接口。

//创建一个Query 对象Java代码1Query query = session.createQuery ("from Customer as c where=:customerName and c.age=:customerAge");//动态绑定参数Java代码2query.setString("customerName","Tom");3query.setInteger("customerAge",21);//执行查询语句,返回结果Java代码4List result = query.list();HQL查询步骤:1:获取Hibernate Session对象。

Criteria

Criteria

order
ID varchar2(14)
order_number number(10)
customer_ID varchar2(14)
现在有两条HQL查询语句,分别如下:
from Customer c inner join c.orders o group by c.age;(1)
select c.ID,,c.age,o.ID,o.order_number,o.customer_ID
for(int i=0;i
System.out.println(list.get(i));
}
我们只检索了User实体的name属性对应的数据,此时返回的包含结果集的list中每个条目都是String类型的name属性对应的数据。我们也可以一次检索多个属性,如下面程序:
List list=session.createQuery(“select ,user.age from User user ”).list();
Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询方式,同时也提供了更加面向对象的封装。完整的HQL语句形势如下:
from User user where user.age=20 and like ‘%zx%’;
2、 实体的更新和删除:
在继续讲解HQL其他更为强大的查询功能前,我们先来讲解以下利用HQL进行实体更新和删除的技术。这项技术功能是Hibernate3的新加入的功能,在Hibernate2中是不具备的。比如在Hibernate2中,如果我们想将数据库中所有18岁的用户的年龄全部改为20岁,那么我们要首先将年龄在18岁的用户检索出来,然后将他们的年龄修改为20岁,最后调用Session.update()语句进行更新。在Hibernate3中对这个问题提供了更加灵活和更具效率的解决办法,如下面的代码:

hibernateCriteria关联查询

hibernateCriteria关联查询

hibernateCriteria关联查询hibernate Criteria 关联查询0、配置文件增加property-ref1、测试通过Criteria查询关联表;2、查询策略外连接;3、通过外键关联查询;4、配置文件增加inverse=true// Criteria查询语句的补充// 一、复合查询// 在这个一对多的例子中。

我们使用复合查询,查询所有用户及其地址。

// Criteria criteria = session.createCriteria(User.class);// List list = criteria.list();//// for (int i = 0; i < list.size(); i++) {// User user = (User) list.get(i);// System.out.println("\t user:"+i+" name is:" + user.getNam e());//// Set addrSet = user.getAddresses();// Iterator it = addrSet.iterator();// while(it.hasNext()){// Address addr = (Address)it.next();// System.out.println("\t\t user:"+i+" address is:"+addr.getA ddress());// }// }// 通过Criteria查询条件,我们可以查询位于上海的用户// Criteria criteria = session.createCriteria(User.class);//// Criteria addCriteria =// criteria.createCriteria("addresses");//这里addresses和User 类对应// addCriteria.add(Expression.like("address",// "%shanghai%"));//这里构造新的Criteria查询过滤条件// List list = criteria.list();//// for (int i = 0; i < list.size(); i++) {// User user = (User) list.get(i);// System.out.println("\t user:" + i + " name is:" + user.getN ame());//// Set addrSet = user.getAddresses();// Iterator it = addrSet.iterator();// while (it.hasNext()) {// Address addr = (Address) it.next();// System.out.println("\t\t user:" + i + " address is:"// + addr.getAddress());// }// }/zj%5Fchen/blog/item/35631384eb2f74 3267096e96.html4. 关联你可以使用createCriteria()非常容易的在互相关联的实体间建立约束。

Criteria

Criteria

hibernate 中Criteria 的使用介绍要对资料库管理系统进行操作,最基本的就是使用SQL(Standard Query Language)语句,大部份的资料库都支援标准的SQL语句,然而也有一些特定于资料库的SQL语句,应用程式配合SQL 语句进行资料库查询时,若使用到特定于资料库的SQL语句,程式本身会有相依于特定资料库的问题。

使用Hibernate时,即使您不了解SQL的使用与撰写,也可以使用它所提供的API来进行SQL语句查询,org.hibernate.Criteria对SQL进行封装,您可以从Java物件的观点来组合各种查询条件,由Hibernate自动为您产生SQL语句,而不用特别管理SQL与资料库相依的问题。

以最基本的查询来说,如果您想要查询某个物件所对应的资料表中所有的内容,您可以如下进行查询:Criteria criteria = session.createCriteria(User.class);List users = criteria.list();for(Iterator it = users.iterator(); it.hasNext(); ) {User user = (User) it.next();System.out.println(user.getId() +" "t " + user.getName() +"/" + user.getAge());}Criteria建立后,若不给予任何的条件,预设是查询物件所对应表格之所有资料,如果您执行以上的程式片段,并于设定档中设定了了Hibernate的”show_sql”属性,则可以在主控下看到以下的SQL 语句之产生:Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_Criteria基本查询条件设定org.hibernate.Criteria实际上是个条件附加的容器,如果想要设定查询条件,则要使用org.hibernate.criterion.Restrictions的各种静态方法传回org.hibernate.criterion.Criteria实例,传回的每个org.hibernate.criterion.Criteria实例代表着一个条件,您要使用org.hibernate.Criteria的add()方法加入这些条件实例,例如查询”age”大于20且小于40的资料:Criteria criteria = session.createCriteria(User.class);criteria.add(Restrictions.gt("age", new Integer(20)));criteria.add(Restrictions.lt("age", new Integer(40)));List users = criteria.list();for(Iterator it = users.iterator(); it.hasNext(); ) {User user = (User) it.next();System.out.println(user.getId() +" "t " + user.getName() +"/" + user.getAge());}Restrictions的gt()方法表示大于(great than)的条件,而lt表示小于(less than)的条件,执行以上程式片段,观察所产生的SQL语句,将使用where与and子句产来完成SQL的条件查询:Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ where this_.age>? and this_.age使用add()方法加入条件时,预设是使用and来组合条件,如果要用or的方式来组合条件,则可以使用Restrictions.or()方法,例如结合age等于(eq)20或(or)age为空(isNull)的条件:Criteria criteria = session.createCriteria(User.class);criteria.add(Restrictions.or(Restrictions.eq("age", new Integer(20)),Restrictions.isNull("age")));List users = criteria.list();观察所产生的SQL语句,将使用where与or子句完成SQL的条件查询:Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ where (this_.age=? or this_.age is null)您也可以使用Restrictions.like()方法来进行SQL中like子句的功能,例如查询”name”中名称为”just”开头的资料:Criteria criteria = session.createCriteria(User.class);criteria.add(Restrictions.like("name", "just%"));List users = criteria.list();观察所产生的SQL语句如下:Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ where this_.name like ?Restrictions的几个常用限定查询方法如下表所示:方法说明Restrictions.eq 等于Restrictions.allEq 使用Map,使用key/value进行多个等于的比对Restrictions.gt 大于>Restrictions.ge 大于等于>=Restrictions.lt 小于<Restrictions.le 小于等于<=Restrictions.between 对应SQL的BETWEEN子句Restrictions.like 对应SQL的LIKE子句Restrictions.in 对应SQL的in子句Restrictions.and and关係Restrictions.or or关係Criteria进阶查询条件设定使用Criteria进行查询时,不仅仅能组合出SQL中where子句的功能,还可以组合出如排序、统计、分组等的查询功能。

criteria对象 逻辑运算查询

criteria对象 逻辑运算查询

criteria对象逻辑运算查询一、引言在许多数据库应用中,我们经常需要使用查询语句来检索符合特定条件的数据。

Criteria对象是Hibernate等ORM框架提供的一种用于构建复杂查询的方法,它允许我们在实体类或映射文件中创建复杂的查询条件。

在本篇文章中,我们将介绍Criteria对象中逻辑运算查询的基本概念和用法。

二、基本逻辑运算符在Criteria对象中,我们通常使用AND、OR和NOT等逻辑运算符来组合查询条件。

这些运算符可以根据需要组合多个属性比较、集合比较、函数查询等操作符,从而构建复杂的查询语句。

以下是一些常用的逻辑运算符:* AND:表示两个条件都必须满足。

* OR:表示两个条件中至少有一个满足。

* NOT:表示否定一个条件。

三、示例查询以下是一个使用Criteria对象进行逻辑运算查询的示例:假设我们有一个User实体类,其中包含id、name和age三个属性。

我们想要查询年龄大于等于18岁且姓名包含“张”的所有用户。

```java// 创建Criteria对象Criteria criteria = session.createCriteria(User.class);// 添加条件:年龄大于等于18岁criteria.add(Property.ge("age", 18));// 添加条件:姓名包含“张”criteria.add(Property.like("name", "张%"));// 执行查询List<User> users = criteria.list();```在上述示例中,我们首先创建了一个Criteria对象,并使用add 方法添加了两个条件:年龄大于等于18岁和姓名包含“张”。

最后,我们使用list方法执行查询,并获取符合条件的User对象的列表。

四、多重条件查询在某些情况下,我们可能需要同时满足多个条件。

hibernate 重写 criteria的order排序方式

hibernate 重写 criteria的order排序方式

hibernate 重写criteria的order排序方式在Hibernate中,要重写Criteria的排序方式,你可以使用`org.hibernate.criterion.Order`类,该类允许你指定排序的属性和排序方式。

下面是一个示例,展示如何使用Criteria进行排序:```javaimport org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Criteria;import org.hibernate.criterion.Order;import org.hibernate.criterion.Restrictions;import java.util.List;public class YourClass {public List<YourEntity> getDataWithCustomOrder(SessionFactory sessionFactory) { Session session = sessionFactory.openSession();Criteria criteria = session.createCriteria(YourEntity.class);// 添加一些条件,如果需要的话criteria.add(Restrictions.eq("someProperty", someValue));// 添加自定义排序criteria.addOrder(Order.asc("propertyName")); // 按升序排序// 或者criteria.addOrder(Order.desc("propertyName")); // 按降序排序List<YourEntity> result = criteria.list();session.close();return result;}}```在上述示例中,`YourEntity`是你要查询的实体类,`someProperty`是你添加的其他条件,`propertyName`是你要排序的属性名称。

Criteria用法详解

Criteria用法详解

hibernate:Hibernate中Criteria的完整使用方法疯狂代码 / ĵ:http://Java/Article58225.html 最近在项目中使用 Spring 和 Hibernate 进行开发有感于 Criteria 比较好用在查询思路方法设计上可以灵活根据 Criteria 特点来方便地进行查询条件组装现在对 HibernateCriteria 使用方法进行整理总结: Hibernate 设计了 CriteriaSpecication 作为 Criteria 父接口下面提供了 Criteria和DetachedCriteria Criteria 和 DetachedCriteria 主要区别在于创建形式不样 Criteria 是在线所以它是由 Hibernate Session 进行创建;而 DetachedCriteria 是离线创建时无需SessionDetachedCriteria 提供了 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(Object entity) 即根据个对象(实际使用中般是映射到数据库对象)来创建然后可以设置些过滤条件: Example exampleUser =Example.create(u) .ignoreCase // 忽略大小写 .enableLike(MatchMode.ANYWHERE); // 对 String 类型属性无论在那里值在那里都匹配相当于 %value% Project 主要是让 Criteria 能够进行报表查询并可以实现分组 Project 主要有 SimpleProjection 、ProjectionList 和 Property 3个实现其中SimpleProjection 和 ProjectionList 例子化是由内建 Projections 来完成如提供 avg 、 count 、 max 、 min 、 sum 可以让开发者很容易对某个字段进行统计查询 Property 是对某个字段进行查询条件设置如通过Porperty.forName(“color”).in(String{“black”,”red”,”write”}); 则可以创建个 Project 例子通过 criteria add(Project) 思路方法加入到查询条件中去 使用 Criteria 进行查询主要要清晰是 Hibernate 提供了那些类和思路方法来满足开发中查询条件创建和组装下面介绍几种使用方法: 1. 创建个Criteria 例子 org.hibernate.Criteria接口表示特定持久类个查询Session是 Criteria例子工厂Criteria crit = sess.createCriteria(Cat.);crit.MaxResults(50);List cats = crit.list; 2. 限制结果集内容 个单独查询条件是org.hibernate.criterion.Criterion 接口个例子 org.hibernate.criterion.Restrictions类 定义了获得某些内置Criterion类型工厂思路方法List cats = sess.createCriteria(Cat.) .add( Restrictions.like("name", "Fritz%") ) .add( Restrictions.between("weight", minWeight, maxWeight) ) .list; 约束可以按逻辑分组List cats = sess.createCriteria(Cat.) .add( Restrictions.like("name", "Fritz%") ) .add( Restrictions.or( Restrictions.eq( "age", Integer(0) ), Restrictions.isNull("age") ) ) .list;List cats = sess.createCriteria(Cat.) .add( Restrictions.in( "name", String { "Fritz", "Izi", "Pk" } ) ) .add( Restrictions.disjunction .add( Restrictions.isNull("age") ) .add( Restrictions.eq("age", Integer(0) ) ) .add( Restrictions.eq("age", Integer(1) ) ) .add( Restrictions.eq("age", Integer(2) ) ) ) ) .list; Hibernate提供了相当多内置criterion类型(Restrictions 子类), 但是尤其有用是可以允许你直接使用SQLList cats = sess.createCriteria(Cat.) .add( Restrictions.sql("lower({alias}.name) like lower(?)", "Fritz%",Hibernate.STRING) ) .list; {alias}占位符应当被替换为被查询实体列别名 Property例子是获得个条件另外种途径你可以通过Property.forName 创建个PropertyProperty age = Property.forName("age");List cats = sess.createCriteria(Cat.) .add( Restrictions.disjunction .add( age.isNull ) .add( age.eq( Integer(0) ) ) .add( age.eq( Integer(1) ) ) .add( age.eq( Integer(2) ) ) ) ) .add( Property.forName("name").in( String { "Fritz", "Izi", "Pk" } ) ) .list; 3. 结果集排序 你可以使用org.hibernate.criterion.Order来为查询结果排序List cats = sess.createCriteria(Cat.) .add( Restrictions.like("name", "F%") .addOrder( Order.asc("name") ) .addOrder( Order.desc("age") ) .MaxResults(50) .list;List cats = sess.createCriteria(Cat.) .add( Property.forName("name").like("F%") ) .addOrder( Property.forName("name").asc ) .addOrder( Property.forName("age").desc ) .MaxResults(50) .list; 4. 关联 你可以使用createCriteria非常容易在互相关联实体间建立 约束List cats = sess.createCriteria(Cat.) .add( Restrictions.like("name", "F%") .createCriteria("kittens") .add( Restrictions.like("name", "F%") .list; 注意第 2个 createCriteria返回个新 Criteria例子该例子引用kittens 集合中元素 接下来替换形态在某些情况下也是很有用List cats = sess.createCriteria(Cat.) .createAlias("kittens", "kt") .createAlias("mate", "mt") .add( Restrictions.eqProperty("", "") ) .list; (createAlias并不创建个新 Criteria例子) Cat例子所保存的前两次查询所返回kittens集合是 没有被条件预过滤如果你希望只获得符合条件kittens 你必须使用MapsList cats = sess.createCriteria(Cat.) .createCriteria("kittens", "kt") .add( Restrictions.eq("name", "F%") ) .Maps .list;Iterator iter = cats.iterator;while ( iter.hasNext ) { Map map = (Map) iter.next; Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS); Cat kitten = (Cat) map.get("kt");} 5. 动态关联抓取 你可以使用FetchMode在运行时定义动态关联抓取语义List cats = sess.createCriteria(Cat.) .add( Restrictions.like("name", "Fritz%") ) .FetchMode("mate", FetchMode.EAGER) .FetchMode("kittens", FetchMode.EAGER) .list; 这个查询可以通过外连接抓取mate和kittens 6. 查询举例 org.hibernate.criterion.Example类允许你通过个给定例子 构建个条件查询Cat cat = Cat;cat.Sex('F');cat.Color(Color.BLACK);List results = session.createCriteria(Cat.) .add( Example.create(cat) ) .list; 版本属性、标识符和关联被忽略默认情况下值为null属性将被排除 可以自行调整Example使的更实用Example example = Example.create(cat) .excludeZeroes //exclude zero valued properties .excludeProperty("color") //exclude the property named "color" .ignoreCase //perform insensitive comparisons .enableLike; //use like for comparisonsList results = session.createCriteria(Cat.) .add(example) .list; 甚至可以使用examples在关联对象上放置条件List results = session.createCriteria(Cat.) .add( Example.create(cat) ) .createCriteria("mate") .add( Example.create( cat.getMate ) ) .list; 7. 投影(Projections)、聚合(aggregation)和分组(grouping) org.hibernate.criterion.Projections是 Projection 例子工厂我们通过 Projection应用投影到个查询List results = session.createCriteria(Cat.) .Projection( Projections.rowCount ) .add( Restrictions.eq("color", Color.BLACK) ) .list;List results = session.createCriteria(Cat.) .Projection( Projections.projectionList .add( Projections.rowCount ) .add( Projections.avg("weight") ) .add( Projections.max("weight") ) .add( Projections.groupProperty("color") ) ) .list; 在个条件查询中没有必要显式使用 "group by" 某些投影类型就是被定义为 分组投影他们也出现在SQLgroup by子句中 可以选择把个别名指派给个投影这样可以使投影值被约束或排序所引用下面是两种区别实现方式:List results = session.createCriteria(Cat.) .Projection( Projections.alias( Projections.groupProperty("color"), "colr" ) ) .addOrder( Order.asc("colr") ) .list;List results = session.createCriteria(Cat.) .Projection( Projections.groupProperty("color").as("colr") ) .addOrder( Order.asc("colr") ) .list; alias和as思路方法简便将个投影例子包装到另外个 别名Projection例子中简而言的当你添加个投影到个投影列表中时 你可以为它指定个别名:List results = session.createCriteria(Cat.) .Projection( Projections.projectionList .add( Projections.rowCount, "catCountByColor" ) .add( Projections.avg("weight"), "avgWeight" ) .add( Projections.max("weight"), "maxWeight" ) .add( Projections.groupProperty("color"), "color" ) ) .addOrder( Order.desc("catCountByColor") ) .addOrder( Order.desc("avgWeight") ) .list;List results = session.createCriteria(Domestic., "cat") .createAlias("kittens", "kit") .Projection( Projections.projectionList .add( Projections.property(""), "catName" ) .add( Projections.property(""), "kitName" ) ) .addOrder( Order.asc("catName") ) .addOrder( Order.asc("kitName") ) .list; 也可以使用Property.forName来表示投影:List results = session.createCriteria(Cat.) .Projection( Property.forName("name") ) .add( Property.forName("color").eq(Color.BLACK) ) .list;List results = session.createCriteria(Cat.) .Projection( Projections.projectionList .add( Projections.rowCount.as("catCountByColor") ) .add( Property.forName("weight").avg.as("avgWeight") ) .add( Property.forName("weight").max.as("maxWeight") ) .add( Property.forName("color").group.as("color" ) ) .addOrder( Order.desc("catCountByColor") ) .addOrder( Order.desc("avgWeight") ) .list; 8. 离线(detached)查询和子查询 DetachedCriteria类使你在个session范围的外创建个查询并且可以使用任意 Session来执行它DetachedCriteria query = DetachedCriteria.forClass(Cat.) .add( Property.forName("sex").eq('F') );//创建个SessionSession session = .;Transaction txn = session.beginTransaction;List results = query.getExecutableCriteria(session).MaxResults(100).list;mit;session.close; DetachedCriteria也可以用以表示子查询条件例子包含子查询可以通过 Subqueries或者Property获得DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.) .Projection( Property.forName("weight").avg );session.createCriteria(Cat.) .add( Property.forName("weight).gt(avgWeight) ) .list;DetachedCriteria weights = DetachedCriteria.forClass(Cat.) .Projection( Property.forName("weight") );session.createCriteria(Cat.) .add( Subqueries.geAll("weight", weights) ) .list; 相互关联子查询也是有可能:DetachedCriteria avgWeightForSex = DetachedCriteria.forClass(Cat., "cat2") .Projection( Property.forName("weight").avg ) .add( Property.forName("cat2.sex").eqProperty("cat.sex") );session.createCriteria(Cat., "cat") .add( Property.forName("weight).gt(avgWeightForSex) ) .list;2009-1-23 1:04:58疯狂代码 /。

criteria用法java

criteria用法java

criteria用法java在Java中,"criteria"可以有不同的用法,具体取决于上下文和所使用的库或框架。

一般来说,"criteria"是指用于定义查询条件的对象或接口。

一种常见的使用情况是在Java持久层框架(如Hibernate)中使用"criteria"来创建查询。

在这种情况下,"criteria"可以作为一个类似于查询构造器的对象,用于动态地构建查询条件,以便从数据库中检索特定的数据。

这些查询条件可以包括等于、不等于、大于、小于等关系运算符,以及与、或等逻辑运算符。

通过使用"criteria",可以以一种灵活的方式生成查询,并且不需要直接编写SQL语句。

以下是一个简单的示例,展示了如何在Hibernate中使用"criteria"来创建查询条件:```//创建一个Criteria对象Criteria criteria =session.createCriteria(YourEntity.class);//添加查询条件criteria.add(Restrictions.eq("fieldName", value));//执行查询List results = criteria.list();```上述示例中,我们首先通过`session.createCriteria()`方法创建一个Criteria对象,然后使用`criteria.add()`方法添加一个查询条件,该条件是指字段`fieldName`等于特定值`value`。

最后,我们通过`criteria.list()`方法执行查询,并将结果以列表的形式返回。

除了上述示例中演示的用法,不同的持久层框架和库可能还提供其他用于"criteria"的方法和功能,以满足不同的查询需求。

有没有HIbernate的大神,为什么用HIbernate自带查询进行关联查询,关联表数据查不到?

有没有HIbernate的大神,为什么用HIbernate自带查询进行关联查询,关联表数据查不到?

有没有精通Hibernate的大神,为什么用Hibernate自带查询进行关联查询,关联表数据查不到?这个问题是很多Hibernate开发者经常遇到的问题。

我们将深入探讨这个问题的根本原因,以及如何避免这个问题。

让我们来了解一下Hibernate的自带查询。

Hibernate提供了多种查询方式,其中一种就是自带查询。

自带查询是指Hibernate提供的一系列查询方法,这些方法可以通过Hibernate的Session对象进行调用。

使用自带查询的好处是可以减少代码量,提高开发效率。

使用Hibernate自带查询进行关联查询时,可能会出现关联表数据查不到的情况。

这是因为Hibernate自带查询默认使用的是左外连接(left outer join)的方式进行关联查询。

左外连接是指返回左表中所有记录和右表中匹配的记录。

如果右表中没有匹配的记录,那么就会返回一个NULL值。

当使用Hibernate自带查询进行关联查询时,如果关联表中没有匹配的记录,那么就会返回一个NULL值。

这就是为什么我们无法查到关联表数据的原因。

那么,如何避免这个问题呢?一种解决方法是使用Hibernate的Criteria查询。

Criteria 查询是一种类型安全的查询方式,可以通过编程方式构建查询条件,同时也可以进行关联查询。

在进行关联查询时,Criteria查询使用的是内连接(inner join)的方式,这样就可以避免关联表数据查不到的问题。

还可以使用Hibernate的HQL查询。

HQL查询是一种基于面向对象的查询方式,可以使用实体类的属性名进行查询。

在进行关联查询时,HQL查询使用的也是内连接的方式,因此也可以避免关联表数据查不到的问题。

使用Hibernate自带查询进行关联查询时,可能会出现关联表数据查不到的问题。

为了避免这个问题,我们可以使用Hibernate的Criteria查询或HQL查询。

这些查询方式都使用内连接的方式进行关联查询,可以保证查询结果的准确性。

Hibernate查询方法

Hibernate查询方法

Hibernate查询方法1: QBE (Query By Example)Criteria cri = session.createCriteria(Student.class);cri.add(Example.create(s)); //s是一个 Student 对象list cri.list();实质:创建一个模版,比如我有一个表serial 有一个 giftortoy 字段,我设置 serial.setgifttoy(\"2\"),则这个表中的所有的giftortoy 为 2 的数据都会出来QBC查询方式QBC(Query By Criteria)查询方式是 Hibernate 提供的“ 更加面向对象” 的一种检索方式。

QBC 在条件查询上比 HQL 查询更为灵活,而且支持运行时动态生成查询语句。

在Hibernate 应用中使用 QBC 查询通常经过 3 个步骤(1)使用 Session 实例的 createCriteria() 方法创建 Criteria 对象(2)使用工具类 Restrictions 的相关方法为 Criteria 对象设置查询对象(3)使用 Criteria 对象的 list() 方法执行查询,返回查询结果Restrictions类的常用方法Restrictions.eq(String propertyName,Object value)等于Restrictions.allEq(Map propertyNameValues)使用Map key/value 进行多个等于的比对Restrictions.gt(String propertyName, Object value)大于 > (gt----->greater than)Restrictions.ge(String propertyName, Object value)大于等于 >= (ge----->greater equal)Restrictions.It(String propertyName, Object value)小于< (It---->less than)Restrictions.Le(String propertyName, Object value)小于等于<= (le---->less equal)Restrictions.between(String propertyName, Object lo, Object hi)对应SQL 语句的 Between 子句Restrictions.like(String propertyName, Object value)对应SQL 语句的 LIKE 子句Restrictions.in(String propertyName, Collection value)对应SQL 语句的 in 子句Restrictions.and(Criterion lhs, Criterion rhs)And关系Restrictions.or(Criterion lhs, Criterion rhs)Or关系Restrictions.sqlRestriction(String sql,Object[] values,Type[] types) SQL限定查询工具类Order 提供设置排序方式Order.asc(String propertyName)升序排序Order.desc(String propertyName)降序排序工具类Projections 提供对查询结果进行统计与分组操作Porjections.avg(String propertyName)求某属性的平均值Projections.count(String propertyName)统计某属性的数量Projections.countDistinct(String propertyName)统计某属性的不同值的数量Projections.groupProperty(String propertyName)指定一组属性值Projections.max(String propertyName)某属性的最大值Projections.min(String propertyName)某属性的最小值Projections.projectionList()创建一个新的projectionList 对象Projections.rowCount()查询结果集中记录的条数Projections.sum(String propertyName)返回某属性值的合计QBE查询QBE查询就是检索与指定样本对象具有相同属性值的对象。

Criteria查询

Criteria查询
3.ProjectionList proList=Projections.projectionList();
4.proList.add(Projections.max("price"));
5.proList.add(Projections.min("price"));
6.proList.add(Projections.avg("price"));
11.criteria.setProjection(proList);
12.Object values[]=(Object[])criteria.uniqueResult();
mit();
分组查询
Java代码
1.Transaction tx = session.beginTransaction();
8.List<Double> list=criteria.list();
mit();
投影查询
在一个表中有很多个字段,投影查询只是查询某一个或多个字段,也称局部查询
Java代码
1.Transaction tx = session.beginTransaction();
2.Criteria criteria=session.createCriteria(Testbook.class);
3.criteria.setProjection(Property.forName("price"));
4.criteria.add(Restrictions.gt("price",newDouble(40.0)))
5.List<Double> list=criteria.list();

hibernate查询数据库返回一条数据的方法

hibernate查询数据库返回一条数据的方法

hibernate查询数据库返回一条数据的方法Hibernate 是一个强大的对象关系映射(ORM)框架,它简化了Java 程序与数据库之间的交互。

在本文中,我们将探讨使用Hibernate 查询数据库并返回一条数据的方法。

### Hibernate 查询数据库返回一条数据的方法在Hibernate 中,查询数据库并返回一条数据通常有多种方式。

下面列举了几种常用的方法:#### 1.使用HQL(Hibernate Query Language)```java// 获取Hibernate 会话Session session = sessionFactory.openSession();Transaction transaction = session.beginTransaction();// 使用HQL 查询String hql = "FROM YourEntityName where someColumn = :value";Query query = session.createQuery(hql);query.setParameter("value", someValue);// 获取唯一结果Object result = query.uniqueResult();mit();session.close();// 输出结果if (result != null) {YourEntity entity = (YourEntity) result;// Do something with the entity}```注意:这里的`YourEntityName` 替换为你的实体类名,`someColumn` 和`someValue` 替换为你需要查询的列名和值。

#### 2.使用Criteria API```javaSession session = sessionFactory.openSession();Transaction transaction = session.beginTransaction();// 创建Criteria 对象Criteria criteria = session.createCriteria(YourEntityName.class);criteria.add(Restrictions.eq("someColumn", someValue));// 获取唯一结果Object result = criteria.uniqueResult();mit();session.close();// 输出结果if (result != null) {YourEntity entity = (YourEntity) result;// Do something with the entity```#### 3.使用Native SQL```javaSession session = sessionFactory.openSession();Transaction transaction = session.beginTransaction();// 使用原生SQL 查询String sql = "SELECT * FROM your_table WHERE some_column = :value";SQLQuery query = session.createSQLQuery(sql);query.setParameter("value", someValue);// 指定返回的实体类query.addEntity(YourEntityName.class);// 获取唯一结果Object result = query.uniqueResult();mit();session.close();// 输出结果if (result != null) {YourEntity entity = (YourEntity) result;// Do something with the entity}注意:在使用Native SQL 时,确保你了解原生SQL 语句的数据库依赖性。

Criteria的几种查询方法使用

Criteria的几种查询方法使用

Criteria的几种查询方法使用QBC常用限定方法Restrictions.eq --> equal,等于Restrictions.allEq --> 参数为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 --> 判断属性是否为空,为空则返回trueRestrictions.isNotNull --> 与isNull相反Restrictions.sqlRestriction --> SQL限定的查询Order.asc --> 根据传入的字段进行升序排序Order.desc --> 根据传入的字段进行降序排序MacthMode.EXACT :字符串精确匹配。

相当于like…value‟MathMode.ANYWHERE:字符串在中间匹配.相当于like …%value%‟MathMode.START:字符串在最前端匹配位置.相当于:like …value%‟MatchMode.END:字符串在最后端匹配.相当于:like …%value‟1.查询年龄在20-30之间的所有学生对象。

封装JPA(Hibernate)动态查询(CriteriaQuery)

封装JPA(Hibernate)动态查询(CriteriaQuery)

封装JPA(Hibernate)动态查询(CriteriaQuery)在JPA 2.0 中我们可以使用entityManager.createNativeQuery()来执行原生的SQL语句。

但当我们查询结果没有对应实体类时,query.getResultList()返回的是一个List<Object[]>。

也就是说每行的数据被作为一个对象数组返回。

常见的用法是这样的:[java] view plaincopy1.public void testNativeQuery(){2.Query query = entityManager.createNativeQuery("select i d, name, age from t_user");3.List rows = query.getResultList();4.for (Object row : rows) {5.Object[] cells = (Object[]) row;6.System.out.println("id = " + cells[0]);7.System.out.println("name = " + cells[1]);8.System.out.println("age = " + cells[2]);9.}10.}这样用会使代码非常不容易让人理解,究竟下标为0的元素到底是什么,不去数查询语句是不知道的,而且一旦查询语句被调整,Java代码也要一起调整。

这时候我们想如果返回的是Map的话,用起来会清晰的多。

可惜的是JPA的API中并没有提供这样的设置。

其实很多JPA的底层实现都是支持返回Map对象的。

例如:EclipseLink的query.setHint(QueryHints.RESULT_TYPE,ResultType.Map);Hibernate的.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);所以,如果我们想要返回Map并且确定底层用的是某一种JPA的实现时我们可以退而求其次,牺牲跨实现的特性来满足我们的需求:[java] view plaincopy1.public void testNativeQuery(){2.Query query = entityManager.createNativeQuery("select i d, name, age from t_user");3.query.unwrap(SQLQuery.class).setResultTransformer(Tran sformers.ALIAS_TO_ENTITY_MAP);4.List rows = query.getResultList();5.for (Object obj : rows) {6.Map row = (Map) obj;7.System.out.println("id = " + row.get("ID"));8.System.out.println("name = " + row.get("NAME"));9.System.out.println("age = " + row.get("AGE"));10.}11.}这里需要注意的是,用Map肯定要比用Object数组来的效率低。

hibernate防止sql注入攻击的方法

hibernate防止sql注入攻击的方法

hibernate防止sql注入攻击的方法
Hibernate 默认会防止 SQL 注入攻击,因为它使用了参数化查询,将用户输入的值作为参数绑定到查询语句中,而不是将用户输入的值直接拼接到查询语句中。

当使用 Hibernate 进行查询时,可以使用以下方法来防止 SQL 注入攻击:
1. 使用 HQL 或者 Criteria API:Hibernate 提供了 HQL 和Criteria API,这两种查询方法都使用参数绑定的方式来构建查询语句,可以避免 SQL 注入攻击。

2. 使用命名参数:在 HQL 中可以使用命名参数来代替直接将用户输入的值拼接到查询语句中。

例如,可以使用
`:parameterName` 来作为命名参数,然后使用
`setParameter("parameterName", value)` 方法将用户输入的值绑定到命名参数上。

3. 使用占位符参数:在 HQL 中可以使用占位符参数来代替直接将用户输入的值拼接到查询语句中。

例如,可以使用 `?` 作为占位符,然后使用 `setParameter(index, value)` 方法将用户输入的值按顺序绑定到占位符上。

以上方法都是通过参数绑定,将用户输入的值安全地传递给数据库,从而防止 SQL 注入攻击。

Criteria用法

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 查询表达式Criteria 本身只是一个查询容器,具体的查询条件需要通过Criteria.add方法添加到Criteria实例中。

如前例所示,Expression 对象具体描述了查询条件。

针对SQL 语法,Expression提供了对应的查询限定机制,包括:方法描述Expression.eq 对应SQL“field = value”表达式。

如Expression.eq("name","Erica")Expression.allEq 参数为一个Map对象,其中包含了多个属性-值对应关系。

相当于多个Expression.eq关系的叠加。

Expression.gt 对应SQL中的“field > value ”表达式Expression.ge 对应SQL中的“field >= value”表达式Expression.lt 对应SQL中的“field < value”表达式Expression.le 对应SQL中的“field <= value”表达式Expression.between 对应SQL中的“between”表达式如下面的表达式表示年龄(age)位于13到50区间内。

Expression.between("age",newInteger(13),new Integer(50));表达式Expression.in 对应SQL中的”field in …”表达式Expression.eqProperty 用于比较两个属性之间的值,对应SQL中的“field = field”。

java类中criteria.addlike 的各种方法

java类中criteria.addlike 的各种方法

在Java类中,`criteria.addLike()`方法通常用于构建SQL查询语句中的模糊匹配条件。

它用于在查询中添加一个包含通配符`%`的模糊匹配条件。

`criteria.addLike()`方法的使用取决于你使用的ORM框架,因为不同的ORM框架可能有不同的API和语法。

以下是几个常见的ORM 框架中使用`criteria.addLike()`方法的示例:1. Hibernate Criteria API:```javaCriteria criteria = session.createCriteria(Employee.class);criteria.addLike(Restrictions.sqlRestriction("name like %?{%}", name, MatchMode.ANYWHERE));List<Employee> employees = criteria.list();```2. JPA Criteria API:```javaCriteriaBuilder builder = entityManager.getCriteriaBuilder();CriteriaQuery<Employee> query = builder.createQuery(Employee.class);Root<Employee> root = query.from(Employee.class);query.where(builder.like(root.get("name"), builder.concat("%", name, "%")));List<Employee> employees = entityManager.createQuery(query).getResultList();```3. MyBatis:```xml<select id="findEmployeesByName" resultType="Employee">SELECT * FROM employee WHERE name LIKE CONCAT('%', #{name}, '%')</select>```在上述示例中,`criteria.addLike()`方法用于将给定的名称(`name`)添加到查询条件中,并在名称中添加通配符`%`,以便进行模糊匹配。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

11
逻辑运算
public void testQuery7(){ Session session = HibernateSessionFactory.getSession(); Criteria c = session.createCriteria(Fwxx.class); c.add(Restrictions.or(Restrictions.eq("title", "北大附近 招合租"), Restrictions.eq("title", "健翔桥一居出租了"))); List list = c.list(); printFwxx(list); }
3
链编程风格
public void testQuery1_2(){ Session session = HibernateSessionFactory.getSession(); Criteria c = session.createCriteria(Fwxx.class); c.add(Restrictions.like("title","北",MatchMode.ANYWHERE)) .add(Restrictions.ge("zj", 1000d));
12
public void testQuery8(){ Session session = HibernateSessionFactory.getSession(); Criteria c = session.createCriteria(Fwxx.class); c.add(Restrictions.disjunction() .add(Restrictions.eq("title", "北大附近招合租")) .add(Restrictions.eq("title", "健翔桥一居出租了"))); List list = c.list(); printFwxx(list); }
9
查询条件
public void testQuery5(){ Session session = HibernateSessionFactory.getSession(); Criteria c = session.createCriteria(Fwxx.class); Integer[] fwlx = {1,2}; c.add(Restrictions.in("fwlx.lxid", fwlx)); List list = c.list(); printFwxx(list); }
14
public void testQuery11(){ Qx qx = new Qx(); qx.setQx("海淀"); Jd jd = new Jd(); jd.setQx(qx); Fwxx fwxx = new Fwxx(); Session session = HibernateSessionFactory.getSession(); Criteria c = session.createCriteria(Fwxx.class); Criteria c2 = c.createCriteria("jd"); c2.add(Restrictions.like("jd", "北太",MatchMode.ANYWHERE)); Criteria c3 = c.createCriteria("jd.qx"); c3.add(Restrictions.eq("qx", qx.getQx())); List list = c.list(); printFwxx(list); }
7
分页
public void testQuery3(){ Session session = HibernateSessionFactory.getSession(); Criteria c = session.createCriteria(Fwxx.class); c.add(Restrictions.like("title","北",MatchMode.ANYWHERE)) .add(Restrictions.ge("zj", 1000d)) .addOrder(Order.desc("zj")); c.setFirstResult(0); c.setMaxResults(3); List list = c.list(); printFwxx(list); }
Hibernate查询
Hibernate 3.2
Criteria(QBC)查询
Criteria
public void testQuery1(){ Session session = HibernateSessionFactory.getSession(); Criteria c = session.createCriteria(Fwxx.class);
8
检索单个对象
uniqueResult:返回单个对象,如果结果不是单个对象执出 org.hibernate.NonUniqueResultException: query did not return a unique result:
public void testQuery4(){ Session session = HibernateSessionFactory.getSession(); Criteria c = session.createCriteria(Fwxx.class); c.add(Restrictions.like("title","北",MatchMode.ANYWHERE)) .add(Restrictions.ge("zj", 1000d)) .addOrder(Order.desc("zj")); c.setFirstResult(0); c.setMaxResults(1); Fwxx fwxx = (Fwxx)c.uniqueResult(); System.out.println(fwxx.getTitle()); }
10
public void testQuery6(){ Session session = HibernateSessionFactory.getSession(); Criteria c = session.createCriteria(Fwxx.class); c.add(Restrictions.not(Restrictions.between("zj", 1500d, 2000d))); List list = c.list(); printFwxx(list); }
13
连接查询
public void testQuery10(){ Fwlx fwlx = new Fwlx(); fwlx.setFwlx("平房"); Fwxx fwxx = new Fwxx(); fwxx.setFwlx(fwlx); Session session = HibernateSessionFactory.getSession(); Criteria c = session.createCriteria(Fwxx.class); Criteria c2 = c.createCriteria("fwlx"); c2.add(Restrictions.eq("fwlx", fwlx.getFwlx())); List list = c.list(); printFwxx(list); }
6
排序
public void testQuery2(){ Session session = HibernateSessionFactory.getSession(); Criteria c = session.createCriteria(Fwxx.class); c.add(Restrictions.like("title","北",MatchMode.ANYWHERE)) .add(Restrictions.ge("zj", 1000d)) .addOrder(Order.desc("zj")); List list = c.list(); printFwxx(list); }
5
使用别名
QBC检索方式不需要由应用程序显式指定类的别 名,Hibernate会自动把查询语句的根节点实体赋予别 名”this” 例如: Criteria c = session.createCriteria(Fwxx.class); c.add(Restrictions.like(“title”,“北”,MatchMode.ANYWH ERE)) 等同于 c.add(Restrictions.like(“this.title","北 ",MatchMode.ANYWHERE))rintFwxx(list); }
4
QBE
public void testQuery1_3(){ Session session = HibernateSessionFactory.getSession(); Criteria c = session.createCriteria(Fwxx.class); Fwxx fwxx = new Fwxx(); fwxx.setTing(1); c.add(Example.create(fwxx)); List list = c.list(); printFwxx(list); }
Criterion criterion1 = Restrictions.like("title", "北 ",MatchMode.ANYWHERE); Criterion criterion2 = Restrictions.ge("zj", 1000d);
相关文档
最新文档