SlideShare a Scribd company logo
1 of 29
Hibernate  查询
目标 ,[object Object],[object Object],[object Object]
Hibernate 基本查询 ,[object Object],[object Object],[object Object]
使用 get 方法 ,[object Object],[object Object]
使用 createQuery 方法 ,[object Object]
配置查询条件  ,[object Object],[object Object],<query name=&quot;onlyfun.caterpillar.queryUser&quot;> <![CDATA[ select user.name from User as user where user.age = :age and user.sex = :sex ]]> </query>
使用配置查询  ,[object Object],Query query = session.getNamedQuery(&quot;onlyfun.caterpillar.queryUser&quot;); query.setInteger(&quot;age&quot;, 25); query.setCharacter(&quot;sex&quot;, 'M'); List names = query.list(); }
Hibernate 语言查询 ,[object Object],[object Object],[object Object],[object Object],[object Object]
HQL ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
使用 HQL ,[object Object],[object Object],[object Object],[object Object],[object Object]
实体查询   ,[object Object],[object Object],[object Object],String hql=”from User user ”; List list=session.CreateQuery(hql).list(); 持久类 别名 from User user where user.age=20; from User user where user.age between 20 and 30; from User user where user.age in(20,30); from User user where user.name is null; from User user where user.name like ‘%zx%’; from User user where (user.age%2)=1; from User user where user.age=20 and user.name like ‘%zx%’;
实体的更新和删除   ,[object Object],[object Object],Transaction trans=session.beginTransaction(); String hql=”update User user set user.age=20 where user.age=18”; Query queryupdate=session.createQuery(hql); int ret=queryupdate.executeUpdate(); trans.commit(); Transaction trans=session.beginTransaction(); String hql=”delete from User user where user.age=18”; Query queryupdate=session.createQuery(hql); int ret=queryupdate.executeUpdate(); trans.commit();
属性查询   ,[object Object],[object Object],[object Object],List list=session.createQuery(“select user.name from User user ”).list(); List list=session.createQuery(“select user.name,user.age from User user ”).list(); List list=session.createQuery(“select new User(user.name,user.age) from User user ”).list(); 注意,这时所返回的 User 对象,仅仅只是一个普通的 Java 对象而以,除了查询结果值之外,其它的属性值都为 null (包括主键值 id ),也就是说不能通过 Session 对象对此对象执行持久化的更新操作 , 只能 save()
分组与排序   ,[object Object],[object Object],[object Object],from User user order by user.name asc,user.age desc; String hql=”select count(user),user.age from User user group by user.age having count(user)>10 ”; List list=session.createQuery(hql).list();
优化统计查询   from Customer c inner join c.orders o group by c.age;(1)   select c.ID,c.name,c.age,o.ID,o.order_number,o.customer_ID from Customer c inner join c.orders o group by c.age;(2) 语句( 1 )检索的结果会返回 Customer 与 Order 持久化对象,而且它们会被置于 Hibernate 的 Session 缓存之中  , 只有事务提交后它们才会从缓存中被清除  语句( 2 )返回的是关系数据而并非是持久化对象,因此它们不会占用 Hibernate 的 Session 缓存,只要在检索之后应用程序不在访问它们,它们所占用的内存就有可能被 JVM 的垃圾回收器回收,而且 Hibernate 不会同步对它们的修改  尽量使用通过 select 语句写出需要查询的属性的方式来返回关系数据 , 而避免使用第一种查询方式返回持久化对象(这种方式是在有修改需求时使用比较适合),这样可以提高运行效率并且减少内存消耗  name varchar2(20) age number(10) ID varchar2(14) customer customer_ID varchar2(14) order_number number(10) ID varchar2(14) order
参数绑定   ,[object Object],PrepareStatement pre=connection.prepare(“select * from User where user.name=?”); pre.setString(1,”zhao”); ResultSet rs=pre.executeQuery();
参数绑定 ,[object Object],[object Object],[object Object],Query query=session.createQuery(“from User user where user.name=:customername and user.age=:customerage”);   query.setString(“customername”,name);   query.setInteger(“customerage”,age); Query query=session.createQuery(“from User user where user.name=? and user.age =? ”);   query.setString(0,name);   query.setInteger(1,age);
参数绑定 ,[object Object],[object Object],[object Object],String hql=”from User user where user.name=:customername ”;   Query query=session.createQuery(hql);   query.setParameter(“customername”,name,Hibernate.STRING);
参数绑定 ,[object Object],[object Object],Customer customer=new Customer(); customer.setName(“pansl”); customer.setAge(80); Query query=session.createQuery(“from Customer c where c.name=:name and c.age=:age ”); query.setProperties(customer);
   使用绑定参数的优势   ,[object Object],[object Object]
