spring+springmvc+hibernate简单的电商网站流程(2)收藏夹

我们先弄买家方面的模块,这个收藏夹非常得简单。

一,添加收藏

 //添加商品收藏,只需要把前台传过来的商品信息存到用户得收藏夹数据库中即可。

@RequsetMapping(value = "/xxx/xxx/add_goods_favorite")

public void add_goods_favorite(HttpServletRequest request, HttpServletResponse response,String goods_id){

//需要判断用户是否登陆,这里就要用到上一篇文章讲的登陆机制,这里还是用到了我自己写的工具类 用于取session得。

User user = (User) LoginContext.getSessionValueByLogin(request);

//判断用户登陆成功后,查找数据库中这个用户是否已经添加过此商品得收藏。(注意数据类型得转换)

Map map = new HashMap();

map.put("user_id",user.getId());

map.put("goods_id",Long.parseLong(goods_id));

List list = this.favoriteService.query("select obj from Favorite obj where obj.user.id=:user_id and obj.goods_id=:goods_id",map,-1,-1);

if(list.size() == 0){

//这里也可以简单得改成收藏店铺,就不一一举例了

Goods goods = this.goodsService.getObjById(Long.parseLong(goods_id));

Favorite obj = new Favorite();

obj.setAddTime(new Date());

obj.setType(0);//type为0是商品,为1是店铺

obj.setUser(this.userService.getObjById(user.getId()));

obj.setGoods(goods);

this.favoriteService.save(obj);

returnSuccessData(request,response,"收藏成功");

return;

}

}

二,查看收藏夹

@RequsetMapping(value = "/xxx/xxx/favorite_goods")

public void favorite_goods(HttpServletRequest request, HttpServletResponse response, String currentPage,String orderBy,String orderType){

//这里说明一下参数,currentPage是用来看第几页的,orderBy是排序依据,orderType排序类型(正序或者倒序)

//判断用户是否登陆

...

FavoriteQueryObject qo = new FavoriteQueryObject(currentPage,orderBy,orderType);

qo.addQuery("obj.type",new SysMap("type",Integer.valueOf(0)),"=");

qo.addQuery("obj.user.id",new SysMap("type",Integer.valueOf(0)),"=");

IPageList plist = this.favoriteService.list(qo);

returnData(response,getArray(plist));

return;

}

下面我们简单讲解一下我怎么设计的Hibernate分页(如果写的不清楚,可以自己写一个分页查询):

我们知道sql 或者 hql语句在查询的时候是可以分页的。

完整的hql语句是这样的:select /update/delete ...... from ..... where......group by......having....order by....asc/desc

这样我们创建一个QueryObject做为父类

public  class QueryObject{

protected Interger currentPage = Integer.valueOf(0);

protected String orderBy;

protected String orderType;

protected Map params = new HashMap();

protected String queryString = "1=1";

set/get方法...

public QueryObject(String currentPage,Map<String,Object>map,String orderBy,String ordeType){

//这里设置完页码,然后去判断排序依据,排序类型是否没有值,如果为null就写一个默认的排序方式。

setCurrentPage(Integer.valueOf(Integer.parseInt(str)));

if(orderBy == null || orderBy.equals("")){

setOrderBy("addTime");

map.put("orderBy","addTime");

}else{

setOrderBy(orderBy);

map.put("orderBy",orderBy);

}

if(orderType == null || orderType.equals("")){

setOrderType("desc');

map.put("orderType","desc");

}else{

setOrderType(orderType);

map.put("orderType",orderType);

}

}

//还有一个很重要的addQuery方法,这个主要是封装了hql语句

public IQueryObject addQuery(String field, SysMap para, String expression){

if(field != null && para != null){

this.queryString = (this.queryString + "and" + field + " " + handleExpression(expression) + ":" + para.getKey().toString());

this.params.put(para.getKey(),para.getValue());

}

return this;

}

}

因为有很多的类,很多的表,所以我需要区分查询的是那张表,我们可以做一个GenericPageList类去区分你要查找的表\

public class GenericPageList  extends PageList{

protected String scope;

protected Class cls;

public GenericPageList(Class cls, String scope,Map paras,IGenericDAO dao){

this.cls = cls;

this.scope = scope;

IQuery query = new GenericQuery(dao);

query.setParaValues(paras);

setQuery(query);

}

public void doList(int currentPage, int pageSize){

String totalSql = "select COUNT(obj) from" + this.cls.getName() + "obj where " + this.scope;

super.doList(pageSize, currentPage ,totalSql, this.scope);

}

}

public class PageList{

public void doList(int pageSize, int pageNo, String totalSQL, String queryHQL){

List rs = null;

this.pages = ((this.rowCount + pageSize - 1) / pageSize);

int intPageNo = pageNo > this.pages ? this.pages : pageNo;

this.query.setFirstResult((intPageNo - 1) * pageSize);

this.query.setMaxResults(pageSize);

rs = this.query.getResult(queryHQL);

this.result = rs;

}

}

这里不能写的太明确了,因为项目不能公开的,很抱歉。就是分页这块需要大家去理解怎么去分页,为什么要分页。这里就请各位自己写分页吧233 因为我的主要目的还是让大家明白项目流程,具体代码自己写出来的比复制粘贴的要好很多,这样才能学到自己的东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值