2 SSH网上商城--首页热门商品显示

1. 创建商品表:

  因为有二级分类,二级分类和商品表,一级分类相关,为此创建二级分类表和商品表;

CREATE TABLE `categorysecond` (
  `csid` int(11) NOT NULL AUTO_INCREMENT,
  `csname` varchar(255) DEFAULT NULL,
  `cid` int(11) DEFAULT NULL,
  PRIMARY KEY (`csid`),
  KEY `FK936FCAF21DB1FD15` (`cid`),
  CONSTRAINT `FK936FCAF21DB1FD15` FOREIGN KEY (`cid`) REFERENCES `category` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8;

csid:二级分类的主键,cid为一级分类的主键,在二级分类表内为外键,链接两张表;

商品表:

CREATE TABLE `product` (
  `pid` int(11) NOT NULL AUTO_INCREMENT,
  `pname` varchar(255) DEFAULT NULL,
  `market_price` double DEFAULT NULL,
  `shop_price` double DEFAULT NULL,
  `image` varchar(255) DEFAULT NULL,
  `pdesc` varchar(255) DEFAULT NULL,
  `is_hot` int(11) DEFAULT NULL,
  `pdate` datetime DEFAULT NULL,
  `csid` int(11) DEFAULT NULL,
  PRIMARY KEY (`pid`),
  KEY `FKED8DCCEFB9B74E02` (`csid`),
  CONSTRAINT `FKED8DCCEFB9B74E02` FOREIGN KEY (`csid`) REFERENCES `categorysecond` (`csid`)
) ENGINE=InnoDB AUTO_INCREMENT=74 DEFAULT CHARSET=utf8;

2. 创建商品的包和类

cn.itcast.shop.product

* action

* ProductAction

* service

* ProductService

* dao

* ProductDao

* vo

* Product

* Product.hbm.xml

分别建包action,sevice,dao,vo,并在相应的包下建立相应的类;

public class Product {

	private Integer pid;
	private String pname;
	private Double market_price;
	private Double shop_price;
	private String image;
	private String pdesc;
	private Integer is_hot;
	private String pdate;
	//创建的为外键,需要一个对象去处理;

hibernate不能在表格内创建外键,而是需要创建一个对象;

映射文件Product.hbm.xml

<?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="cn.itcast.shop.product.vo.Product" table="product">
		<id name="pid">
			<generator class="native"/>
		</id>
		
		<property name="pname"/>
		<property name="market_price"/>
		<property name="shop_price"/>
		<property name="image"/>
		<property name="pdesc"/>
		<property name="is_hot"/>
		<property name="pdate"/>
	</class>
</hibernate-mapping>

然后需要交给Spring  appicationContect.xml管理映射文件

<!-- 配置Hibernate的映射文件 -->
		<property name="mappingResources">
			<list>
				<value>cn/itcast/shop/user/vo/User.hbm.xml</value>
				<value>cn/itcast/shop/category/vo/Category.hbm.xml</value>
				<value>cn/itcast/shop/product/vo/Product.hbm.xml</value>
			</list>
		</property>

ProductDao需要注入sessionFactory,则需要继承,代码如下

public class ProductDao extends HibernateDaoSupport{
	

}

ProductService注入相应的dao

@Transactional
public class ProductService {
	//注入dao
	private ProductDao productDao;

	public void setProductDao(ProductDao productDao) {
		this.productDao = productDao;
	}
	
}

@Transactional:如果单单是查询不需要增加事务,但是当增加其他操作,如增删改则需要增加事务,为此后期则在service上增加事务;

因为在首页访问的时候显示热门商品,需要将productService注入IndexAction;

public class IndexAction extends ActionSupport{
	//注入一级分类的Service
	private CategoryService categoryService;
   //	注入商品的service
	private ProductService productService;
	
	public void setCategoryService(CategoryService categoryService) {
		this.categoryService = categoryService;
	}
	
	public void setProductService(ProductService productService) {
		this.productService = productService;
	}

然后需要交给Spring  appicationContect.xml管理映射文件

<!-- 首页访问的Action -->
	<bean id="indexAction" class="cn.itcast.shop.index.action.IndexAction" scope="prototype">
		<property name="categoryService" ref="categoryService"></property>
		<property name="productService" ref="productService"></property>
	</bean>



<!-- Service的配置  ===========================-->
	<bean id="userService" class="cn.itcast.shop.user.service.UserService">
		<property name="userDao" ref="userDao"/>
	</bean>
	<bean id="categoryService" class="cn.itcast.shop.category.service.CategoryService">
		<property name="categoryDao" ref="categoryDao"/>
	</bean>
	<bean id="productService" class="cn.itcast.shop.product.service.ProductService">
		<property name="productDao" ref="productDao"/>
	</bean>
	
	
	
	<!-- Dao的配置  ===========================-->
	<bean id="userDao" class="cn.itcast.shop.user.dao.UserDao">
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>
	<bean id="categoryDao" class="cn.itcast.shop.category.dao.CategoryDao">
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>
	<bean id="productDao" class="cn.itcast.shop.product.dao.ProductDao">
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>

4. 

  1. 1.Action-----ProductService------>ProductDao

* 查询热门商品:

* is_hot: 0 :不是热门  1:是热门.

* 查询带有个数:

* 分页查询:

* 将查询到数据保存到值栈中.

疑问:

1. 为什么存入值栈中?

为了将数值传递到页面

2. 使用set方法?

ActionContext.getContext().getValueStack()这个方法是获得值栈。

如果使用put方法则是没有key,使用set则是有key值

引申的问题:

那put  set底层的区别是什么?

另外session为什么可以用put?

 

public class IndexAction extends ActionSupport{
	//注入一级分类的Service
	private CategoryService categoryService;
   //	注入商品的service
	private ProductService productService;
	
	public void setCategoryService(CategoryService categoryService) {
		this.categoryService = categoryService;
	}
	
	public void setProductService(ProductService productService) {
		this.productService = productService;
	}
	
	/**
	 * 接收数据需要使用模型	驱动
	 */


	


	/**
	 * 执行的访问首页的方法:
	 */
	public String execute(){
		//查询所有一级分类
		List<Category> cList = categoryService.findAll();
		//将一级分类存入session范围内
		ActionContext.getContext().getSession().put("cList", cList);
		
		//查询热门商品
		List<Product> hList = productService.findHot();
		//保存在值栈中
		ActionContext.getContext().getValueStack().set("hList", hList);
		return "index";
	}
	
	
}

service

@Transactional
public class ProductService {
	//注入dao
	private ProductDao productDao;

	public void setProductDao(ProductDao productDao) {
		this.productDao = productDao;
	}

	public List<Product> findHot() {
		return productDao.findHot();
	}
	
}

dao

public class ProductDao extends HibernateDaoSupport{

	/**
	 * 查询首页热门商品
	 * @return
	 */
	public List<Product> findHot() {
		//使用离线查询条件
		DetachedCriteria criteria =DetachedCriteria.forClass(Product.class);
		//查询热门商品,条件是is_hot=1
		criteria.add(Restrictions.eq("is_hot", 1));
		//倒序排序输出
		criteria.addOrder(Order.desc("pdate"));
		//执行查询,分页
		List<Product> hlist = this.getHibernateTemplate().findByCriteria(criteria, 0, 10);
		return hlist;
	}
	

}

index.jsp页面

<strong>热门商品</strong>
						<!-- <a  target="_blank"></a> -->
					</div>
					<ul class="tab">
							<li class="current">
								<a href="./蔬菜分类.htm?tagIds=1" target="_blank"></a>
							</li>
							<li>
								<a  target="_blank"></a>
							</li>
							<li>
								<a target="_blank"></a>
							</li>
					</ul>
<!-- 					<div class="hotProductAd">
			<img src="${pageContext.request.contextPath}/image/a.jpg" width="260" height="343" alt="热门商品" title="热门商品">
</div> -->
						<ul class="tabContent" style="display: block;">
						<s:iterator var ="p" value="hList">
									<li>
										<a target="_blank"><img src="${pageContext.request.contextPath}/<s:property value = "#p.image"/>" data-original="http://storage.shopxx.net/demo-image/3.0/201301/0ff130db-0a1b-4b8d-a918-ed9016317009-thumbnail.jpg" style="display: block;"></a>
									</li>
							</s:iterator>		
						

因为数值保存在值栈中,所以value可以直接取hList,写法:value="hList",后赋值为var="p";最后是遍历取值展示;

 

最后效果展示:

 

最后修改的效果是:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值