构建 Criteria  查询 ,[object Object],[object Object],[object Object],Criteria criteria = session.createCriteria(User.class); //  查询 user 所有字段 List users = criteria.list(); Iterator iterator =  users.iterator(); System.out.println(&quot;id  name/age&quot;); while(iterator.hasNext()) { User user = (User) iterator.next();  System.out.println(user.getId() + &quot;  &quot; + user.getName() + &quot;/&quot; + user.getAge());  }
构建 Criteria  查询 ,[object Object],[object Object],Criteria criteria = session.createCriteria(User.class); criteria.add(Restrictions.gt(&quot;age&quot;, new Integer(20))); criteria.add(Restrictions.lt(&quot;age&quot;, new Integer(40))); List users = criteria.list();
使用逻辑组合来进行查询 ,[object Object],Criteria criteria = session.createCriteria(User.class); criteria.add(Restrictions.or(  Restrictions.eq(&quot;age&quot;, new Integer(20)),  Restrictions.isNull(&quot;age&quot;)  ));  List users = criteria.list();
SQL 语法作限定查询 ,[object Object],[object Object],Criteria criteria = session.createCriteria(User.class); criteria.add(Restrictions.sqlRestriction(“{ 类名 }.name LIKE (?)&quot;, &quot;cater%&quot;, Hibernate.STRING)); List users = criteria.list(); 其中 ? 将被替换为 cater% Criteria criteria = session.createCriteria(User.class); Integer[ ] ages = {new Integer(20), new Integer(40)}; Type[ ] types = {Hibernate.INTEGER, Hibernate.INTEGER}; criteria.add(Restrictions.sqlRestriction(&quot;{alias}.age BETWEEN (?) AND (?)&quot;, ages, types)); List users = criteria.list();
Restrictions 常用限定查询方法 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Criteria  高级特性  ,[object Object],Criteria criteria = session.createCriteria(User.class); // 限定查询返回检索结果中,从第一百条结果开始的 20 条记录  criteria.setFirstResult(100); criteria.setMaxResults(20);
Criteria  高级特性 ,[object Object],// 查询所有 groupId=2 的记录  // 并分别按照姓名 ( 顺序 ) 和 groupId (逆序)排序  Criteria criteria = session.createCriteria(TUser.class); criteria.add(Expression.eq(&quot;groupId&quot;,new Integer(2))); criteria.addOrder(Order.asc(&quot;name&quot;)); criteria.addOrder(Order.desc(&quot;groupId&quot;));
Criteria  和  DetachedCriteria  ,[object Object],[object Object]
实例演示

More Related Content

What's hot

14 hibernate hql查询1
14 hibernate hql查询114 hibernate hql查询1
14 hibernate hql查询1Zelin Wang
 
Jdbc4 0 规范技术预研
Jdbc4 0 规范技术预研Jdbc4 0 规范技术预研
Jdbc4 0 规范技术预研lorisjand
 
关系数据库应用设计基础
关系数据库应用设计基础关系数据库应用设计基础
关系数据库应用设计基础ideawu
 
jQuery底层架构
jQuery底层架构jQuery底层架构
jQuery底层架构fangdeng
 
第8章 数据完整性
第8章   数据完整性第8章   数据完整性
第8章 数据完整性hanmo1988
 
Script with engine
Script with engineScript with engine
Script with engineWebrebuild
 
16 CoreData
16 CoreData16 CoreData
16 CoreDataTom Fan
 
Mongo db技术分享
Mongo db技术分享Mongo db技术分享
Mongo db技术分享晓锋 陈
 
jQuery实践经验与技巧
jQuery实践经验与技巧jQuery实践经验与技巧
jQuery实践经验与技巧fangdeng
 
Essential oracle security internal for dba
Essential oracle security internal for dbaEssential oracle security internal for dba
Essential oracle security internal for dbamaclean liu
 
Building an event driven web
Building an event driven webBuilding an event driven web
Building an event driven webfangdeng
 
Programming python - part 2
Programming python - part 2Programming python - part 2
Programming python - part 2Che-Cheng Hsu
 
