SSH-Day03客户关系管理系统

课程内容:

  1. 修改Customer
  2. BaseDao的抽取
  3. BaseAction的抽取
  4. 联系人模块Linkman

修改Customer

问题一

在进入customer/edit.jsp页面的时候,怎么把customer对象传递到页面?方法一:valueStack.put(key,value)/valueStack.push(obj)。方法二:action类都有方法getModel(),struts2会把model存放到context栈中,我们可以通过${model.cust_name}
取出来。


问题二

form 表单中select 请选择
一定要加 value="",如果没有value,浏览器会默认设置value=“option显示的值”


反射获取泛型

怎么获取类上的泛型?

通过反射的方式获得

public class Person {

}
public class Student extends Person {

}
public class User {
}
Student st = new Student();
//获取父类
Class superclass = st.getClass().getSuperclass();
System.out.println(superclass);
//获取带有泛型的父类
Type genericSuperclass = st.getClass().getGenericSuperclass();
//判断父类是否是ParameterizedType
if(genericSuperclass instanceof ParameterizedType) {
	ParameterizedType type=(ParameterizedType) genericSuperclass;
	//取第一个值
	Class c=(Class) type.getActualTypeArguments()[0];
	System.out.println(c);
	//c就是User
}

BaseDao的抽取

把通用的方法抽取到接口中

public interface BaseDao {

	void add(T t);

	T findById(Long cust_id);

	void update(T t);
	
	void delete(T t);
	
	List findAll();
	
	PageBean findByPage(Integer pageCode, Integer pageSize, DetachedCriteria criteria);
}

BaseDaoImpl.java

public class BaseDaoImpl extends HibernateDaoSupport implements BaseDao {

	public Class clazz;
	public BaseDaoImpl() {
		Class c = this.getClass();
		Type superclass = c.getGenericSuperclass();
		if(superclass instanceof ParameterizedType) {
			ParameterizedType parameterizedType=(ParameterizedType) superclass;
			Type[] type = parameterizedType.getActualTypeArguments();
			clazz=(Class) type[0];
		}
	}
	
	@Override
	public void add(T t) {
		getHibernateTemplate().save(t);
	}

	@Override
	public T findById(Long id) {
		T t=(T) getHibernateTemplate().get(clazz, id);
		return t;
	}

	@Override
	public void update(T t) {
		getHibernateTemplate().update(t);
	}

	@Override
	public void delete(T t) {
		getHibernateTemplate().delete(t);
	}

	@Override
	public List findAll() {
		List list = (List) getHibernateTemplate().find("from "+clazz.getSimpleName());
		return list;
	}

	@Override
	public PageBean findByPage(Integer pageCode, Integer pageSize, DetachedCriteria criteria) {
		PageBean page = new PageBean<>();
		page.setPageCode(pageCode);
		page.setPageSize(pageSize);
		
		criteria.setProjection(Projections.rowCount());
		List customerList = (List) getHibernateTemplate().findByCriteria(criteria);
		if(customerList!=null && customerList.size()>0) {
			page.setTotalCount(customerList.get(0).intValue());
		}
		criteria.setProjection(null);
		
		List list = (List) getHibernateTemplate().findByCriteria(criteria, (pageCode-1)*pageSize, pageSize);
		page.setBeanList(list);
		return page;
	}

}

BaseAction

把通用的方法、变量抽取到父类中

public class BaseAction extends ActionSupport {

	// 设置默认值 当前页码
	private Integer pageCode = 1;// get()是才有效

	public void setPageCode(Integer pageCode) {
		if (pageCode == null) {
			pageCode = 1;
		}
		this.pageCode = pageCode;
	}

	public Integer getPageCode() {
		return pageCode;
	}

	// 一页显示多少条数据
	private Integer pageSize = 2;

	public void setPageSize(Integer pageSize) {
		this.pageSize = pageSize;
	}
	
	public Integer getPageSize() {
		return pageSize;
	}

	public void setVS(String key,Object obj) {
		ActionContext.getContext().getValueStack().set(key, obj);
	}
	
	public void push(Object obj) {
		ActionContext.getContext().getValueStack().push(obj);
	}
}

序列化问题

Customer>Linkman是一对多的关系
Customer.java:

public class Customer {
	private Set linkmans = new HashSet();
}

customer.hbm.xml:



	
	

Linkman

public class Linkman {
	// 编写一个对象,不要自己new
	private Customer customer;
}

linkman.hbm.xml


这样在修改customer会报错:
在这里插入图片描述解决方法:

public class Customer {
	@JSONField(serialize=false)
	private Set linkmans = new HashSet();
}

你可能感兴趣的:(SSH)