1.回顾
学习心态
项目需求(界面原型法获取需求,UML用例图描述需求)
系统功能模块结构图(分工,报价)
系统架构(s2sh,ssh2)+Mysql+Maven
maven,本次项目主要是导jar
框架搭建(Hibernate+Spring, Spring+struts2)
1.导入jar包
2.PO 类及映射文件
3.hibernate配置文件
4.applicationContext.xml文件
5.struts.xml配置文件
6.web.xml配置文件
数据库设计与建模
使用PD实现数据库建模
概念模型
数据建模 Physical Data Model
用户-角色-模块
购销合同-货物-附件
报运单-商品明细-商品附件
报运单-home装箱单/装箱单
装箱单-委托单-发票-财务报运单
厂家-产品-系统代码(数据字典)
其他-意见反馈-action访问日记-投票记录
深入分析系统框架
为什么访问index.jsp就可以显示主页
index.jsp->login.action->success->/WEB-INF/pages/home/fmain.jsp->frameset(top_frame,leftFrame,main)
主页面加载的分析过程
top_frame->homeAction_title->title->/WEB-INF/pages/home/title.jsp
leftFrame->homeAction_toleft.action?moduleName=home->toleft->/WEB-INF/pages/${moduleName}/left.jsp
main->homeAction_tomain.action?moduleName=home->tomain->/WEB-INF/pages/${moduleName}/main.jsp
为什么顶部菜单点击后,左侧和中间区域页面发生改变?
为什么点击左侧菜单显示结果在中间区域?
实现部门管理
思路:Action----------Service---------------Dao----------------Domain(PO类映射文件)
调用过程与编码过程正好相反
BaseDao分析
BaseDao是本次项目中的一个通用DAO,它可以操作任何一张表的CRUD及分页查询。可以作用于任何一张表。
它的实现原理:
1.泛型
2.反射
applicationContext-dao.xml
<!-- BaseDao -->
<bean id="baseDao" class="cn.itcast.jk.dao.impl.BaseDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- jdbcTemplate模板的配置 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- sqlDao的配置 -->
<bean id="sqlDao" class="cn.itcast.jk.dao.common.SqlDao">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
sqlDao.java <—jdbcTemplate
/**
* @Description:
* @Author: 传智播客 java学院 传智.宋江
* @Company: http://java.itcast.cn
* @CreateDate: 2014年10月31日
*/
/*
* 执行sql语句类
* 调用方法:
* 引入配置问题
*
*/
public class SqlDao {
private static Logger log = Logger.getLogger(SqlDao.class);
private UtilFuns utilFuns = new UtilFuns();
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public List executeSQL(String sql, Object[] objs){
log.debug(sql);
List aList = new ArrayList();
List jlist = null;
if(utilFuns.arrayValid(objs)){
jlist = jdbcTemplate.queryForList(sql, objs);
} else {
jlist = jdbcTemplate.queryForList(sql);
}
Iterator ite = jlist.iterator();
while(ite.hasNext()){
Map map = (Map)ite.next();
for(Object o:map.keySet()){
aList.add((String)map.get(o));
}
}
return aList;
}
BaseDao.java
public interface BaseDao {
//查询所有,带条件查询
public <T> List<T> find(String hql, Class<T> entityClass, Object[] params);
//获取一条记录
public <T> T get(Class<T> entityClass, Serializable id);
//分页查询,将数据封装到一个page分页工具类对象
public <T> Page<T> findPage(String hql, Page<T> page, Class<T> entityClass, Object[] params);
//新增和修改保存
public <T> void saveOrUpdate(T entity);
//批量新增和修改保存
public <T> void saveOrUpdateAll(Collection<T> entitys);
//单条删除,按id
public <T> void deleteById(Class<T> entityClass, Serializable id);
//批量删除
public <T> void delete(Class<T> entityClass, Serializable[] ids);
}
BaseDaoImpl.java
public class BaseDaoImpl implements BaseDao{
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public Session getSession() {
return sessionFactory.getCurrentSession();
}
//带条件查询
public <T> List<T> find(String hql, Class<T> entityClass, Object[] params) {
Query query = this.getSession().createQuery(hql);
if(params!=null){
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
}
return (List<T>) query.list();
}
//获取一条,根据主键id
public <T> T get(Class<T> entityClass, Serializable id) {
return (T) this.getSession().get(entityClass, id);
}
//新增和修改,hibernate根据id是否为null自动判断
public <T> void saveOrUpdate(T entity) {
this.getSession().saveOrUpdate(entity);
}
//按主键id删除
public <T> void deleteById(Class<T> entityClass, Serializable id) {
this.getSession().delete(get(entityClass, id));
}