程式人雜誌 -- 2014 年11月號
程式人雜誌 -- 2014 年11月號程式人雜誌 -- 2014 年11月號
程式人雜誌 -- 2014 年11月號鍾誠 陳鍾誠
 
MongoDB for C# developer
MongoDB for C# developerMongoDB for C# developer
MongoDB for C# developerdianming.song
 
Sql语句的优化
Sql语句的优化Sql语句的优化
Sql语句的优化abszhanghe
 
Mongo快速入门
Mongo快速入门Mongo快速入门
Mongo快速入门Lucien Li
 
【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理maclean liu
 

What's hot (20)

14 hibernate hql查询1
14 hibernate hql查询114 hibernate hql查询1
14 hibernate hql查询1
 
Jdbc4 0 规范技术预研
Jdbc4 0 规范技术预研Jdbc4 0 规范技术预研
Jdbc4 0 规范技术预研
 
关系数据库应用设计基础
关系数据库应用设计基础关系数据库应用设计基础
关系数据库应用设计基础
 
jQuery底层架构
jQuery底层架构jQuery底层架构
jQuery底层架构
 
第8章 数据完整性
第8章   数据完整性第8章   数据完整性
第8章 数据完整性
 
Script with engine
Script with engineScript with engine
Script with engine
 
16 CoreData
16 CoreData16 CoreData
16 CoreData
 
Mongo db技术分享
Mongo db技术分享Mongo db技术分享
Mongo db技术分享
 
Java物件導向
Java物件導向Java物件導向
Java物件導向
 
jQuery实践经验与技巧
jQuery实践经验与技巧jQuery实践经验与技巧
jQuery实践经验与技巧
 
组合、备忘录、建造者模式、原型
组合、备忘录、建造者模式、原型组合、备忘录、建造者模式、原型
组合、备忘录、建造者模式、原型
 
Essential oracle security internal for dba
Essential oracle security internal for dbaEssential oracle security internal for dba
Essential oracle security internal for dba
 
Building an event driven web
Building an event driven webBuilding an event driven web
Building an event driven web
 
Programming python - part 2
Programming python - part 2Programming python - part 2
Programming python - part 2
 
程式人雜誌 -- 2014 年11月號
程式人雜誌 -- 2014 年11月號程式人雜誌 -- 2014 年11月號
程式人雜誌 -- 2014 年11月號
 
MongoDB for C# developer
MongoDB for C# developerMongoDB for C# developer
MongoDB for C# developer
 
Sql语句的优化
Sql语句的优化Sql语句的优化
Sql语句的优化
 
Mongo快速入门
Mongo快速入门Mongo快速入门
Mongo快速入门
 
Js tree
Js treeJs tree
Js tree
 
【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理
 

Viewers also liked

Hibernate Session 1
Hibernate Session 1Hibernate Session 1
Hibernate Session 1b_kathir
 
Hibernate Session 3
Hibernate Session 3Hibernate Session 3
Hibernate Session 3b_kathir
 
Hibernate Session 2
Hibernate Session 2Hibernate Session 2
Hibernate Session 2b_kathir
 
HQL over Tiered Data Warehouse
HQL over Tiered Data WarehouseHQL over Tiered Data Warehouse
HQL over Tiered Data WarehouseDataWorks Summit
 
Hibernate Session 4
Hibernate Session 4Hibernate Session 4
Hibernate Session 4b_kathir
 

Viewers also liked (7)

Hibernate Session 1
Hibernate Session 1Hibernate Session 1
Hibernate Session 1
 
08 Queries
08 Queries08 Queries
08 Queries
 
Hibernate Session 3
Hibernate Session 3Hibernate Session 3
Hibernate Session 3
 
Hibernate Session 2
Hibernate Session 2Hibernate Session 2
Hibernate Session 2
 
HQL over Tiered Data Warehouse
HQL over Tiered Data WarehouseHQL over Tiered Data Warehouse
HQL over Tiered Data Warehouse
 
Hibernate Session 4
Hibernate Session 4Hibernate Session 4
Hibernate Session 4
 
14 hql
14 hql14 hql
14 hql
 

Similar to Hibernate查询

Asp.net mvc 培训
Asp.net mvc 培训Asp.net mvc 培训
Asp.net mvc 培训lotusprince
 
15 hibernate hql查询2
15 hibernate hql查询215 hibernate hql查询2
15 hibernate hql查询2Zelin Wang
 
jsp基础速成精华讲解
jsp基础速成精华讲解jsp基础速成精华讲解
jsp基础速成精华讲解wensheng wei
 
