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

Posted wujixing909

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实战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;
}

  

  

  

以上是关于实战3--设计管理模块,整合!!!的主要内容,如果未能解决你的问题,请参考以下文章

实战3--设计管理模块, 第4步, 新增模块, 部门管理

实战3--设计管理模块, 实现功能

网上书店管理系统项目Java数据库编程实战

《Android源代码设计模式解析与实战》读书笔记

重磅回归-SSM整合进阶项目实战之个人博客系统

NLP 实战 | 整体设计之数据集/模型管理