基于hibernate的BaseDao及其实现类的设计
来源:互联网 发布:java select 为空 编辑:程序博客网 时间:2024/06/03 19:04
以前做设计的时候dao接口和它的实现了,这样子就不必写这么多的重复代码了。但由于对反射没有了解,除非依赖hibernate的其他组件,否则写不出来。不过,有了反射,我们可以通过泛型来实现我们想要做的功能了。
然后是实现类:
通用接口完成,我们使用的时候,只要继承BaseDaoImp就可以实现最基本的增删改查了。
实现类:
首先是接口:
package com.sms.dao.base;import java.util.List;public interface BaseDao<T> {public void add(T entity) throws Exception;public void delete(T entity) throws Exception;public void update(T entity) throws Exception;public T findById(Integer id) throws Exception;/* * 得到从startIndex开始大小为pageSize的列表 */public List<T> getPageList(int startIndex , int pageSize) throws Exception;/* * 得到总数 */public long getAmount();}
然后是实现类:
package com.sms.dao.base.impl;import java.lang.reflect.ParameterizedType;import java.util.List;import javax.annotation.Resource;import org.hibernate.Session;import org.hibernate.SessionFactory;import com.sms.dao.base.BaseDao;public class BaseDaoImpl<T> implements BaseDao<T> {private Class<T> entityClass;private String hql;@Resourceprivate SessionFactory sessionFactory;public Session getSession(){return sessionFactory.getCurrentSession();}@SuppressWarnings("unchecked")public BaseDaoImpl() {//通过反射获取泛型传过来的类的类对象this.entityClass = (Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];this.hql = "from " + this.entityClass.getName();}@Overridepublic void add(Object entity) {this.getSession().save(entity);}@Overridepublic void delete(Object entity) {this.getSession().delete(entity);}@Overridepublic void update(Object entity) {this.getSession().update(entity);}@Overridepublic T findById(Integer id) {@SuppressWarnings("unchecked")T result = (T) this.getSession().get(entityClass,id);return result;}@Overridepublic List<T> getPageList(int startIndex, int pageSize) {// TODO Auto-generated method stub@SuppressWarnings("unchecked")List<T> list = this.getSession().createQuery(hql).setFirstResult(startIndex).setMaxResults(pageSize).list();System.out.println(hql);return list;}@Overridepublic long getAmount() {String sql = "select count(*) from "+ this.entityClass.getName();long count = (Long) this.getSession().createQuery(sql).uniqueResult() ;return count;}}
通用接口完成,我们使用的时候,只要继承BaseDaoImp就可以实现最基本的增删改查了。
例如学生管理系统中的年级:
接口是:
package com.sms.dao;import com.sms.dao.base.BaseDao;import com.sms.entity.GradeEntity;public interface GradeDao extends BaseDao<GradeEntity>{}
实现类:
package com.sms.dao.impl;
import org.springframework.stereotype.Component;
import com.sms.dao.GradeDao;
import com.sms.dao.base.impl.BaseDaoImpl;
import com.sms.entity.GradeEntity;
@Component
public class GradeDaoImpl extends BaseDaoImpl<GradeEntity> implements GradeDao{
}
这样子,GradeDaoImpl就可以实现最基础的增删改查的功能了。
转载地址:http://blog.csdn.net/kklt21cn/article/details/42040597
0 0
- 基于hibernate的BaseDao及其实现类的设计
- 基于hibernate的BaseDao及其实现类的设计
- 基于Hibernate的BaseDao类
- 基于Hibernate的BaseDao类
- 基于hibernate的BaseDao
- 基于hibernate的BaseDAO接口
- 基于hibernate的BaseDAO接口
- 基于hibernate的BaseDAO接口
- 基于hibernate的BaseDAO接口
- BaseDao基于JPA的实现
- BaseDao基于JPA的实现
- 14、基于JDBC的BaseDao的实现
- Spring Hibernate 4.0 BaseDao的实现
- springboot使用hibernate的SessionFactory实现BaseDao
- Hibernate常用的BaseDao
- BaseDao的设计思路
- 万能的BaseDao设计
- 项目中三大框架整合的BaseDao接口及其实现
- html5 canvas element
- Dialog
- Google C++编程风格指南
- google chrom 开发工具选项快捷操作
- 自定义View(板块随手指移动)
- 基于hibernate的BaseDao及其实现类的设计
- leetcode 59. Spiral Matrix II-螺旋矩阵|清晰思路
- 粗浅看 深度解析Java内存原型
- 常用的生成代码
- 上传按钮样式的终极解决方案_input透明法
- 【HDFS】HDFS中JAVA API的使用
- ACM计划
- STM32F4时钟配置
- 最长无重复字符的子串