Mongo db技术分享
Mongo db技术分享Mongo db技术分享
Mongo db技术分享晓锋 陈
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题yiditushe
 
Ejb工作原理学习笔记
Ejb工作原理学习笔记Ejb工作原理学习笔记
Ejb工作原理学习笔记yiditushe
 
Http Headers 與 Cache 機制(2016)
Http Headers 與 Cache 機制(2016)Http Headers 與 Cache 機制(2016)
Http Headers 與 Cache 機制(2016)振揚 陳
 
从问题开始,谈前端架构
从问题开始,谈前端架构从问题开始,谈前端架构
从问题开始,谈前端架构裕波 周
 
前端MVC之backbone
前端MVC之backbone前端MVC之backbone
前端MVC之backboneJerry Xie
 
钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会Zhi Zhong
 
advanced introduction to codeigniter
advanced introduction to codeigniteradvanced introduction to codeigniter
advanced introduction to codeigniterBo-Yi Wu
 
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應Justin Lin
 
所谓闭包
所谓闭包所谓闭包
所谓闭包youzitang
 
第十期 阿甘Javascript开发思想(入门篇)
第十期 阿甘Javascript开发思想(入门篇)第十期 阿甘Javascript开发思想(入门篇)
第十期 阿甘Javascript开发思想(入门篇)9scss
 

Similar to Hibernate查询 (20)

Asp.net mvc 培训
Asp.net mvc 培训Asp.net mvc 培训
Asp.net mvc 培训
 
15 hibernate hql查询2
15 hibernate hql查询215 hibernate hql查询2
15 hibernate hql查询2
 
jsp基础速成精华讲解
jsp基础速成精华讲解jsp基础速成精华讲解
jsp基础速成精华讲解
 
Mongo db技术分享
Mongo db技术分享Mongo db技术分享
Mongo db技术分享
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题
 
Java soap
Java soapJava soap
Java soap
 
Structs2簡介
Structs2簡介 Structs2簡介
Structs2簡介
 
Ejb工作原理学习笔记
Ejb工作原理学习笔记Ejb工作原理学习笔记
Ejb工作原理学习笔记
 
JQuery Plugin
JQuery PluginJQuery Plugin
JQuery Plugin
 
Http Headers 與 Cache 機制(2016)
Http Headers 與 Cache 機制(2016)Http Headers 與 Cache 機制(2016)
Http Headers 與 Cache 機制(2016)
 
从问题开始,谈前端架构
从问题开始,谈前端架构从问题开始,谈前端架构
从问题开始,谈前端架构
 
Php & Mysql
Php & MysqlPhp & Mysql
Php & Mysql
 
前端MVC之backbone
前端MVC之backbone前端MVC之backbone
前端MVC之backbone
 
钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会
 
advanced introduction to codeigniter
advanced introduction to codeigniteradvanced introduction to codeigniter
advanced introduction to codeigniter
 
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
 
所谓闭包
所谓闭包所谓闭包
所谓闭包
 
第十期 阿甘Javascript开发思想(入门篇)
第十期 阿甘Javascript开发思想(入门篇)第十期 阿甘Javascript开发思想(入门篇)
第十期 阿甘Javascript开发思想(入门篇)
 
Java annotation
Java annotationJava annotation
Java annotation
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 

Hibernate查询

  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15. 优化统计查询 from Customer c inner join c.orders o group by c.age;(1)   select c.ID,c.name,c.age,o.ID,o.order_number,o.customer_ID from Customer c inner join c.orders o group by c.age;(2) 语句( 1 )检索的结果会返回 Customer 与 Order 持久化对象,而且它们会被置于 Hibernate 的 Session 缓存之中 , 只有事务提交后它们才会从缓存中被清除 语句( 2 )返回的是关系数据而并非是持久化对象,因此它们不会占用 Hibernate 的 Session 缓存,只要在检索之后应用程序不在访问它们,它们所占用的内存就有可能被 JVM 的垃圾回收器回收,而且 Hibernate 不会同步对它们的修改 尽量使用通过 select 语句写出需要查询的属性的方式来返回关系数据 , 而避免使用第一种查询方式返回持久化对象(这种方式是在有修改需求时使用比较适合),这样可以提高运行效率并且减少内存消耗 name varchar2(20) age number(10) ID varchar2(14) customer customer_ID varchar2(14) order_number number(10) ID varchar2(14) order
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.