传智播客OA项目学习--阶段二(系统管理模块)

时间:2022-07-22
本文章向大家介绍传智播客OA项目学习--阶段二(系统管理模块),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、系统管理模块----模块设计

/**

* 不得不说,这个设计思路对自己触动还是比较大的。

* 之前一直都是边学习变写点小代码,虽然尝试着做了一个小博客,但设计比较混乱。

*/

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>