这2天一直在讲itcastbbs,下面是我通过课堂整理的笔记。这是汤老师带就业班的第一个项目——itcastbbs,下面是课堂上对项目的架构、主要实现及实现过程中的常见问题做的总结。
按用户:匿名用户,普通用户,斑竹,管理员;
功能分析:
匿名用户:
主页:分类与版面;两级的分类与多级分类;
最新推荐;
页眉页脚(统一);
1.开发步骤:
(1). 环境的搭配
Struts1.2(jar,xml);
cn.itcast.bbs.web.struts
jstl1.1;
Hibernate3(jar,xml);
以下是搭建截图:
移除src文件夹,重新创建新的
以下是:strus1.2配置
Hibernate配置:
粘贴到项目文件夹 里的 WEB-INF 的 lib文件夹中
(2). 源码分类
src/java ---- java 源码
src/config.files ---- 配置文件
test/java ---- 测试案例
(3). 文档
doc
2. 版面管理模块
新建分类 Categrory.java
配合UML图 边写代码 养成好习惯。。
包结构为cn.itcast.bbs.*。见下图:
实体类:
版面与分类:增删改查 DispatchAction
(1) 实体设计:
2个实体(版面与分类),1个实体(2个实体合1,增加字段区分)都可以
-- Category,Forum;
--关系:1:n
-- 属性
--映射文件;
(2) DAO
-- 层与层之间调用使用接口;
-- CategoryDAO, ForumDAO
-- CategoryDAO的方法:
save, delete, update, get, find/find
--ForumDAO也有这样的接口方法;-- 增加父接口GenericDao
--增加父接口GenericDao<T>:参数类型Object,还可以使用泛型;
--原有的接口extends GenericDAO
-- 编码:
GenericDAO - cn.itcast.bbs.dao.base
Category - cn.itcast.bbs.dao
Forum - cn.itcast.bbs.dao
-- DAO的实现cn.itcast.bbs.dao.impl
ForumDAOImpl
CategoryDAOImpl
==sessionFactory 暂时每个dao管理自己的
== 未完成的操作:UnsupportedOperationException
--使用JUnit4测试每个DAOImpl方法
测试Forum实体时遇到一个问题:无论单向还是双向关联Category,如果想保存forum对象,ForumDAOImpl.save的方法都出错;
因为无法知道如何调用save(Category)的方法,只好手工new一个CategoryDAOImpl来显式保存;
--通过写ForumDAOImpl, CategoryDAOImpl 这2个实现类,发现代码重复比较多;---- 解决方法:
再做一个GenericDAOImplimplements GenericDAO;ForumDAOImpl和CategoryDAOImpl extendsGenericDAOImpl implements XXXDAOImpl;
GenericDAOImpl中使用泛型:
a.GenericDAOImpl<T> implementsGenericDAO<T>;
b.protected Class<T> clazz;子类Construtor(无参数)--这个参数必须要,在父类中一个有参数的,这样子类必须有,否则容易忘记;
c.HQL : from clazz.getName();
对于Session:GenericDAOImpl 单独使用getSession来获取;(保证所有的session)
===配置 <propertyname="current_session_context_class">thread</property>
===util.HibernateSessionFactory
===HibernateSessionFactory.getSession();
--单元测试;
@Before-- 任何方法执行之前执行;
@After -- 任何方法执行之后执行;
上面两个注解减少了代码
(3) 版面有关的功能分析:
--版面有关功能分析;
list- addUI - add
list- editUI - edit
list- delete
list- changeOrder(up or down)
3个jsp页面
-- Action分析
==CategoryActionextends DispatchAction
==== unspecified 方法 :default; 默认抛出异常;重写; <actionparamter="method"..>
==== (unspecified),(addUI, add), (editUI, edit), (delete),(changeOrder);
==== 3个jsp页面: list.jsp, add.jsp, edit.jsp
--业务方法分析
==CategoryService
==== findAll() upspecified - 根据实际情况不分页了
==== addCategory(Category) add
==== getCategory(id) editUI
==== updateCategory(Category) edit
==== delCategory(id) delete
==== changeOrder(id, isUp) changeOrder
-- 编码
==CategoryAction extends DispatchAction