该项目是学习传智的项目视频总结,谢谢!
1. 创建一级分类的表
2. 建包及其相应的类
category.action /service /dao /vo
vo: 创建实体对象Category,两个字段,cid 和cname
映射文件Category.hbm.xml:作用是从数据库取出数据并附给实体对象;
以下为映射文件的约束条件
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
以为为映射文件的映射写法:name对应的是Category类所在的位置,table对应的是数据库内category表;表内id为cid,增加方式为native,对应的属性名为cname;
<hibernate-mapping>
<class name="cn.itcast.shop.category.vo.Category" table="category">
<id name="cid">
<generator class="native"/>
</id>
<property name="cname"/>
</class>
</hibernate-mapping>
注:此处不能用properties,不然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="cn.itcast.shop.category.vo.Category" table="category">
<id name="cid">
<generator class="native"/>
</id>
<property name="cname"/>
</class>
</hibernate-mapping>
创建映射还有最后一步就是在applicationContext.xml上配置Hibernate映射文件,如下
<!-- 配置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>
</list>
</property>
3. 分别在各自的包内创建CategoryAction,CategoryService,CategoryDao类
之后交给Spring管理,即需在applicationContext.xml上配置,如下
<!-- 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>
<!-- 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>
4. 对service ,dao配置
在Dao层注入sessionFactory,则需要CategoryDao继承HibernateDaoSupport
public class CategoryDao extends HibernateDaoSupport{
}
在Service层注入dao,如下,区别目前常见的注解方式注入@AutoWire
public class CategoryService {
//注入CategoryDao
private CategoryDao categoryDao;
public void setCategoryDao(CategoryDao categoryDao) {
this.categoryDao = categoryDao;
}
}
以上配置完毕,则可以编写业务逻辑了
5. 因为在首页看到一级分类的变化,为此需要在IndexAction中注入一级分类的service
遵循MVC分层的概念的书写代码dao--service--action
dao层代码如下
public class CategoryDao extends HibernateDaoSupport{
//查询所有一级各类
public List<Category> findAll(){
String hql ="from Category";
List<Category> list = this.getHibernateTemplate().find(hql);
return list;
}
}
sevcie层代码如下:
public class CategoryService {
//注入CategoryDao
private CategoryDao categoryDao;
public void setCategoryDao(CategoryDao categoryDao) {
this.categoryDao = categoryDao;
}
//查询所有一级分类
public List<Category> findAll(){
List<Category> list = categoryDao.findAll();
return list;
}
}
Action层代码如下
因为一级分类在每个页面都会拥有,为此不需要将数值放入值栈内,可以放置在session内
public class IndexAction extends ActionSupport{
//注入一级分类的Service
private CategoryService categoryService;
public void setCategoryService(CategoryService categoryService) {
this.categoryService = categoryService;
}
/**
* 接收数据需要使用模型 驱动
*/
/**
* 执行的访问首页的方法:
*/
public String execute(){
//查询所有一级分类
List<Category> cList = categoryService.findAll();
//将一级分类存入session范围内
ActionContext.getContext().getSession().put("cList", cList);
return "index";
}
}
因为注入categorySevice,同样的IndexAction需要交给Spring 管理,为此需要修改appllicationContext.xml配置
<!-- 首页访问的Action -->
<bean id="indexAction" class="cn.itcast.shop.index.action.IndexAction" scope="prototype">
<property name="categoryService" ref="categoryService"></property>
</bean>
修改页面index,因为将首页公用部分已经提取出来,为此需要在公共页menu.jsp更改
更改之前
<ul class="mainNav">
<li><a href="./index.htm">首页</a> |</li>
<li><a href="./蔬菜分类.htm">定制套餐</a> |</li>
<li><a>安全频道</a> |</li>
<li><a>商城卡</a> |</li>
<li><a>蔬菜基地</a> |</li>
<li><a>节气养生</a> |</li>
<li><a>便民服务</a> |</li>
</ul>
更改之后
<ul class="mainNav">
<li><a href="${pageContext.request.contextPath}/index.action">首页</a> |</li>
<s:iterator var="c" value="#session.cList">
<li><a href="./蔬菜分类.htm"><s:property value="#c.cname"/> </a> |</li>
</s:iterator>
</ul>
知识点分析:
1.<a href="${pageContext.request.contextPath}/index.action">首页</a>相当于访问了以下链接
http://localhost:8080/shop/index.action
2.<s:iterator var="c" value="#session.cList">
<li><a href="./蔬菜分类.htm"><s:property value="#c.cname"/> </a> |</li>
</s:iterator>
value="#session.cList"为取session的内存储的值方法
<s:iterator>为遍历集合内的值并放在var="c"内,最后取出value="#c.cname"进行前端展示
写得比较笼统,到时候再仔细完善!