一、系统管理模块----模块设计
/**
* 不得不说,这个设计思路对自己触动还是比较大的。
* 之前一直都是边学习变写点小代码,虽然尝试着做了一个小博客,但设计比较混乱。
*/
1、设计实体类/表
设计实体--》JavaBean--》hbm.xml--》建表
2、分析有几个功能,对应有几个请求
分析增删改查功能
岗位管理--》列表--》(添加、修改、删除)
----》添加、修改、删除之后,重定向到列表。
----》列表、删除功能只有一个请求
----》添加与修改功能有两个请求
增删改查四个功能、共有六个请求--》需要六个Action方法,每个方法处理一种请求
作用 方法名 返回值 对应返回页面
------------------------------------------------------
列表 list( ) list list.jsp
删除 delete( ) toList list.jsp
添加页面 addUI( ) addUI addUI.jsp
添加 add( ) toList list.jsp
修改页面 editUI( ) editUI editUI.jsp
修改 edit( ) toList list.jsp
3、实现功能(比较不错的顺序)
①写Action
/** * RoleAction 部分代码 */ @Controller // 作为控制,注入Spring容器 @Scope("prototype") //设置Action为多例模式 public class RoleAction extends ActionSupport { public String list() throws Exception { return "list"; } public String addUI() throws Exception { return "addUI"; } public String add() throws Exception { return "toList"; } public String delete() throws Exception { return "toList"; } public String editUI() throws Exception { return "editUI"; } public String edit() throws Exception { return "toList"; } }
<!-- struts2配置 --> <!-- 岗位管理 --> <action name="role_*" class="roleAction" method="{1}"> <result name="list">/WEB-INF/jsp/roleAction/list.jsp</result> <result name="toList" type="redirectAction">role_list</result> <result name="addUI">/WEB-INF/jsp/roleAction/addUI.jsp</result> <result name="editUI">/WEB-INF/jsp/roleAction/editUI.jsp</result> </action>
②写Service
/** * 这边代码比较少,功能具体实现都是在Dao层 */ @Service //表示Service层,注入Spring @Transactional //开事务,只操作即可。具体的打开关闭由Spring管理 public class RoleServiceImpl implements RoleService { @Resource //从Spring容器中获取RoleDao实例 private RoleDao roleDao; @Override public List<Role> findAll() { return roleDao.findAll(); } @Override public void delete(Long id) { roleDao.delete(id); }
③写Dao
// RoleDao 接口 package cn.itcast.oa.dao; import cn.itcast.oa.base.BaseDao; import cn.itcast.oa.domain.Role; public interface RoleDao extends BaseDao<Role> { } // RoleDao 接口的实现 package cn.itcast.oa.dao.impl; import org.springframework.stereotype.Repository; import cn.itcast.oa.base.BaseDaoImpl; import cn.itcast.oa.dao.RoleDao; import cn.itcast.oa.domain.Role; @Repository // 表示Dao层,注入Spring public class RoleDaoImpl extends BaseDaoImpl<Role> implements RoleDao { }
package cn.itcast.oa.base; import java.util.List; /** * 实体通用接口 * @author lpe234 * * @param <T> */ public interface BaseDao<T> { /** * 增加实体 * @param entity */ void add(T entity); /** * 删除实体 * @param id */ void delete(Long id); /** * 更新实体 * @param entity */ void update(T entity); /** * 按id查询 * @param id * @return */ T getById(Long id); /** * 按id数组查询 * @param ids * @return */ List<T> getByIds(Long[] ids); /** * 查询所有 * @param entity * @return */ List<T> findAll(); }
package cn.itcast.oa.base; import java.lang.reflect.ParameterizedType; import java.util.List; import javax.annotation.Resource; import org.hibernate.Session; import org.hibernate.SessionFactory; @SuppressWarnings("unchecked") public class BaseDaoImpl<T> implements BaseDao<T> { /** * 已将子类放入容器,父类中可以注入 */ @Resource private SessionFactory sessionFactory; private Class<T> clazz; public BaseDaoImpl() { // 子类创建会调用父类构造方法。 // ParameterizedType 表示参数化类型 ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass(); // 返回表示此类型实际类型参数的 Type 对象的数组。 this.clazz = (Class<T>) pt.getActualTypeArguments()[0]; System.out.println("------------>" + clazz); } /** * 父类中,提供获取Session方法,protected方便用户调用 * * @return */ protected Session getSession() { return sessionFactory.getCurrentSession(); } @Override public void add(T entity) { getSession().save(entity); } @Override public void delete(Long id) { // 根据ID进行删除操作,先获取Object,然后Session。delete(Object) Object obj = getById(id); if (obj != null) { getSession().delete(obj); } } @Override public void update(T entity) { getSession().update(entity); } @Override public T getById(Long id) { return (T) getSession().get(clazz, id); } @Override public List<T> getByIds(Long[] ids) { return getSession().createQuery("FROM " + clazz.getSimpleName() + " WHERE id IN(:ids)")// .setParameterList("ids", ids)// .list();// } @Override public List<T> findAll() { return getSession().createQuery("FROM " + clazz.getSimpleName()).list(); } }
④写JSP
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <s:iterator value="#roleList"> <s:property value="id"></s:property> <s:property value="name"></s:property> <s:property value="description"></s:property> <s:a action="role_delete?role.id=%{id}" onclick="return confirm('确定要删除吗?')">删除</s:a><br> </s:iterator> </body> </html>