J2EE实验报告6HQLWord文档格式.docx
《J2EE实验报告6HQLWord文档格式.docx》由会员分享,可在线阅读,更多相关《J2EE实验报告6HQLWord文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
5)、掌握HQL投影查询
6)、掌握HQL报表查询
2实验步骤
2.1搭建hibernate框架
(0)新建webproject项目,项目名称自定义(我取名为EX_HQL);
(1)将hibernate需要的jar包拷贝到______下;
2.2创建双向多对一映射
(1)在src下新增包cn.edu.xmut.many2one,在该包下新建类Customer.java和Order.java:
Customer.java
packagecn.edu.xmut.many2one;
publicclassCustomer{
privateintid;
privateStringname;
privateSet<
Order>
orders=newHashSet<
();
//省略getset方法
}
Order.java
publicclassOrder{
privateStringno;
privatedoubleprice;
privateCustomercustomer;
//省略getset方法
//添加一个toString方法
(2)创建xxx.hbm.xml文件
Customer.hbm.xml:
<
?
xmlversion="
1.0"
encoding="
utf-8"
>
!
DOCTYPEhibernate-mappingPUBLIC"
-//Hibernate/HibernateMappingDTD3.0//EN"
"
hibernate-mappingpackage="
cn.edu.xmut.many2one"
<
classname="
Customer"
table="
tb_customer"
>
idname="
id"
type="
java.lang.Integer"
columnname="
/>
generatorclass="
______"
/id>
propertyname="
name"
java.lang.String"
length="
45"
/property>
<
setname="
orders"
inverse="
______"
<
keycolumn="
/key>
one-to-manyclass="
Order"
/>
/set>
/class>
/hibernate-mapping>
Order.hbm.xml:
tb_order"
____"
no"
price"
java.lang.Double"
many-to-onename="
class="
column="
not-null="
true"
/many-to-one>
(3)创建hibernate.cfg.xml文件
DOCTYPEhibernate-configurationPUBLIC
"
-//Hibernate/HibernateConfigurationDTD3.0//EN"
http:
//www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"
hibernate-configuration>
--配置session节点-->
session-factoryname="
foo"
--配置连接数据库信息:
userpasswordurldriver_class-->
connection.username"
____<
connection.password"
connection.url"
_______<
connection.driver_class"
--配置数据库方言-->
dialect"
org.hibernate.dialect.MySQLInnoDBDialect<
--配置进行数据库操作时,是否需要显示sql语句-->
show_sql"
true<
--配置如何通过反射生成数据表-->
hbm2ddl.auto"
update<
--关联hibernate映射文件-->
mappingresource="
/session-factory>
/hibernate-configuration>
(4)编写测试代码
在src下新增包cn.edu.xmut.test,在该包下新建类Many2one.java:
packagecn.edu.xmut.test;
importorg.hibernate.Session;
importorg.hibernate.SessionFactory;
importorg.hibernate.Transaction;
importorg.hibernate.cfg.Configuration;
importcn.edu.xmut.many2one.Customer;
importcn.edu.xmut.many2one.Order;
publicclassMany2one{
publicstaticvoidmain(String[]args){
//1configuration
Configurationcfg=_________;
//2sessionFactory
SessionFactorysf=_________;
//3session
Sessions=_________;
//4Transaction
Transactionts=_________;
//5具体业务--初始化
Customercust=newCustomer();
cust.setName("
xmut"
);
Customercust2=newCustomer();
cust2.setName("
yaxon"
Customercust3=newCustomer();
cust3.setName("
tinghua"
Orderorder1=newOrder();
order1.setNo("
09soft1"
order1.setPrice(91.1);
order1.setCust(cust);
Orderorder2=newOrder();
order2.setNo("
09soft2"
order2.setPrice(91.2);
order2.setCust(cust);
Orderorder3=newOrder();
order3.setNo("
10soft1"
order3.setPrice(101.1);
order3.setCust(cust2);
Orderorder4=newOrder();
order4.setNo("
10soft2"
order4.setPrice(102.1);
order4.setCust(cust2);
Orderorder5=newOrder();
order5.setNo("
11soft1"
order5.setPrice(111.1);
order5.setCust(cust3);
Orderorder6=newOrder();
order6.setNo("
11soft2"
order6.setPrice(121.1);
order6.setCust(cust3);
session.save(cust);
session.save(cust2);
session.save(cust3);
session.save(order1);
session.save(order2);
session.save(order3);
session.save(order4);
session.save(order5);
session.save(order6);
//6commit
mit();
//7close
s.close();
//8close
sf.close();
}
(5)运行测试代码,查看结果。
2.3动态参数绑定-按参数名字绑定
在Many2one.java的main方法中添加如下代码:
Stringhql="
FROMOrderoWHEREo.noLIKE_______"
;
Queryquery=session.createQuery(hql);
List<
orders=query.setString("
"
%0s%"
)
.list();
for(Orderorder:
orders){
System.out.println(order);
运行测试代码,查看结果。
2.4动态参数绑定-按参数位置绑定
hql=______________________;
query=session.createQuery(hql);
orders=query.setParameter(0,"
).list();
2.5动态参数绑定-把参数与一个持久化类绑定
hql="
FROMOrderoWHERE__________ORDERBYo.noDESC"
orders=query.setEntity("
cust"
session.get(_________,1)).list();
2.6分页搜索
intpageNo=2;
intpageSize=3;
intfirstResult=________;
intmaxResults=________;
FROMOrder"
orders=query.___________(firstResult)
.____________(maxResults)
.list();
2.7在映射文件中自定义查询语句
(1)修改Order.hbm.xml文件,添加自定义查询语句:
queryname="
myQuery"
[CDATA[
FROMOrderoWHEREo.noLIKE'
%9s%'
]]>
/query>
(2)在Many2one.java的main方法中添加如下代码:
query=session.getNamedQuery("
orders=query.list();
(3)运行测试代码,查看结果。
2.8投影查询
(1)修改Order.java文件,添加构造方法:
publicOrder(){}
publicOrder(Integerid,doubleprice,Stringno){
this.id=id;
this.price=price;
this.no=no;
hql=________;
2.9报表查询-count
query=session.createQuery(hql);
longsize=(Long)query.setEntity("
session.get(Customer.class,2)).uniqueResult();
System.out.println(size);
2.10报表查询-min
hql=________;
doubleminPrice=(Double)query.setEntity("
session.get(Customer.class,2)).uniqueResult();
System.out.println(minPrice);
2.11报表查询-max
doublemaxPrice=(Double)query.setEntity("
System.out.println(maxPrice);
2.12报表查询-avg
doubleavg=(Double)query.setEntity("
System.out.println(avg);
2.13报表查询-sum
doublesum=(Double)query.setEntity("
System.out.println(sum);
3心得体会
不得放空