SSH中baseDao的写法

来源:互联网 发布:博雅软件集团高层 编辑:程序博客网 时间:2024/06/05 02:50

BaseDao接口:抽取常用的方法

package com.oa.base;import java.util.List;public interface BaseDao<T> {/** * 保存实体 * @param entity */void save(T entity);/** * 删除实体 * @param id */void delete(Integer id);/** * 更新实体 * @param entity */void update(T entity);/** * 按id查询 * @param id * @return */T getById(Integer id);/** * 按id查询 * @param ids * @return */List<T> getByIds(Integer...ids);/** * 查询所有 * @return */List<T> findAll();}

BaseDao的实现类BaseDaoImpl:

package com.oa.base;import java.lang.reflect.ParameterizedType;import java.util.List;import javax.annotation.Resource;import org.hibernate.Session;import org.hibernate.SessionFactory;public class BaseDaoImpl<T> implements BaseDao<T> {// 从容器中注入sessionFactory@Resourceprivate SessionFactory sessionFactory;private Class<T> clazz; // 怎样获取T的类型clazz呢? 在构造器中利用反射public BaseDaoImpl() {// 使用反射得到T的真实类型// 获取当前new的对象的泛型父类的类型ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();// 获取第一个类型参数的真实类型this.clazz = (Class<T>) pt.getActualTypeArguments()[0];System.out.println("clazz--->" + clazz);// 第一个this代表BaseDaoImpl的子类,第二个this代表BaseDaoImpl}/** * 获取当前的可用session对象 *  * @return */protected Session getSession() {return sessionFactory.getCurrentSession();}@Overridepublic void save(T entity) {getSession().save(entity);}@Overridepublic void delete(Integer id) {Object obj = getById(id);if (obj != null) {getSession().delete(obj);}}@Overridepublic void update(T entity) {getSession().update(entity);}@Overridepublic T getById(Integer id) {return (T) getSession().get(clazz, id);}@Overridepublic List<T> getByIds(Integer... ids) {return getSession().createQuery( //"FROM " + clazz.getSimpleName() + " WHERE id IN (:ids)") //.setParameterList("ids", ids) // 将(:id)变成集合.list();}@Overridepublic List<T> findAll() {return getSession().createQuery( //"FROM " + clazz.getSimpleName()) //.list();}}

UML类图:User和Role为2个实体类,在BaseDao中写所有Dao的共有方法,在BaseDaoImpl中实现BaseDao接口的方法,子类需要继承BaseDaoImpl即可。

                   在XXXDao中定义XXX所需要的特有方法。



0 0
原创粉丝点击