SSH开发中公共接口和实现类
2014-04-29 15:55
211 查看
1、dao层公共接口与实现
2、action层
package com.ytmr.dao.base; import java.io.Serializable; import java.util.Collection; public interface CommonDao<T> { //根据id删除一个对象 public void deleteEntry(Serializable id); //添加一个对象 public void saveEntry(T t); //更新一个对象 public void updateEntry(T t); //保存或更新一个对象 public void saveOrUpdate(T t); //根据id查询出持久化类中的某一对象 public T getEntryById(Serializable id); //查询所有数据 public Collection<T> findAllEntry(); //根据多个id查询出一个集合对象 public Collection<T> findAllEntryByIds(Serializable[] ids); }
package com.ytmr.dao.base.impl; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.Collection; import java.util.HashSet; import java.util.List; import javax.annotation.Resource; import org.hibernate.metadata.ClassMetadata; import org.springframework.orm.hibernate3.HibernateTemplate; import com.ytmr.dao.base.CommonDao; public class CommonDaoImpl<T> implements CommonDao<T> { @SuppressWarnings("rawtypes") private Class clazz; @SuppressWarnings("rawtypes") public CommonDaoImpl() { /** * 1、得到泛型 * (1)this:谁调用了该构造函数this就代表谁 * (2)假如UserDaoImpl extends CommonDaoImpl<User> * (3)UserDaoImpl将会交给 spring来创建对象,但spring没有办法给泛型创建对象, * 所以不能再UserDaoImpl创建对象 时传递参数,所以只能通过第二步的方式把参数 * 传递进去。 * (4)this代表CommonDaoImpl的子类 * (5)getGenericSuperclass得到的是this的父类CommonDaoImpl * (6)this.getClass().getGenericSuperclass()得到的是class */ ParameterizedType type = (ParameterizedType) this.getClass() .getGenericSuperclass(); /** * 2、返回表示此类型实际参数类型的Type对象数组,getActualTypeArguments * 获得实际参数类型 */ Type[] param = type.getActualTypeArguments(); /** * 3、得到T的Class形式 */ this.clazz = (Class) param[0]; } //有spring的配置文件將其引入到spring的容器中 public HibernateTemplate hibernateTemplate;// 需要导入spring的jar包 public HibernateTemplate getHibernateTemplate() { return hibernateTemplate; } public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } // 根据id删除一个对象 @SuppressWarnings("unchecked") @Override public void deleteEntry(Serializable id) { T t = (T) this.getHibernateTemplate().get(this.clazz, id); this.getHibernateTemplate().delete(t); } // 保存一个对象 @Override public void saveEntry(T t) { this.getHibernateTemplate().save(t); } // 更新一个对象 @Override public void updateEntry(T t) { this.getHibernateTemplate().update(t); } // 保存或更新一个对象 @Override public void saveOrUpdate(T t) { this.getHibernateTemplate().saveOrUpdate(t); } // 根据id得到某一个对象 @SuppressWarnings("unchecked") @Override public T getEntryById(Serializable id) { return (T) this.getHibernateTemplate().get(this.clazz, id); } // 查询所有的对象 @SuppressWarnings("unchecked") @Override public Collection<T> findAllEntry() { return this.getHibernateTemplate().find("from" + this.clazz.getName()); } // 根据多个id查询出一个集合对象 @SuppressWarnings("unchecked") @Override public Collection<T> findAllEntryByIds(Serializable[] ids) { //调用下面的方法,將数组转化成字符串 String condition = ArrayToString(ids); //ClassMetadata持久化类的原数组,需要导入hibernate的jar包 ClassMetadata metadata = this.getHibernateTemplate() .getSessionFactory().getClassMetadata(this.clazz); //getIdentifierPropertyName 标示符的名称,getEntityName持久化类的名称,getPropertyNames一般属性名字 List<T> list = this.getHibernateTemplate().find( "from " + this.clazz.getName() + " where " + metadata.getIdentifierPropertyName() + " in(" + condition + ")"); //将list集合转换成set集合返回 return new HashSet<T>(list); } //將数组转化成字符串 private String ArrayToString(Serializable[] ids) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < ids.length; i++) { //目的去除最后一个字符是逗号 if (i == ids.length - 1) { sb.append(i); } else { sb.append(i).append(","); } } return sb.toString(); } }
2、action层
package com.ytmr.web.action.base; import java.lang.reflect.ParameterizedType; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; @SuppressWarnings("serial") public class BaseAction<T> extends ActionSupport implements ModelDriven<T> { private T t; @SuppressWarnings("rawtypes") private Class clazz; @SuppressWarnings({ "unchecked", "rawtypes" }) public BaseAction() { // 得到泛型 ParameterizedType type = (ParameterizedType) this.getClass() .getGenericSuperclass(); // 得到参数类型 this.clazz = (Class) type.getActualTypeArguments()[0]; // 给实参具体类型创建对象 try { this.t = (T) this.clazz.newInstance(); } catch (Exception e) { e.printStackTrace(); } } @Override public T getModel() { return t; } }
相关文章推荐
- 微信公共平台接口开发--Java实现
- 开发实现本地接口的无状态的会话bean
- 微信公共服务平台开发(.Net 的实现)3-------发送文本消息
- ( 六 )Seafile FUSE 虚拟文件系统开发---写接口实现思路
- SSH物流开发系统设计:业务受理逻辑实现
- 微信公共服务平台开发(.Net 的实现)1-------认证“成为开发者”
- 微信公共服务平台开发(.Net 的实现)10-------地理位置
- 微信公共服务平台开发(.Net 的实现)6-------自定义菜单
- 微信公共服务平台开发(.Net的实现)1 认证“成为开发者”
- SSH中公共Dao层、Dao接口
- 微信公共号开发教程java版——实现自定义菜单(六)
- C#找出接口的所有实现类并遍历执行这些类的公共方法
- 微信硬件蓝牙jsapi开发之onWXDeviceStateChange接口实现(12)--监听蓝牙状态变化接口
- 用友nc65开发中在删除时报错:实体[xxx]没有实现制定的业务接口:nc.itf.uap.pf.metadata.IHeadBodyQueryItf或者是nc.uap.pf.metadata.Hea
- Hibernate开发底层公共接口
- php微信开发 接口配置信息 如何代码实现,代码实现,入口文件 token 配置失败
- 【springmvc】springmvc实现接口的开发
- 微信公共服务平台开发(.Net 的实现)10-------地理位置
- 【第十一章】 SSH集成开发积分商城 之 11.3 实现积分商城层 ——跟我学spring3
- Flask-RESTful接口开发学习笔记一:实现简单的GET请求