知识大全 hibernate.的QBC语句

Posted 条件

篇首语:于今腐草无萤火,终古垂杨有暮鸦。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 hibernate.的QBC语句相关的知识,希望对你有一定的参考价值。

hibernate.的QBC语句  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   Criteria相关介绍

  Criteria叫标准化条件查询 是比HQL更面向对象的查询语句 称为QBC(Query By Criteria)

  Criteria接口 代表一个查询 它是一个查询条件的容器 通过add()方法向其实例中添加查询条件

  Criterion接口 代表一种面向对象的查询条件 它的实例是作为Criteria接口add()方法的参数添加到Criteria实例中的

  Restrictions类 是用来创建查询条件Criterion实例的工具类 它提供了一系列的静态方法用来设定查询条件并作为Criterion实例返回

     具体实现步骤

  // 创建Criteria查询语句

  Criteria criteria = session createCriteria(Employee class)

  // 给查询出来的语句设定查询条件

  Criterion criterion = Restrictions ge( salary new Double( ))

  Criterion criterion = Restrictions like( loginName z% )

  // 把查询条件放到Criteria语句

  criteria add(criterion )

  criteria add(criterion )

  //排序 可写可不写

  criteria addOrder(Order desc( id ))

  List<Employee> list = criteria list()

   动态查询

  在编程时无法确定要查询的字段 即用户在在网页上面自由选择某些查询条件 程序根据用户的选择条件 动态生成SQL语句进行查询

  例子 (比如某些网站的高级查询)

  //StudentDAOImpl java

  public List findStudents(String name String classes)

  Criteria crit=session createCriteria(Student class)

  if(name!=null&&name!= )        //如果填写了名字 添加查询名字的条件

  crit add(Restrictions like( name name))

  

  If(classes!=null&&classes!=

  crit add(Restrictions eq( classes classes))

  

  Crit addOrder(Order asc( name )

  return crit list()

     离线查询

  DetachedCriteria类支持离线查询 所谓离线查询就是指一个Session范围之外创建好一个查询 然后在需要使用时再附加到一个Session实例上来执行它

  对于分层的web应用程序来说 web层需要传递一个查询条件列表给业务逻辑层 业务层对象获得这个条件后依次取出条件值 然后拼装出SQL查询语句 这里的一个难点是如何将用户的多项查询条件传入业务逻辑层

  Criteria与session是绑定的 在web层 使用DetachedCriteria来构造查询条件 然后将这个DetachedCriteria作为方法调用参数传递给业务逻辑层对象 而业务层对象获得DetachedCriteria之后 可以在session范围内直接构造Criteria 进行查询 这样 查询语句的构造脱离了session范围 完全被移植到web层实现

  例子

  //StudentDAO java

  public List findStudents(DetachedCriteria detchedCriteria)

  List list=null;

  //打开session 开启事务

  Criteria Criteria=detachedCriteria getExecutableCriteria(session)

  list=criteria list()

  //提交事务 关闭session

  return list;

  

  DetachedCriteria detchedCriteria=DetachedCriteria forClass(Student class)

  String name= 获取名字 ;

  String age= 获取班级 ;

  if(name!=null&&name!= )        //如果填写了名字 添加查询名字的条件

  detchedCriteria add(Restrictions like( name name))

  

  If(classes!=null&&classes!=      detchedCriteria add(Restrictions eq( classes classes))

  

  detchedCriteria addOrder(Order asc( name )

  List list=StudentDAO findStudents(detchedCriteria)

  for()…

     示例查询(QBE)

  根据一个给定的实例类实例来构建一个条件查询的方式 先创建一个对象样板 然后检索出所有和这个样板相同的对象 在查询表单中填写的项 可以封装成一个对象 这就是对象样板

  public static void testQBE(Employee employee)

  //开启事务

  //根据传入的employee实例来创建查询条件

  Example example = Example create(employee)

   excludeZeroes()           //排除 值的属性

   excludeProperty( color )  //排除指定的属性

   ignoreCase()              //对所有的字符串类型的属性值忽略大小写比较

   enableLike()              //对所有的字符串类型的属性值使用like比较

  List<Employee> results = session createCriteria(Employee class)

   add(example)  list()

  for (Employee empl : results)

  System out println(empl getLoginName() + + empl getSalary())

  //提交事务   //关闭Session

  Employee empl=new Employee()

  empl setLonginName( %z% )

  testQBE(empl)

     Native SQL Queries

  原生SQL查询 就是指直接使用标准SQL语句或特定数据库的SQL进行查询 对原生SQL查询执行的控制是通过SQLQuery接口进行的 通过Session上调用createSQLQuery()来获取这个接口

   ) 实体查询

  Hibernate执行原生SQL查询后 自动把查询到的表格式的数据集封装到实体对象中

   ) 标量查询

   ) 定义成命名查询来使用

     小结

  HQL功能最强大 适合各种情况 但动态查询构造起来不方便 Criteria最适合动态条件查询 不太适合统计查询 QBE还不够强大 只适合相当简单的查询 NativeSQL可以实现特定数据库的SQL 但可移植不好

cha138/Article/program/Java/ky/201311/28563

相关参考

知识大全 Hibernate中HQL语句的使用

Hibernate中HQL语句的使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文主要使用

知识大全 hibernate-HQL语句(2)

hibernate-HQL语句(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  修改默认查询

知识大全 hibernate-HQL语句(1)

hibernate-HQL语句(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  查询整个映射

知识大全 Hibernate HQL语句的参数设置

HibernateHQL语句的参数设置  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  以hql举

知识大全 hibernate一对多关联关系

  想了几天终于知道sql语句的发出问题查了很多书感觉都没有说清楚有的还是错的请看下面  [java]  <?xmlversion=?>  <!DOCTYPEhibernatemap

知识大全 hibernate事务,一级缓存,二级缓存

  通过以上的介绍可以看出hibernate主要从以下几个方面来优化查询性能  降低访问数据库的频率减少select语句的数目实现手段有使用迫切左外连接或迫切内连接对延迟检索或立即检索设置批量检索数目

知识大全 有关ssh框架的面试题 — ibatis与hibernate有什么区别

iBatis的sql语句需要自己手动写而Hibernate能够在程序运行时自动生成但是不要就这样以为Hibernate比iBatis方便其实二者熟悉之后的效率差不多而Hibernate还能够自动建表等

知识大全 Hibernate3.1与Hibernate3.2

Hibernate3.1与Hibernate3.2  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 hibernate的性能优化

  Hibernate是对JDBC的轻量级封装因此在很多情况下Hibernate的性能比直接使用JDBC存取数据库要低然而通过正确的方法和策略在使用Hibernate的时候还是可以非常接近直接使用JD

知识大全 Hibernate简介

Hibernate简介  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Hibernate是一个开