您好,欢迎访问三七文档
第七章Hibernate查询回顾写出下面两个类的Hibernate配置文件,注意关联的配置。//订单实体类publicclassOrder{privatelongorderId;privateStringcustomerName;privatejava.sql.DateorderDate;//setters&getters...}//订单明细实体类publicclassOrderLine{privatelonglineId;privateOrderorder;privateStringproductName;privatelongcount;//setters&getters...}预习检查Hibernate支持哪两种查询?HQL是什么?本章任务使用Hibernate实现,房屋查询DAO对title模糊查询对街道精确查询对租金使用一个范围查询查询特定联系人都在哪些街道发布了信息提供分页查询方法掌握HQL查询掌握Criteria查询本章目标为什么使用HQL如何使用Hibernate查询所有房屋信息?SQL语句:select*fromtbl_fwxxHibernate中如何实现查询HQLHibernateQueryLanuageHibernate查询语言如何使用HQL使用HQL的四步1、得到Session2、编写HQL语句3、创建Query4、执行查询1234fromTblFwxxfrom关键字,类似于SQL语句实体类名,而不是数据库表名可以没有select子句如何使用HQL类似SQLSELECT语句,可以使用表的别名selectfwfromTblFwxxasfw表的别名,as可以省略HQL是面向对象的查询语言。selectfw表示查询fw对象执行结果与fromTblFwxx相同常见错误下面代码中有什么错误,怎么更正?tbl_fwxx是表名。HQL是对象查询语言,应该是类名:TblFwxx常见错误下面代码中有什么错误,怎么更正?类名是区分大小写的。应该是TblFwxx。但SELECT、FROM等关键字是不区分大小写的。属性查询selectfwfromTblFwxxfw将查询整个对象信息,我们只想查询date和title怎么做?selectfw.title,fw.datefromTblFwxxfw每条数据封装成一个Object数组查询结果仍保存在list中小结实现QxDAO接口:publicinterfaceQxDAO{publicListlistAllQx();}参数查询如何实现:根据title模糊查询房屋信息?selectfwfromTblFwxxfwwherefw.titlelike'%健翔桥%'where子句支持like关键字支持'%'通配符这样拼装HQL字符串容易带来安全隐患参数查询HQL提供类似preparedStatement的参数查询以'?'为占位符设置参数的值Query提供setLong,setDouble,setDate等方法用于设置不同类型的参数值注意:1.必须保证:query设置参数的数目==hql语句中占位符的数目2.占位符下标从0开始。参数查询查询租金在zj1到zj2范围内的租房信息:publicListsearchByZj(intzj1,intzj2)。publicListsearchByZj(intzj1,intzj2){Sessionsession=this.getSession();Stringhql=fromTblFwxxfw+wherefw.zj=?andfw.zj=?;Queryquery=session.createQuery(hql);query.setInteger(1,zj1);query.setInteger(2,zj2);returnquery.list();}支持:、、=、=、=、和isnull;and、or、not和括号;in和between使用between关键字上面的hql语句怎么写?当参数数目增多的时候,上面的代码会带来什么问题?当参数数目增多时,代码可读性下降;将下标顺序硬编码,参数顺序有调整则代码也要调整参数查询:命名参数查询租金在zj1到zj2范围内的租房信息。使用“:参数名”的格式定义命名参数设定命名参数的值小结根据房屋类型查询:publicListsearchByJd(intjdId);提示:...wherefw.jd.jdid=?或者...wherefw.jd.jdid=:jdid关联查询查询:联系人为“伊先生”的房屋信息都分布在哪些街道。从两类对象中检索数据设置关联条件。注意:jd是对象。生成的SQL语句小结写出HQL语句:查询“亚运村”街道的房屋信息中,涉及的房屋类型。提示:亚运村街道的房屋信息:fw.jd.jdid=39分页查询实现分页查询方法:publicListsearch(intpageNo,intpageSize)。使用orderby对结果排序分页代码统计函数在实现分页功能时,我们需要知道总记录数以便计算总页数。使用count()函数当结果只有一条记录时,可以使用uniqueResult()得到结果可以使用的函数还有:min()、max()、avg()小结写出程序代码:1、根据租金排序,查询从高到低前10条记录。2、查询朝阳区房屋租金的平均值。Stringhql=fromTblFwxxfworderbyfw.zjdesc;...query.setFirstResult(0);query.setMaxResult(10);Stringhql=selectavg(fw.zj)fromTblFwxxfw++wherefw.jd.tblQx.qx='朝阳区';...doubleavgZj=(Double)query.uniqueResult();对象查询使用一个查询方法,同时支持三项功能:对title模糊查询对房屋类型精确查询对租金使用一个范围查询publicListsearch(TblFwxxcondition){Stringhql=selectfwfromTblFwxxfwhql+=where1=1;if(condition.getTitle()!=null){hql+=andfw.titlelike'%+condition.getTitle()+%';}...}代码啰嗦,不易维护不方便使用参数查询,安全性和执行效率不好使用Criteria查询代码更简洁使用Criteria查询以对象的方式构建查询创建Criteria对象模糊查询大于等于和小于等于支持in和between数组类型支持类似EL表达式的属性浏览语法可以增加多个排序规则使用Criteria查询测试程序和运行效果生成的SQL语句:Hibernate:selectthis_.fwidasfwid1_0_,this_.uidasuid1_0_,this_.jdidasjdid1_0_,this_.lxidaslxid1_0_,this_.shiasshi1_0_,this_.tingasting1_0_,this_.fwxxasfwxx1_0_,this_.zjaszj1_0_,this_.titleastitle1_0_,this_.dateasdate1_0_,this_.telephoneastelephone1_0_,this_.lxraslxr1_0_fromTBL_FWXXthis_wherethis_.titlelike?andthis_.zj=?andthis_.zj=?andthis_.lxidin(?,?)orderbythis_.fwidasc总结HQL的全称是?和SQL相比,HQL有哪些特点?HQL语句为:selectjd.jdid,jd.jdfromTblJdjd。怎样获得并显示查询结果?使用'?'做占位符的参数查询,怎样设置参数的值?命名参数查询的语法是?怎样创建Criteria查询对象?
本文标题:java三层架构
链接地址:https://www.777doc.com/doc-3143351 .html