📄 thirdcategorydao.java
字号:
package tarena.dao.pages;
import java.math.BigInteger;
import java.util.List;
import java.util.StringTokenizer;
import java.util.Vector;
import javax.servlet.http.Cookie;
import tarena.dao.BaseHibernateDAO;
import tarena.dao.ProductDAO;
import tarena.data.AbractBrand;
import tarena.data.AbractProduct;
import tarena.global.CookieOperate;
import tarena.global.PublicParameter;
import tarena.global.Transform;
@SuppressWarnings("unchecked")
public class ThirdCategoryDAO extends BaseHibernateDAO {
/**
* 列出三级分类下的商品数
* @param categoryid
* @return
*/
public Long listProductNumByCategory(int categoryid){
StringBuffer hql = new StringBuffer();
hql.append("select count(*) from Product p where p.category.id=?");
return (Long)getSession()
.createQuery(hql.toString())
.setParameter(0, categoryid)
.list().get(0);
}
/**
* 列出三级分类下的某品牌的商品数
* @param categoryid
* @param brandid
* @return
*/
public Long listProductNumByCategoryAndBrand(int categoryid,int brandid){
if(brandid==-1){
return listProductNumByCategory(categoryid);
}
StringBuffer hql = new StringBuffer();
hql.append("select count(*) from Product p where p.category.id=? and p.brand.id=?");
return (Long)getSession()
.createQuery(hql.toString())
.setParameter(0, categoryid)
.setParameter(1, brandid)
.list().get(0);
}
/**
* 查询指定三级分类下的所有的商品的品牌以及该品牌的商品数。
* @param categoryid 顶级分类id
* @return AbractCategory类型的集合
*/
public List<AbractBrand> listAllBrandWithProductCount(int categoryid){
StringBuffer sql=new StringBuffer();
sql.append("select b.id,b.en_name,b.cn_name,count(*) from ");
sql.append("brand b, product p ");
sql.append("where b.id=p.bid and p.cid=? ");
sql.append("group by p.bid ");
List<Object[]> result= getSession()
.createSQLQuery(sql.toString())
.setParameter(0, categoryid)
.list();
List<AbractBrand> brands=new Vector<AbractBrand>();
for(Object[] datas :result){
brands.add(new AbractBrand((Integer)datas[0],
datas[1].toString(),
datas[2].toString(),
((BigInteger)datas[3]).intValue()));
}
return brands;
}
/**
* 查询指定三级分类下的某段时间内商品销售排行。
* @param categoryid 顶级分类id
* @param num 要显示的结果数
* @param begin 开始的日期 日期格式为:'yyyy-MM-dd'
* @param end 结束的日期 日期格式为:'yyyy-MM-dd'
* @return AbractCategory类型的集合
*/
public List<AbractProduct> listHotSaleProduct(int categoryid,int num,String begin,String end){
StringBuffer sql=new StringBuffer();
sql.append("select p.id,p.pname,p.price ");
sql.append("from product p,transaction t,orders o ");
sql.append("where (p.id=t.pid) and (t.oid=o.id) and (p.cid=?) ");
sql.append("and (o.ordertime between date ? and date ?) ");
sql.append("order by p.salepopluarity ");
List<Object[]> result= getSession()
.createSQLQuery(sql.toString())
.setParameter(0, categoryid)
.setParameter(1, begin)
.setParameter(2, end)
.setFirstResult(0)
.setMaxResults(num)
.list();
//List<AbractBrand> brands=new Vector<AbractBrand>();
List<AbractProduct> products=new Vector<AbractProduct>();
for(Object[] datas :result){
products.add(new AbractProduct((Integer)datas[0],
datas[1].toString(),
(Double)datas[2]));
}
return products;
}
/**
* 查询指定三级分类下的某段时间内商品关注排行。
* @param categoryid 顶级分类id
* @param num 要显示的结果数
* @param begin 开始的日期 日期格式为:'yyyy-MM-dd'
* @param end 结束的日期 日期格式为:'yyyy-MM-dd'
* @return AbractCategory类型的集合
*/
public List<AbractProduct> listHotAttentionProduct(int categoryid,int num,String begin,String end){
StringBuffer sql=new StringBuffer();
sql.append("select p.id,p.pname,p.price,count(pa.id) n ");
sql.append("from product p , productattention pa ");
sql.append("where pa.pid=p.id and p.cid=? ");
sql.append("and pa.attentiontime between date '"+begin+"' and date '"+end+"' ");
sql.append("group by p.id ");
sql.append("order by n desc ");
List<Object[]> result= getSession()
.createSQLQuery(sql.toString())
.setParameter(0, categoryid)
//.setParameter(1, begin)
//.setParameter(2, end)
.setFirstResult(0)
.setMaxResults(num)
.list();
//System.out.println(result.size());
List<AbractProduct> products=new Vector<AbractProduct>();
for(Object[] datas :result){
products.add(new AbractProduct((Integer)datas[0],
datas[1].toString(),
(Double)datas[2]));
}
return products;
}
/**
* 列出用户最近的浏览记录
* @param cookies 用户的cookies
* @return 返回List类型的AbractProduct
*/
public List<AbractProduct> listUserLastViewProduct(Cookie[] cookies){
List<AbractProduct> products = null;
Cookie cookie = CookieOperate.FindCookie(PublicParameter.cookie_view_products, cookies);
if(cookie!=null){
String ids = cookie.getValue();
ProductDAO productDAO = new ProductDAO();
StringTokenizer tokenizer = new StringTokenizer(ids,",");
while(tokenizer.hasMoreTokens()){
Integer id = Transform.StringToInteger(tokenizer.nextToken());
if(id!=-1){
AbractProduct product = productDAO.listProductByID(id);
if(product!=null)
products.add(product);
}
}
}
return products;
}
/**
* 查询指定三级分类下的所有商品,并分页显示。
* @param categoryid 三级分类id
* @param num 每页显示的商品数
* @param page 显示第几页,从第1页开始
* @param priceorder 按价格排序,合法参数有:desc,asc,null
* @return AbractProduct类型的集合
*/
public List<AbractProduct> listAllProductByCategory(int categoryid,
int num,
int page,
int brandid,
String priceorder){
if(priceorder==null) priceorder="";
else if(!priceorder.equals("asc")) priceorder="desc";
StringBuffer hql=new StringBuffer();
hql.append("select new tarena.data.AbractProduct(p.id,p.pname,p.price,p.viewpopluarity) ");
hql.append("from Product p ");
hql.append("where p.category.id=? ");
if(brandid!=-1){
hql.append(" and p.brand.id="+brandid);
}
hql.append(" order by p.price "+priceorder+" ");
return getSession()
.createQuery(hql.toString())
.setParameter(0, categoryid)
.setFirstResult(page-1)
.setMaxResults(num)
.list();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -