xmlns:
xsi="http:
//www.w3.org/2001/XMLSchema-instance"
xsi:
schemaLocation="
version="1.0">
java:
/MySqlDS
--调整JDBC抓取数量的大小:
Statement.setFetchSize()-->
--调整JDBC批量更新数量-->
--显示最终执行的SQL-->
--格式化显示的SQL-->
7.在src下建立三个包,结构如图5-7所示。
图5.7
a)在包cn.edu.ejb3.bean下设计两个实体Bean:
Order.java、OrderItem.java
代码如下:
Order.java:
packagecn.edu.ejb3.bean;
importjava.io.Serializable;
importjava.util.HashSet;
importjava.util.Date;
importjava.util.Set;
importjavax.persistence.CascadeType;
importjavax.persistence.Entity;
importjavax.persistence.FetchType;
importjavax.persistence.GeneratedValue;
importjavax.persistence.Id;
importjavax.persistence.OneToMany;
importjavax.persistence.OrderBy;
importjavax.persistence.Table;
importjavax.persistence.Temporal;
importjavax.persistence.TemporalType;
@Entity
@Table(name="Orders")
publicclassOrderimplementsSerializable{
privatestaticfinallongserialVersionUID=4970325922198249712L;
privateIntegerorderid;
privateFloatamount;
privateSetorderItems=newHashSet();
privateDatecreatedate;
@Id
@GeneratedValue
publicIntegergetOrderid(){
returnorderid;
}
publicvoidsetOrderid(Integerorderid){
this.orderid=orderid;
}
publicFloatgetAmount(){
returnamount;
}
publicvoidsetAmount(Floatamount){
this.amount=amount;
}
@OneToMany(mappedBy="order",cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@OrderBy(value="idASC")
publicSetgetOrderItems(){
returnorderItems;
}
publicvoidsetOrderItems(SetorderItems){
this.orderItems=orderItems;
}
@Temporal(value=TemporalType.TIMESTAMP)
publicDategetCreatedate(){
returncreatedate;
}
publicvoidsetCreatedate(Datecreatedate){
this.createdate=createdate;
}
publicvoidaddOrderItem(OrderItemorderitem){
if(!
this.orderItems.contains(orderitem)){
this.orderItems.add(orderitem);
orderitem.setOrder(this);
}
}
publicvoidremoveOrderItem(OrderItemorderitem){
if(this.orderItems.contains(orderitem)){
orderitem.setOrder(null);
this.orderItems.remove(orderitem);
}
}
/**
*返回对象的散列代码值。
该实现根据此对象
*中orderid字段计算散列代码值。
*@return此对象的散列代码值。
*/
@Override
publicinthashCode(){
inthash=0;
hash+=(this.orderid!
=null?
this.orderid.hashCode():
0);
returnhash;
}
/**
*确定其他对象是否等于此Order。
当且仅当
*参数不为null且该参数是具有与此对象相同orderid字段值的Order对象时,
*结果才为true
。
*@param对象,要比较的引用对象
*如果此对象与参数相同,则@returntrue
;
*否则为false
。
*/
@Override
publicbooleanequals(Objectobject){
if(!
(objectinstanceofOrder)){
returnfalse;
}
Orderother=(Order)object;
if(this.orderid!
=other.orderid&&(this.orderid==null||!
this.orderid.equals(other.orderid)))returnfalse;
returntrue;
}
/**
*返回对象的字符串表示法。
该实现根据orderid字段
*构造此表示法。
*@return对象的字符串表示法。
*/
@Override
publicStringtoString(){
returnthis.getClass().getName()+"[orderid="+orderid+"]";
}
}
OrderItem.java:
packagecn.edu.ejb3.bean;
importjava.io.Serializable;
importjavax.persistence.CascadeType;
importjavax.persistence.Column;
importjavax.persistence.Entity;
importjavax.persistence.GeneratedValue;
importjavax.persistence.Id;
importjavax.persistence.JoinColumn;
importjavax.persistence.ManyToOne;
@Entity
publicclassOrderItemimplementsSerializable{
privatestaticfinallongserialVersionUID=-1166337687856636179L;
privateIntegerid;
privateStringproductname;
privateFloatprice;
privateOrderorder;
publicOrderItem(){}
publicOrderItem(Stringproductname,Floatprice){
this.productname=productname;
this.price=price;
}
@Id
@GeneratedValue
publicIntegergetId(){
returnid;
}
publicvoidsetId(Integerid){
this.id=id;
}
@Column(length=100,nullable=false)
publicStringgetProductname(){
returnproductname;
}
publicvoidsetProductname(Stringproductname){
this.productname=productname;
}
publicFloatgetPrice(){
returnprice;
}
publicvoidsetPrice(Floatprice){
this.price=price;
}
@ManyToOne(cascade=CascadeType.REFRESH,optional=false)
@JoinColumn(name="order_id")
publicOrdergetOrder(){
returnorder;
}
publicvoidsetOrder(Orderorder){
this.order=order;
}
/**
*返回对象的散列代码值。
该实现根据此对象
*中id字段计算散列代码值。
*@return此对象的散列代码值。
*/
@Override
publicinthashCode(){
inthash=0;
hash+=(this.id!
=null?
this.id.hashCode():
super.hashCode());
returnhash;
}
/**
*确定其他对象是否等于此OrderItem。
当且仅当
*参数不为null且该参数是具有与此对象相同id字段值的OrderItem对象时,
*结果才为true
。
*@param对象,要比较的引用对象
*如果此对象与参数相同,则@returntrue
;
*否则为false
。
*/
@Override
publicbooleanequals(Objectobject){
if(!
(objectinstanceofOrderItem)){
returnfalse;
}
OrderItemother=(OrderItem)object;
if(this.id!
=other.id&&(this.id==null||!
this.id.equals(other.id)))returnfalse;
returntrue;
}
/**
*返回对象的字符串表示法。
该实现根据id字段
*构造此表示法。
*@return对象的字符串表示法。
*/
@Override
publicStringtoString(){
returnthis.getClass().getName()+"[id="+id+"]";
}
}
b)设计SessionBean。
在cn.edu.ejb3下设计接口OrderDAO,代码如下:
packagecn.edu.ejb3;
importjava.util.List;
importcn.edu.ejb3.bean.Order;
publicinterfaceOrderDAO{
/**
*添加一个订单
*
*/
publicvoidinsertOrder(Orderorder);
/**
*获取指定订单
*@paramorderid订单号
*@return
*/
publicOrdergetOrderByID(Integerorderid);
/**
*获取所有订单
*@return
*/
publicListgetAllOrder();
}
c)在cn.edu.ejb3.impl下设计实现类:
OrderDAOBean,代码如下:
packagecn.edu.ejb3.impl;
importjava.util.List;
importjavax.ejb.Remote;
importjavax.ejb.Stateless;
importjavax.persistence.EntityManager;
importjavax.persistence.PersistenceContext;
importjavax.persistence.Query;
importcn.edu.ejb3.OrderDAO;
importcn.edu.ejb3.bean.Order;
@Stateless
@Remote(OrderDAO.class)
publicclassOrderDAOBeanimplementsOrderDAO{
@PersistenceContextprotectedEntityManagerem;
publicvoidinsertOrder(Orderorder){
em.persist(order);
}
publicOrdergetOrderByID(Integerorderid){
Orderorder=em.find(Order.class,orderid);
order.getOrderItems().size();
//因为是延迟加载,通过执行size()这种方式获取订单下的所有订单项
returnorder;
}
@SuppressWarnings("unchecked")
publicListgetAllOrder(){
Queryquery=em.createQuery("selectDISTINCTofromOrderoinnerjoinfetcho.orderItemsorderbyo.orderid");
return(List)query.getResultList();
}
}
8.添加jar文件,具体操作如图5-8、图5-9所示。
图5-8
图5-9
选择%JBOSS_HOME%\client下所有jar文件,然后单击打开。
如图5-10、图5-11所示。
图5-10
图5-11
注意:
把jar文件“mysql-connector-java-5.1.8-bin.jar”放入%JBOSS_HOME%\\server\default\lib下。
步骤2:
创建客户端
1.右单击package视图空白区域,如图5-12所示,选择【New】->【WebProject】,弹出如图5-13所示窗口,输入项目名称。
图5-12
图5-13
2.右单击项目名“EntityClient”,如图5-14所示,选择【BuildPath】->【ConfigureBuildPath】,弹出如图5-15所示窗口。
图5-14
图5-15
3.具体操作如图5-15、图5-16所示。
图5-16
4.在图5-16上单击OK,弹出如图5-17所示窗口。
图5-17
5.在图5-17上单击OK即可。
6.设计jsp页面,展开EntityClient项目,右单击【WebRoot】,如图5-18所示,选择【New】->【JSP】,弹出图5-19所示窗口。
图5-18
图5-19
7.在图5-19所示窗口输入文件名,单击Finish即可。
test.jsp文件内容如下:
<%@pagecontentType="text/html;charset=GBK"%>
<%@pageimport="cn.edu.ejb3.OrderDAO,cn.edu.ejb3.bean.*,
javax.naming.*,
java.util.*"%>
<%
try{
InitialContextctx=newInitialContext();
OrderDAOorderdao=(OrderDAO)ctx.lookup("OrderDAOBean/remote");
Orderneworder=newOrder();
neworder.setCreatedate(newDate());
neworder.addOrderItem(newOrderItem("笔记本电脑",newFloat(13200.5)));
neworder.addOrderItem(newOrderItem("U盘",newFloat(620)));
neworder.addOrderItem(newOrderItem("台式电脑",newFloat(6800.5)));
neworder.setAmount(newFloat(13200.5+620));
orderdao.insertOrder(neworder);
Listlist=orderdao.getAllOrder();
for(Orderod:
list){
out.println("==============订单号:
"+od.getOrderid()+"=================
");
for(OrderItemitem:
od.getOrderItems()){
out.println("订购产品:
"+item.getProductname()+"
");
}
}
}catch(Exceptione){
out.println(e.getMessage());
}
%>
步骤3:
部署数据源,
1.数据源配置文件mysql-ds.xml如下:
xmlversion="1.0"encoding="UTF-8"?
>
--Seehttp:
//www.jboss.org/community/wiki/Multiple1PCforinformationaboutlocal-tx-datasource-->
--$Id:
mysql-ds.xml975362009-12-0814:
05:
07Zjesper.pedersen$-->
--Datasourceconfig