《《java三层架构》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《java三层架构》PPT课件.ppt(27页珍藏版)》请在金锄头文库上搜索。
1、第七章第七章第七章第七章HibernateHibernate查询查询回顾回顾写出下面两个类的写出下面两个类的Hibernate配置文件,注意关联的配置。配置文件,注意关联的配置。/订单实体类订单实体类public class Order private long orderId ; private String customerName; private java.sql.Date orderDate; /setters & getters ./订单明细实体类订单明细实体类public class OrderLine private long lineId ; private Order or
2、der; private String productName; private long count; /setters & getters .预习检查预习检查Hibernate支持哪两种查询?支持哪两种查询?HQL是什么是什么?本章任务本章任务使用使用Hibernate实现,房屋查询实现,房屋查询DAO对对title模糊查询模糊查询对街道精确查询对街道精确查询对租金使用一个范围查询对租金使用一个范围查询查询特定联系人都在哪些街道发布了信息查询特定联系人都在哪些街道发布了信息提供分页查询方法提供分页查询方法掌握掌握HQL查询查询掌握掌握Criteria查询查询本章目标本章目标为什么使用为什么
3、使用HQL如何使用如何使用Hibernate查询所有房屋信息?查询所有房屋信息?SQL语句:语句:select * from tbl_fwxxHibernateHibernate中如何实现查询中如何实现查询中如何实现查询中如何实现查询HQLHibernate Query LanuageHibernateHibernate查询语言查询语言查询语言查询语言如何使用如何使用HQL使用使用HQL的四步的四步1、得到、得到Session2、编写、编写HQL语句语句3、创建、创建Query4、执行查询、执行查询1234from TblFwxxfrom关键字,类关键字,类似于似于SQL语句语句实体类名,而不
4、实体类名,而不是数据库表名是数据库表名可以没有可以没有select子句子句如何使用如何使用HQL类似类似SQL SELECT语句,可以使用表的别名语句,可以使用表的别名select fw from TblFwxx as fw表的别名,表的别名,as可以省略可以省略HQL是面向对象的查询语言。是面向对象的查询语言。select fw表示查询表示查询fw对象对象执行结果与执行结果与from TblFwxx相同相同常见错误常见错误下面代码中有什么错误,怎么更正?下面代码中有什么错误,怎么更正?tbl_fwxx是表名。是表名。HQL是对象查询语言,应该是对象查询语言,应该是类名:是类名:TblFwxx
5、常见错误常见错误下面代码中有什么错误,怎么更正?下面代码中有什么错误,怎么更正?类名是区分大类名是区分大小写的。应该小写的。应该是是TblFwxx。但但SELECT、FROM等关键等关键字是不区分大小写的。字是不区分大小写的。属性查询属性查询select fw from TblFwxx fw将查询整个对象信息,我们将查询整个对象信息,我们只想查询只想查询date和和title怎么做?怎么做? select fw.title, fw.date from TblFwxx fw每条数据封装成一个每条数据封装成一个Object数组数组查询结果仍保存在查询结果仍保存在list中中小结小结实现实现QxDA
6、O接口:接口:public interface QxDAOpublic List listAllQx();参数查询参数查询如何实现:根据如何实现:根据title模糊查询房屋信息?模糊查询房屋信息?select fw from TblFwxx fw where fw.title like %健翔桥健翔桥%where子句子句支持支持like关键字关键字支持支持%通配符通配符这样拼装这样拼装HQL字符串字符串容易带来安全隐患容易带来安全隐患参数查询参数查询HQL提供类似提供类似preparedStatement的参数查询的参数查询以以? ?为占位符为占位符设置参数的值设置参数的值Query提供提供s
7、etLong,setDouble,setDate等方法等方法用于设置不同类型的参数值用于设置不同类型的参数值注意:注意:1. 必须保证:必须保证:query设置参数的数目设置参数的数目 = hql语句中占位符的数目语句中占位符的数目2. 占位符下标从占位符下标从 0 开始。开始。参数查询参数查询查询租金在查询租金在zj1到到zj2范围内的租房信息:范围内的租房信息:public List searchByZj(int zj1, int zj2)。public List searchByZj(int zj1, int zj2)Session session = this.getSession()
8、;String hql = from TblFwxx fw +where fw.zj = ? and fw.zj 、= 、 = 、 和和is null;and、or、not和括号;和括号;in和和between使用使用between关键字上面的关键字上面的hql语句怎么写?语句怎么写?当参数数目增多的时候,上面的代码会带来什么问题?当参数数目增多的时候,上面的代码会带来什么问题?当参数数目增多时,代码可读性下当参数数目增多时,代码可读性下降;将下标顺序硬编码,参数顺序降;将下标顺序硬编码,参数顺序有调整则代码也要调整有调整则代码也要调整参数查询:命名参数参数查询:命名参数查询租金在查询租金在z
9、j1到到zj2范围内的租房信息。范围内的租房信息。使用使用“:参数参数名名”的格式定的格式定义命名参数义命名参数设定命名参数的值设定命名参数的值小结小结根据房屋类型查询:根据房屋类型查询:public List searchByJd(int jdId);提示:提示:.where fw.jd.jdid = ?或者或者.where fw.jd.jdid = :jdid关联查询关联查询查询:联系人为查询:联系人为“伊先生伊先生”的房屋信息都分布在哪些街道。的房屋信息都分布在哪些街道。从两类对象中从两类对象中检索数据检索数据设置关联条件。设置关联条件。注意:注意:jd是对象。是对象。生成的生成的SQL
10、语句语句小结小结写出写出HQL语句:语句:查询查询“亚运村亚运村”街道的房屋信息中,涉及的房屋类型。街道的房屋信息中,涉及的房屋类型。提示:提示:亚运村街道的房屋信息:亚运村街道的房屋信息: fw.jd.jdid=39分页查询分页查询实现分页查询方法:实现分页查询方法:public List search(int pageNo, int pageSize) 。使用使用order by对结果排序对结果排序分页代码分页代码统计函数统计函数在实现分页功能时,我们需要知道总记录数以便计算总页在实现分页功能时,我们需要知道总记录数以便计算总页数。数。使用使用count()函数函数当结果只有一条记录时,可
11、以使用当结果只有一条记录时,可以使用uniqueResult()得到结果得到结果可以使用的函数还有:可以使用的函数还有:min()、max()、avg()小结小结写出程序代码:写出程序代码:1、根据租金排序,查询从高到低前、根据租金排序,查询从高到低前10条记录。条记录。2、查询朝阳区房屋租金的平均值。、查询朝阳区房屋租金的平均值。String hql = from TblFwxx fw order by fw.zj desc;.query.setFirstResult(0);query.setMaxResult(10);String hql = select avg(fw.zj) from
12、TblFwxx fw + +where fw.jd. tblQx.qx=朝阳区朝阳区;.double avgZj = (Double)query.uniqueResult();对象查询对象查询使用一个查询方法,同时支持三项功能:使用一个查询方法,同时支持三项功能:对对title模糊查询模糊查询对房屋类型精确查询对房屋类型精确查询对租金使用一个范围查询对租金使用一个范围查询public List search(TblFwxx condition)String hql = select fw from TblFwxx fw hql += where 1=1 ;if (condition.getTi
13、tle()!=null)hql += and fw.title like % + condition.getTitle() + % ;.代码啰嗦,不易维代码啰嗦,不易维护护不方便使用参数查询,不方便使用参数查询,安全性和执行效率不安全性和执行效率不好好使用使用Criteria查询代码更简洁查询代码更简洁使用Criteria查询以对象的方式构建查询以对象的方式构建查询创建创建Criteria对象对象模糊查询模糊查询大于等于大于等于 和和 小于等于小于等于支持支持in和和between数组类型数组类型支持类似支持类似EL表达式表达式的属性浏的属性浏览语法览语法可以增加多可以增加多个排序规则个排序规
14、则使用Criteria查询测试程序和运行效果测试程序和运行效果生成的生成的SQL语句:语句:Hibernate: select this_.fwid as fwid1_0_, this_.uid as uid1_0_, this_.jdid as jdid1_0_, this_.lxid as lxid1_0_, this_.shi as shi1_0_, this_.ting as ting1_0_, this_.fwxx as fwxx1_0_, this_.zj as zj1_0_, this_.title as title1_0_, this_.date as date1_0_, th
15、is_.telephone as telephone1_0_, this_.lxr as lxr1_0_ from TBL_FWXX this_ where this_.title like ? and this_.zj=? and this_.zj=? and this_.lxid in (?, ?) order by this_.fwid asc总结总结HQL的全称是?的全称是?和和SQL相比,相比,HQL有哪些特点?有哪些特点?HQL语句为:语句为:select jd.jdid,jd.jd from TblJd jd。怎样。怎样获得并显示查询结果?获得并显示查询结果?使用使用?做占位符的参数查询,怎样设置参数的值?做占位符的参数查询,怎样设置参数的值?命名参数查询的语法是?命名参数查询的语法是?怎样创建怎样创建Criteria查询对象?查询对象?