📄 psearchdao.java
字号:
package tarena.dao.pages;
import java.math.BigInteger;
import java.util.List;
import java.util.Vector;
import tarena.dao.BaseHibernateDAO;
import tarena.dao.CategoryDAO;
import tarena.dao.ProductDAO;
import tarena.data.AbractCategory;
import tarena.data.Page;
import tarena.entity.Product;
@SuppressWarnings("unchecked")
public class PSearchDAO extends BaseHibernateDAO {
private List<Product> listMatchedProductBy3Category(int categoryid,String keyword){
StringBuffer hql=new StringBuffer();
if(keyword==null||keyword.equals("")){
hql.append("from Product p where ");
hql.append("p.category.id="+categoryid);
}else{
hql.append("from Product p where ");
if(categoryid!=0){
hql.append("p.category.id="+categoryid+" and ");
}
hql.append("(p.pname like '%"+keyword+"%' or ");
hql.append("p.ptype like '%"+keyword+"%' or ");
hql.append("p.warranty like '%"+keyword+"%' or ");
hql.append("p.remark like '%"+keyword+"%' or ");
hql.append("p.summary like '%"+keyword+"%' or ");
hql.append("p.norm like '%"+keyword+"%')");
}
return getSession()
.createQuery(hql.toString())
/*.setFirstResult(page-1)
.setMaxResults(num)*/
.list();
}
private List<Product> listMatchedProductBy2Category(int categoryid,String keyword){
StringBuffer hql=new StringBuffer();
if(keyword==null){
keyword="";
}
hql.append("select p.id from product p,category c ");
hql.append("where p.cid=c.id and c.parentid="+categoryid);
hql.append(" and (p.pname like '%"+keyword+"%' or ");
hql.append("p.ptype like '%"+keyword+"%' or ");
hql.append("p.warranty like '%"+keyword+"%' or ");
hql.append("p.remark like '%"+keyword+"%' or ");
hql.append("p.summary like '%"+keyword+"%' or ");
hql.append("p.norm like '%"+keyword+"%')");
List<Integer> ids= getSession()
.createSQLQuery(hql.toString())
/*.setFirstResult(page-1)
.setMaxResults(num)*/
.list();
List<Product> p=new Vector<Product>();
for(Integer id:ids){
Product pro=new ProductDAO().findById(id);
p.add(pro);
}
return p;
}
private List<Product> listMatchedProductBy0Category(int categoryid,String keyword){
StringBuffer hql=new StringBuffer();
if(keyword==null){
keyword="";
}
hql.append("from Product p where ");
hql.append("p.pname like '%"+keyword+"%' or ");
hql.append("p.ptype like '%"+keyword+"%' or ");
hql.append("p.warranty like '%"+keyword+"%' or ");
hql.append("p.remark like '%"+keyword+"%' or ");
hql.append("p.summary like '%"+keyword+"%' or ");
hql.append("p.norm like '%"+keyword+"%')");
return getSession()
.createQuery(hql.toString())
/*.setFirstResult(page-1)
.setMaxResults(num)*/
.list();
/*List<Product> p=new Vector<Product>();
for(Integer id:ids){
Product pro=new ProductDAO().findById(id);
p.add(pro);
}
return p;*/
}
private List<Product> listMatchedProductBy1Category(int categoryid,String keyword){
StringBuffer hql=new StringBuffer();
if(keyword==null){
keyword="";
}
hql.append("select p.id from product p,category c ");
hql.append("where p.cid=c.id and c.parentid in (select id from category where parentid="+categoryid+") ");
hql.append(" and (p.pname like '%"+keyword+"%' or ");
hql.append("p.ptype like '%"+keyword+"%' or ");
hql.append("p.warranty like '%"+keyword+"%' or ");
hql.append("p.remark like '%"+keyword+"%' or ");
hql.append("p.summary like '%"+keyword+"%' or ");
hql.append("p.norm like '%"+keyword+"%')");
List<Integer> ids= getSession()
.createSQLQuery(hql.toString())
/*.setFirstResult(page-1)
.setMaxResults(num)*/
.list();
List<Product> p=new Vector<Product>();
for(Integer id:ids){
Product pro=new ProductDAO().findById(id);
p.add(pro);
}
return p;
}
/**
* 搜索所有商品,不分页。
* @param categoryid
* @param keyword
* @return
*/
public List<Product> listMatchedProduct(int categoryid,String keyword){
CategoryDAO cdao=new CategoryDAO();
int ctype;
try {
ctype = cdao.findById(categoryid).getCtype();
} catch (RuntimeException e) {
ctype = 0;
}
List<Product> re=null;
switch (ctype){
case 1:
re=listMatchedProductBy1Category(categoryid, keyword);
break;
case 2:
re=listMatchedProductBy2Category(categoryid, keyword);
break;
case 3:
re=listMatchedProductBy3Category(categoryid, keyword);
break;
default:
re=listMatchedProductBy0Category(categoryid, keyword);
break;
}
return re;
}
/**
* 利用分页搜索商品。
*/
public List<Product> listMatchedProductUsePaging(int categoryid,String keyword, int num, int page){
List<Product> all=listMatchedProduct(categoryid, keyword);
int fromIndex=(page-1)*num;
int toIndex=page*num;
return all.subList(fromIndex>all.size()?0:fromIndex, toIndex>all.size()?all.size():toIndex);
}
public List<AbractCategory> listMatchedCategory(int categoryid,String keyword){
CategoryDAO cdao=new CategoryDAO();
int ctype;
try {
ctype = cdao.findById(categoryid).getCtype();
} catch (RuntimeException e) {
ctype=0;
}
StringBuffer hql=new StringBuffer();
if(keyword==null){
keyword="";
}
hql.append("select c.id,c.cname,count(*) from product p,category c ");
switch (ctype){
case 3:
hql.append("where p.cid=c.id and c.id="+categoryid);
break;
case 2:
hql.append("where p.cid=c.id and c.parentid="+categoryid);
break;
case 1:
hql.append("where p.cid=c.id and c.parentid in (select id from category where parentid="+categoryid+") ");
break;
default:
hql.append("where p.cid=c.id ");
break;
}
hql.append(" and (p.pname like '%"+keyword+"%' or ");
hql.append("p.ptype like '%"+keyword+"%' or ");
hql.append("p.warranty like '%"+keyword+"%' or ");
hql.append("p.remark like '%"+keyword+"%' or ");
hql.append("p.summary like '%"+keyword+"%' or ");
hql.append("p.norm like '%"+keyword+"%')");
hql.append(" group by c.id");
List<Object[]> datas= getSession()
.createSQLQuery(hql.toString())
.list();
List<AbractCategory> c=new Vector<AbractCategory>();
for(Object[] objs:datas){
c.add(new AbractCategory((Integer)objs[0],objs[1].toString(),((BigInteger)objs[2]).intValue()));
}
return c;
}
/**
* 分页结果。
* @param categoryid
* @param keyword
* @param page
* @param num
* @return
*/
public List<Page> listPageLinks(int categoryid,String keyword,int page,int num){
int total=listMatchedProduct(categoryid, keyword).size();
int pages=total%num==0?total/num:(total/num+1);
List<Page> re=new Vector<Page>();
if(page==1){
re.add(new Page("第一页",null));
re.add(new Page("上一页",null));
}else{
re.add(new Page("第一页","psearch.htm?cid="+categoryid+"&word="+keyword+"&page=1"));
re.add(new Page("上一页","psearch.htm?cid="+categoryid+"&word="+keyword+"&page="+(page-1)));
}
if(page==pages){
re.add(new Page("下一页",null));
re.add(new Page("最后一页",null));
}else{
re.add(new Page("下一页","psearch.htm?cid="+categoryid+"&word="+keyword+"&page="+(page+1)));
re.add(new Page("最后一页","psearch.htm?cid="+categoryid+"&word="+keyword+"&page="+pages));
}
re.add(new Page(total+"",null));
re.add(new Page(pages+"",null));
re.add(new Page(page+"",null));
re.add(new Page(page+"","psearch.htm?cid="+categoryid+"&word="+keyword));
return re;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -