我的表
CREATE TABLE p_order
(
oid
int(11) NOT NULL AUTO_INCREMENT,
oadd
varchar(255) DEFAULT NULL,
otel
varchar(255) DEFAULT NULL,
uname
varchar(11) DEFAULT NULL,
PRIMARY KEY (oid
)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
CREATE TABLE p_order_item
(
oi_id
int(11) NOT NULL AUTO_INCREMENT,
oi_oid
int(11) NOT NULL,
oi_num
int(11) NOT NULL,
bname
varchar(255) DEFAULT NULL,
bprice
int(10) DEFAULT NULL,
PRIMARY KEY (oi_id
) USING BTREE,
KEY p_order_fk
(oi_oid
) USING BTREE,
CONSTRAINT p_order_fk
FOREIGN KEY (oi_oid
) REFERENCES p_order
(oid
)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
我的目录结构
可以忽略book
一、实体,entity
1、Order
package com.day.entity;
public class Order {
private Integer oid;
private String oadd;
private String otel;
private String uname;
public Integer getOid() {
return oid;
}
public void setOid(Integer oid) {
this.oid = oid;
}
public String getOadd() {
return oadd;
}
public void setOadd(String oadd) {
this.oadd = oadd;
}
public String getOtel() {
return otel;
}
public void setOtel(String otel) {
this.otel = otel;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public Order() {
super();
// TODO Auto-generated constructor stub
}
}
2、OrderItem
package com.day.entity;
public class OrderItem {
private Integer oiId;
private Integer oiOid;
private Integer oiBid;
private Integer oiNum;
private String bname;
private Integer bprice;
public String getBname() {
return bname;
}
public void setBname(String bname) {
this.bname = bname;
}
public Integer getBprice() {
return bprice;
}
public void setBprice(Integer bprice) {
this.bprice = bprice;
}
public Integer getOiId() {
return oiId;
}
public void setOiId(Integer oiId) {
this.oiId = oiId;
}
public Integer getOiOid() {
return oiOid;
}
public void setOiOid(Integer oiOid) {
this.oiOid = oiOid;
}
public Integer getOiBid() {
return oiBid;
}
public void setOiBid(Integer oiBid) {
this.oiBid = oiBid;
}
public Integer getOiNum() {
return oiNum;
}
public void setOiNum(Integer oiNum) {
this.oiNum = oiNum;
}
public OrderItem() {
// TODO Auto-generated constructor stub
}
}
3、Base 用来做连表的 这个比较关键!!!
package com.day.entity;
import java.io.Serializable;
public class Base implements Serializable{
@Override
public String toString() {
return "Base [bname=" + bname + ", price=" + price + ", uname=" + uname + ", tel=" + tel + ", Address="
+ Address + ", num=" + num + "]";
}
private String bname;
private Integer price;
private String uname;
private String tel;
private String Address;
private Integer num;
public Base(String bname, Integer price, String uname, String tel, String address, Integer num) {
super();
this.bname = bname;
this.price = price;
this.uname = uname;
this.tel = tel;
Address = address;
this.num = num;
}
public String getBname() {
return bname;
}
public void setBname(String bname) {
this.bname = bname;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getAddress() {
return Address;
}
public void setAddress(String address) {
Address = address;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
public Base() {
// TODO Auto-generated constructor stub
}
}
二、 resources 中的mapper
1、Order.hbm.xml
<?xml version="1.0" encoding="UTF-8"?><hibernate-mapping>
<class name="com.day.entity.Order" table="p_order">
<id name="oid" type="java.lang.Integer">
<column name="oid"></column>
<generator class="native"></generator>
</id>
<property name="oadd" type="java.lang.String">
<column name="oadd"></column>
</property>
<property name="otel" type="java.lang.String">
<column name="otel"></column>
</property>
<property name="uname" type="java.lang.String">
<column name="uname"></column>
</property>
</class>
</hibernate-mapping>
2、OrderItem.hbm.xml
<?xml version="1.0" encoding="UTF-8"?><hibernate-mapping>
<class name="com.day.entity.OrderItem" table="p_order_item">
<id name="oiId" type="java.lang.Integer">
<column name="oi_id"></column>
<generator class="native"></generator>
</id>
<property name="oiOid" type="java.lang.Integer">
<column name="oi_oid"></column>
</property>
<property name="oiNum" type="java.lang.Integer">
<column name="oi_num"></column>
</property>
<property name="bname" type="java.lang.String">
<column name="bname"></column>
</property>
<property name="bprice" type="java.lang.Integer">
<column name="bprice"></column>
</property>
</class>
</hibernate-mapping>
三、Dao
1、接口层
package com.day.dao;
import java.util.List;
import com.day.entity.Base;
import com.day.entity.Order;
import com.day.util.PageBean;
public interface IOrderDao {
public void add(Order order);
public List<Base> list(PageBean pb);
}
**2、实现层 我认为这里的代码是关键 好好领会 **
package com.day.dao.imp;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.query.Query;
import org.springframework.orm.hibernate5.HibernateCallback;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import com.day.dao.IOrderDao;
import com.day.entity.Base;
import com.day.entity.Order;
import com.day.util.PageBean;
import javafx.util.Callback;
public class OrderDaoImp extends HibernateDaoSupport implements IOrderDao {
public OrderDaoImp() {
// TODO Auto-generated constructor stub
}
public void add(Order order) {
this.getHibernateTemplate().save(order);
}
@SuppressWarnings("all")
public List<Base> list(final PageBean pb) {
return this.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
String hql="select oi.bname,oi.bprice,o.uname,o.otel,o.oadd,oi.oiNum from Order o,OrderItem oi where o.oid=oi.oiOid";//1、不能用* 2、必须用对象的匿名去点属性 否者会报错
String countHql="select count(*) from Order o,OrderItem oi where o.oid=oi.oiOid";
Query query=null;
/*此步骤可省略,这个我用来分页的
if(pb!=null&&pb.isPagination()) {
query=session.createQuery(countHql);
Object total=query.uniqueResult();//当返回的实例只有一个或者为null时
pb.setTotal(total.toString());
}*/
query=session.createQuery(hql);
/*此步骤可省略,这个我用来分页的
if(pb!=null&&pb.isPagination()) {
query.setFirstResult(pb.getStartIndex());
query.setMaxResults(pb.getRows());
}*/
List list=query.list();//得到对象集合,普通的查询是hibernate利用实体映射自动将将结果集赋值
List<Base> blist=new ArrayList<Base>();//利用地三者的实容器来装想要的属性,然后再返回
Base b=null;
for (int i = 0; i < list.size(); i++) {
Object[] object=(Object[]) list.get(i);
//一定要和hql语句的类型相匹配
b = new Base((String) object[0], (Integer) object[1],(String) object[2],(String) object[3],(String) object[4],(Integer) object[5]);
blist.add(b);
}
return blist;
}
});
}
}