Category类
package com.oracle.domain;
import java.io.Serializable;
/**
* 分类实体
* @author Administrator
*
*/
public class Category implements Serializable {
private String cid;
private String cname;
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 配置类和表结构的映射 -->
<class name="com.oracle.domain.Category" table="category"><!-- 包名 数据库表名 -->
<!-- 配置id
见到name属性,JavaBean的属性 (domain的属性)
见到column属性,是表结构的字段
-->
<id name="cid" column="cid"> <!-- 只有主键是 id 剩下的写property -->
<!-- 主键的生成策略 -->
<generator class="assigned"/>
</id>
<!-- 配置其他的属性 -->
<property name="cname"/>
</class>
</hibernate-mapping>
Order类
package com.oracle.domain;
import java.io.Serializable;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
public class Order implements Serializable{
/*
* `oid` varchar(32) NOT NULL,
`ordertime` datetime DEFAULT NULL,
`total` double DEFAULT NULL,
`state` int(11) DEFAULT NULL,
`address` varchar(30) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`telephone` varchar(20) DEFAULT NULL,
`uid` varchar(32) DEFAULT NULL,
*/
private String oid;
private Date ordertime;
private Double total;
private Integer state=0;//订单状态 0:未支付 1:已支付
private String address;
private String name;
private String telephone;
//属于那个用户
private User user;
//包含那些订单项
private List<Orderitem> items=new LinkedList<>();
public String getOid() {
return oid;
}
public void setOid(String oid) {
this.oid = oid;
}
public Date getOrdertime() {
return ordertime;
}
public void setOrdertime(Date ordertime) {
this.ordertime = ordertime;
}
public Double getTotal() {
return total;
}
public void setTotal(Double total) {
this.total = total;
}
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<Orderitem> getItems() {
return items;
}
public void setItems(List<Orderitem> items) {
this.items = items;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 配置类和表结构的映射 -->
<class name="com.oracle.domain.Order" table="orders"><!-- 包名 数据库表名 -->
<!-- 配置id
见到name属性,JavaBean的属性 (domain的属性)
见到column属性,是表结构的字段
-->
<id name="oid" column="oid"> <!-- 只有主键是 id 剩下的写property -->
<!-- 主键的生成策略 -->
<generator class="uuid"/>
</id>
<!-- 配置其他的属性 -->
<property name="ordertime"/>
<property name="total"/>
<property name="state"/>
<property name="address"/>
<property name="name"/>
<property name="telephone"/>
<!-- 配置关联对象: -->
<!--
many-to-one:标签.代表多对一.
* name :一的一方的对象的名称.
* class :一的一方的类的全路径.
* column :表中的外键的名称.
-->
<!--一个订单可以有多个订单项OrderItem-->
<!-- <list name="items" table="orderitem">定义一个集合
<key column="oid"></key>指定多端的外键
<list-index column="itemid"></list-index>
<one-to-many class="com.oracle.domain.Orderitem"/>指定多端对应的类
</list> -->
<!--多个订单可以属于一个用户-->
<many-to-one name="user" column="uid" class="com.oracle.domain.User" cascade="save-update"></many-to-one>
</class>
</hibernate-mapping>
Orderitem类
package com.oracle.domain;
import java.io.Serializable;
public class Orderitem implements Serializable{
/**
* `itemid` varchar(32) NOT NULL,
`count` int(11) DEFAULT NULL,
`subtotal` double DEFAULT NULL,
`pid` varchar(32) DEFAULT NULL,
`oid` varchar(32) DEFAULT NULL,
*/
private String itemid;
private Integer count;
private Double subtotal;
//包含那个商品
private Product product;
//属于那个订单
private Order order;
public String getItemid() {
return itemid;
}
public void setItemid(String itemid) {
this.itemid = itemid;
}
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
public Double getSubtotal() {
return subtotal;
}
public void setSubtotal(Double subtotal) {
this.subtotal = subtotal;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 配置类和表结构的映射 -->
<class name="com.oracle.domain.Orderitem" table="orderitem"><!-- 包名 数据库表名 -->
<!-- 配置id
见到name属性,JavaBean的属性 (domain的属性)
见到column属性,是表结构的字段
-->
<id name="itemid" column="itemid" type="java.lang.String"> <!-- 只有主键是 id 剩下的写property -->
<!-- 主键的生成策略 -->
<generator class="uuid">
<param name="property">product</param>
</generator>
</id>
<!-- 配置其他的属性 -->
<property name="count" type="java.lang.Integer"/>
<property name="subtotal" type="java.lang.Double"/>
<!-- 配置关联对象: -->
<!--
many-to-one:标签.代表多对一.
* name :一的一方的对象的名称.
* class :一的一方的类的全路径.
* column :表中的外键的名称.
-->
<!--多个订单项可以属于一个订单 -->
<many-to-one name="order" column="oid" lazy="false" class="com.oracle.domain.Order" ></many-to-one>
<!--一个订单项对应一种产品-->
<many-to-one name="product" column="pid" unique="true" />
</class>
</hibernate-mapping>
Product类
package com.oracle.domain;
import java.io.Serializable;
import java.util.Date;
/**
* 商品实体
* @author Administrator
*
*/
public class Product implements Serializable{
/**
* `pid` VARCHAR(32) NOT NULL,
`pname` VARCHAR(50) DEFAULT NULL,
`market_price` DOUBLE DEFAULT NULL,
`shop_price` DOUBLE DEFAULT NULL,
`pimage` VARCHAR(200) DEFAULT NULL,
`pdate` DATE DEFAULT NULL,
`is_hot` INT(11) DEFAULT NULL,
`pdesc` VARCHAR(255) DEFAULT NULL,
`pflag` INT(11) DEFAULT NULL,
`cid` VARCHAR(32) DEFAULT NULL,
*/
private String pid;
private String pname;
private Double market_price;
private Double shop_price;
private String pimage;
private Date pdate;
private Integer is_hot=0;//是否热门 1:热门 0:否
private String pdesc;
private Integer pflag=0;//是否下架 1:下架 0:未下架
//属于那个分类
private Category category;
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public Double getMarket_price() {
return market_price;
}
public void setMarket_price(Double market_price) {
this.market_price = market_price;
}
public Double getShop_price() {
return shop_price;
}
public void setShop_price(Double shop_price) {
this.shop_price = shop_price;
}
public String getPimage() {
return pimage;
}
public void setPimage(String pimage) {
this.pimage = pimage;
}
public Date getPdate() {
return pdate;
}
public void setPdate(Date pdate) {
this.pdate = pdate;
}
public Integer getIs_hot() {
return is_hot;
}
public void setIs_hot(Integer is_hot) {
this.is_hot = is_hot;
}
public String getPdesc() {
return pdesc;
}
public void setPdesc(String pdesc) {
this.pdesc = pdesc;
}
public Integer getPflag() {
return pflag;
}
public void setPflag(Integer pflag) {
this.pflag = pflag;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 配置类和表结构的映射 -->
<class name="com.oracle.domain.Product" table="product"><!-- 包名 数据库表名 -->
<!-- 配置id
见到name属性,JavaBean的属性 (domain的属性)
见到column属性,是表结构的字段
-->
<id name="pid" column="pid"> <!-- 只有主键是 id 剩下的写property -->
<!-- 主键的生成策略 -->
<generator class="identity"/>
</id>
<!-- 配置其他的属性 -->
<property name="pname"/>
<property name="market_price"/>
<property name="shop_price"/>
<property name="pimage"/>
<property name="pdate"/>
<property name="is_hot"/>
<property name="pdesc"/>
<property name="pflag"/>
</class>
</hibernate-mapping>
User类
package com.oracle.domain;
import java.util.Date;
/**
* 用户实体
* @author Administrator
*
*/
public class User {
/**
*
*/
private String uid;
private String username;
private String password;
private String name;
private String email;
private String telephone;
private Date birthday;
private String sex;
private Integer state=0;//激活状态 1:激活 0:未激活
private String code;
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 配置类和表结构的映射 -->
<class name="com.oracle.domain.User" table="user"><!-- 包名 数据库表名 -->
<!-- 配置id
见到name属性,JavaBean的属性 (domain的属性)
见到column属性,是表结构的字段
-->
<id name="uid" column="uid"> <!-- 只有主键是 id 剩下的写property -->
<!-- 主键的生成策略 -->
<generator class="assigned"/>
</id>
<!-- 配置其他的属性 -->
<property name="username"/>
<property name="password"/>
<property name="name"/>
<property name="email"/>
<property name="telephone"/>
<property name="birthday"/>
<property name="sex"/>
<property name="state"/>
<property name="code"/>
<!-- 配置关联对象: -->
<!--
many-to-one:标签.代表多对一.
* name :一的一方的对象的名称.
* class :一的一方的类的全路径.
* column :表中的外键的名称.
-->
</class>
</hibernate-mapping>
Dao层
package com.oracle.dao.impl;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.oracle.dao.CategoryDao;
import com.oracle.domain.Category;
import com.oracle.utils.DataSourceUtils;
import com.oracle.utils.HibernateUtils;
public class CategoryDaoImpl implements CategoryDao {
/**
* 查询所有
*/
@Override
public List<Category> findAll() throws Exception {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
Query query = session.createQuery("from Category");
List <Category>list = query.list();
transaction.commit();
session.close();
return list;
}
/**
* 添加分类
*/
@Override
public void add(Category c) throws Exception {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
session.save(c);
transaction.commit();
session.close();
}
/**
* 通过id获取一个分类
*/
@Override
public Category getById(String cid) throws Exception {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
Query query = session.createQuery("from Category where cid = ? ");
query.setString(0, cid);
Category category=(Category) query.uniqueResult();
transaction.commit();
session.close();
return category;
}
/**
* 更新
*/
@Override
public void update(Category c) throws Exception {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
session.update(c);
transaction.commit();
session.close();
}
/**
* 删除分类
*/
@Override
public void delete(String cid) throws Exception {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
Category category = getById(cid);
session.delete(category);
transaction.commit();
session.close();
}
}
package com.oracle.dao.impl;
import java.util.List;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.oracle.utils.HibernateUtils;
import com.oracle.dao.OrderDao;
import com.oracle.domain.Order;
import com.oracle.domain.Orderitem;
import com.oracle.domain.Product;
import com.oracle.utils.DataSourceUtils;
public class OrderDaoImpl implements OrderDao{
/**
* 添加一条订单
*/
@Override
public void add(Order order) throws Exception {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
session.save(order);
List<Orderitem> items = order.getItems();
for(Orderitem item:items){
session.save(item);
}
transaction.commit();
session.close();
}
/**
* 添加一条订单项
*/
@Override
public void addItem(Orderitem oi) throws Exception {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
session.save(oi);
transaction.commit();
session.close();
}
/**
* 通过oid 查询订单详情
*/
@Override
public Order getById(String oid) throws Exception {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
Query query = session.createQuery("from Order where oid = ?");
query.setString(0, oid);
Order order=(Order)query.uniqueResult();
/*QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
String sql="select * from orders where oid = ?";
Order order = qr.query(sql, new BeanHandler<>(Order.class), oid);*/
//封装orderitems
Query query2 = session.createQuery("from Orderitem oi,Product p where oi.product.pid = p.pid and oi.itemid = ?");
query2.setString(0, oid);
List<Map<String, Object>> list = query2.list();
/*sql="select * from orderitem oi,product p where oi.pid = p.pid and oi.oid = ?";
List<Map<String, Object>> query = qr.query(sql, new MapListHandler(), oid);*/
for (Map<String, Object> map : list) {
//封装product
Product product = new Product();
BeanUtils.populate(product, map);
//封装orderitem
Orderitem oi = new Orderitem();
BeanUtils.populate(oi, map);
oi.setProduct(product);
//将orderitem假如中order的items中
order.getItems().add(oi);
}
return order;
}
/**
* 修改订单
*/
@Override
public void update(Order order) throws Exception {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
session.merge(order);
transaction.commit();
session.close();
}
}
package com.oracle.dao.impl;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.oracle.utils.HibernateUtils;
import com.oracle.dao.ProductDao;
import com.oracle.domain.Category;
import com.oracle.domain.Product;
import com.oracle.utils.DataSourceUtils;
public class ProductDaoImpl implements ProductDao{
/**
* 查询最新
*/
@Override
public List<Product> findNew() throws Exception {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
Query query = session.createQuery("from Product where is_hot=1 order by pdate desc ");
query.setMaxResults(9);
List <Product>hlist = query.list();
transaction.commit();
session.close();
return hlist;
}
/**
* 查询热门
*/
@Override
public List<Product> findHot() throws Exception {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
Query query = session.createQuery("from Product order by pdate desc");
query.setMaxResults(9);
List <Product>hlist = query.list();
transaction.commit();
session.close();
return hlist;
}
/**
* 通过商品id 获取商品详情
*/
@Override
public Product getByPid(String pid) throws Exception {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
Query query = session.createQuery("from Product where pid = ?");
query.setString(0, pid);
query.setMaxResults(1);
Product product=(Product)query.uniqueResult();
transaction.commit();
session.close();
return product;
}
/**
* 查询当前也需要展示的数据
*/
@Override
public List<Product> findByPage(int currPage, int pageSize, String cid) throws Exception {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
Query query = session.createQuery("from Product where cid = ?");
query.setString(0, cid);
query.setFirstResult((currPage-1)*pageSize);
query.setMaxResults(pageSize);
List<Product> list = query.list();
transaction.commit();
session.close();
return list;
}
/**
* 查询当前类别的总条数
*/
@Override
public int getTotalCount(String cid) throws Exception {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
Query query = session.createQuery("select count(*) from Product where cid = ?");
query.setString(0, cid);
String count= query.uniqueResult().toString();
transaction.commit();
session.close();
return Integer.parseInt(count);
}
/**
* 更新商品的cid 为删除分类的时候准备
*/
@Override
public void updateCid(String cid) throws Exception {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
Query query = session.createQuery("from Product where cid = ?");
query.setString(0, cid);
List<Product> list = query.list();
for(Product product:list){
cid=null;
session.update(product);
}
transaction.commit();
session.close();
}
@Override
public List<Product> findAll() throws Exception {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
Query query = session.createQuery("from Product");
List <Product>list = query.list();
transaction.commit();
session.close();
return list;
}
/**
* 添加商品
*/
@Override
public void add(Product p) throws Exception {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
session.save(p);
transaction.commit();
session.close();
}
}
package com.oracle.dao.impl;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.oracle.dao.UserDao;
import com.oracle.domain.User;
import com.oracle.utils.DataSourceUtils;
import com.oracle.utils.HibernateUtils;
public class UserDaoImpl implements UserDao{
/**
* 用户注册
* @throws SQLException
*/
@Override
public void add(User user) throws SQLException {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
session.save(user);
transaction.commit();
session.close();
}
/**
* 通过激活码获取一个用户
*/
@Override
public User getByCode(String code) throws Exception {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
Query query = session.createQuery("from User where code = ?");
query.setString(0, code);
User user=(User)query.uniqueResult();
transaction.commit();
session.close();
return user;
}
/**
* 修改用户
*/
@Override
public void update(User user) throws Exception {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
session.update(user);
transaction.commit();
session.close();
}
/**
* 用户登录
*/
@Override
public User getByUsernameAndPwd(String username, String password) throws Exception {
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
Query query = session.createQuery("from User where username=? and password=?");
query.setString(0, username);
query.setString(1, password);
User user= (User) query.uniqueResult();
transaction.commit();
session.close();
return user;
}
}