实战3--设计管理模块,整合!!!

1. 所有dao和daoimpl模块都不用, 加上 @Deprecated

2. 建立DaoSupport类和DaoSupportImpl类

DaoSupport.java

package cn.itcast.oa.base;
import java.util.List;
public interface DaoSupport<T> {
	void save(T entity);
	void delete(Long id);
	void update(T entity);
	T getById(Long id);
	List<T> getByIds(Long[] ids);
	List<T> findAll();
}

 DaoSupportImpl.java

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 DaoSupportImpl<T> implements DaoSupport<T> {

	@Resource
	private SessionFactory sessionFactory;
	private Class<T> clazz = null;

	public DaoSupportImpl(){
		//使用反射技术得到T的真实类型
		ParameterizedType pt = (ParameterizedType)this.getClass().getGenericSuperclass();//获取当前new的对象的泛型的父类类型
		this.clazz = (Class<T>)pt.getActualTypeArguments()[0];
		System.out.println("clazz===>"+clazz.getName());
		System.out.println("clazz===>"+clazz.getSimpleName());
	}
	protected Session getSession() {
		return sessionFactory.getCurrentSession();
	}
	public void save(T entity) {
		getSession().save(entity);
	}
	public void update(T entity) {
		getSession().update(entity);
	}
	public void delete(Long id) {
		Object obj = getById(id);
		if (obj != null) {
			getSession().delete(obj);
		}
	}
	public T getById(Long id) {
		if(id == null)
			return null;
		else
			return (T) getSession().get(clazz, id);
	}

	public List<T> getByIds(Long[] ids) {
		return getSession().createQuery(//
				"FROM " + clazz.getSimpleName()+"WHERE id IN(:ids)")//
				.setParameterList("ids",ids).
				list();
	}

	public List<T> findAll() {
		return getSession().createQuery(//
				"FROM " + clazz.getSimpleName()).//
				list();
	}

}

 3. 抽取BaseAction, 这样每个action都可以专注写自己的方法

package cn.itcast.oa.base;

import java.lang.reflect.ParameterizedType;

import javax.annotation.Resource;

import cn.itcast.oa.service.DepartmentService;
import cn.itcast.oa.service.RoleService;
import cn.itcast.oa.service.UserService;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public abstract class BaseAction<T> extends ActionSupport implements ModelDriven<T>{

	protected T model ;
	public BaseAction(){

		try {
			//通过反射活的model的真实类型
			ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
			Class<T> clazz = (Class<T>)pt.getActualTypeArguments()[0];
			//通过反射创建model的实例
			model = clazz.newInstance();
		} catch (Exception e) {
			 throw new RuntimeException();
		}
	}
	public T getModel() {
		return model;
	}

	//******************service实例的声明******************
	@Resource
	protected RoleService roleService;
	@Resource
	protected DepartmentService departmentService;
	@Resource
	protected UserService userService;
}

整合完毕!!!

增加新模块的步骤: 

一. 创建Action的准备

1. 写新的action, UserAction.java,

1) extends BaseAction

2) @Controller  @Scope("prototype")

2. 定义出Action的方法, 写出方法名, 作用, 返回值

/** 列表 */
	public String list() throws Exception {
		return "list";
	}

	/** 删除 */
	public String delete() throws Exception {
		return "toList";
	}

	/** 添加页面 */
	public String addUI() throws Exception {
		return "saveUI";
	}

	/** 添加 */
	public String add() throws Exception {
		return "toList";
	}

	/** 修改页面 */
	public String editUI() throws Exception {
		return "saveUI";
	}

	/** 修改 */
	public String edit() throws Exception {
		return "toList";
	}
        /** 初始化密码1234 **/
	public String initPassword() throws Exception {
		return "toList";
	}

3. 创建所用到的jsp页面(list.jsp, saveUI.jsp)

4. struts.xml配置

<!-- 用户管理 -->
<action name="user_*" class="userAction" method="{1}">
	<result name="list">/WEB-INF/jsp/userAction/list.jsp</result>
	<result name="saveUI">/WEB-INF/jsp/userAction/saveUI.jsp</result>
	<result name="toList" type="redirectAction">user_list?parentId=${parentId}</result>
</action>

  

二. 准备service

1. 创建接口UserService.java,    extends DaoSupport<User>

package cn.itcast.oa.service;
import cn.itcast.oa.base.DaoSupport;
import cn.itcast.oa.domain.User;
public interface UserService  extends DaoSupport<User>{
}

2. 创建实现类 UserServiceImpl.java  ,  extends DaoSupportImpl<User> implements UserService

3. 配置: 在UserServiceImpl上写注解 @Service  @Transactional

package cn.itcast.oa.service.impl;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.itcast.oa.base.DaoSupportImpl;
import cn.itcast.oa.domain.User;
import cn.itcast.oa.service.UserService;

@Service
@Transactional
public class UserServiceImpl extends DaoSupportImpl<User> implements UserService{

}

4. BaseAction里写service的声明

