一、系统管理模块----模块设计
/**
* 不得不说,这个设计思路对自己触动还是比较大的。
* 之前一直都是边学习变写点小代码,虽然尝试着做了一个小博客,但设计比较混乱。
*/
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
代码语言:javascript复制/**
* 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";
}
}
代码语言:javascript复制<!-- 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
代码语言:javascript复制/**
* 这边代码比较少,功能具体实现都是在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
代码语言:javascript复制// 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 {
}
代码语言:javascript复制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();
}
代码语言:javascript复制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
代码语言:javascript复制<%@ 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>