package cn.itcast.oa.base;
import java.lang.reflect.ParameterizedType;
import javax.annotation.Resource;
import cn.itcast.oa.service.DepartmentService;
import cn.itcast.oa.service.RoleService;
import cn.itcast.oa.service.UserService;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public abstract class BaseAction<T> extends ActionSupport implements ModelDriven<T>{
	protected T model ;
	public BaseAction(){
		try {
			//通过反射活的model的真实类型
			ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
			Class<T> clazz = (Class<T>)pt.getActualTypeArguments()[0];
			//通过反射创建model的实例
			model = clazz.newInstance();
		} catch (Exception e) {
			 throw new RuntimeException();
		}
	}
	public T getModel() {
		return model;
	}

	//******************service实例的声明******************
	@Resource
	protected RoleService roleService;
	@Resource
	protected DepartmentService departmentService;
	@Resource
	protected UserService userService;
}

  

  

  

时间: 2025-01-13 21:20:31

实战3--设计管理模块,整合!!!的相关文章

ASP.NET典型三层架构企业级医药行业ERP系统实战(8大模块22个子系统,价值3000万)

课程讲师:Tiger     课程分类:.net         适合人群:高级       课时数量:192课时       更新程度:完毕 我这里有一套课程和大家分享,我的qq是2059055336,有兴趣的朋友可以和我聊天. 课程说明:国内首部完整讲述ERP系统架构.业务逻辑.开发的项目实战课程.考虑到本系统的庞大及复杂性.本课程原价购买学员每人赠送一个U盾设备,U盾可插在任意电脑上进行学习,使用方便,学习灵活!可永久学习! 项目由来:此项目是讲师亲自参与构架及参与开发的大型ERP项目,此

HDMI模块整合

上上个星期花几天写在各种情况,如何考虑代码.一次远程会议,把我所想的SPC1.3都给简单化,今天重新整合发现之前写的都没有怎么用到....茫茫然然一个上午就过去,下午重新整合好.心情一趟舒畅!明天再写TB,用NC跑一下,希望这个星期顺利完成整合.. 基于***语言的数模混合验证.这个题目资料还没有找好....come on guys!

SEO实战:用户数据整合帮你快进排名

网站SEO技巧讲过很多,同时很多朋友也有留言说明,大篇的理论,没任何实际效用,对网站排名没有任何帮助.于此,笔者小丹也感到即便理论知识在详尽,没有经过实战的技巧只是废谈.如此,本篇文章小丹将以实例开述总结用户数据带给网站优化的优势. 所谓用户数据第一点我们要知道的就是,网站的服务群体是谁. http://www.jiaoyou8.com/friends_diary/maoyisheng/0_0_0/view_0011481557_no_0_0.2014-12-11.html http://www

iOS开发之Socket通信实战--Request请求模块

实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncSocket来进行长连接连接和传输数据,该第三方地址:https://github.com/robbiehanson/CocoaAsyncSocket,读者可以自行google或者baidu搜索这个库的用法,网上有很多资料,而且用法不难. 在一些对Socket通信使用需求不是很高的应用中,比如需要多个i

2017.7.1 慕课网-Java从零打造企业级电商项目实战:用户模块设计与开发

2. 用户模块设计与开发 2.1 要实现的功能 2.2 mmall_user表 2.3 用户模块接口设计 (1)门户-用户接口 http://git.oschina.net/imooccode/happymmallwiki/wikis/%E9%97%A8%E6%88%B7_%E7%94%A8%E6%88%B7%E6%8E%A5%E5%8F%A3 (2)后台-用户接口 http://git.oschina.net/imooccode/happymmallwiki/wikis/%E5%90%8E%E

【Spring实战-3】Spring整合Hibernate、Struts

作者:ssslinppp      1. 摘要 版本: Spring4.0.4:Hibernate4.3.5:struts2.3.16: 主要介绍了如下内容: 项目结构的规划: Spring下整合Hibernate的具体过程: 整合struts的过程: 重点介绍Dao层的设计: 2. 项目结构 lib文件: 3. web.xml 因为需要整合struts和Hibernate,所以需要配置spring监听器.以及struts分发器. <?xml version="1.0" enco

nginx实战(二) WebDAV 模块 http_dav_module

前言 WebDAV (Web-based Distributed Authoring and Versioning) 一种基于 HTTP 1.1协议的通信协议.它扩展了HTTP 1.1,在GET.POST.HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可直接对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制.nginx 编译时通过加入"–with-http_dav_module"可以启用对WebDav协议

(Maven+SSM)实战之spring mybatis整合

1.配置POM.xml文件 ,配置项目所需jar包 2.配置WEB.xml:      配置spring监听器      <context-param>         <param-name>contextConfigLocation</param-name>         <param-value>classpath:application-context.xml</param-value>     </context-param&g

Python实战之SocketServer模块

文章出处:http://www.cnblogs.com/wupeiqi/articles/5040823.html SocketServer内部使用 IO多路复用 以及 "多线程" 和 "多进程" ,从而实现并发处理多个客户端请求的Socket服务端.即:每个客户端请求连接到服务器时,Socket服务端都会在服务器是创建一个"线程"或者"进程" 专门负责处理当前客户端的所有请求. ThreadingTCPServer Thre