1.BaseDao类:底层的dao接口,提供最基本的CRUD和分页
[java] view plain copy
- import java.io.Serializable;
- import java.util.List;
- import com.xxx.utils.PageUtil;
- public interface BaseDao<E> {
- public void saveEntity(E e);
- public void updateEntity(E e);
- public void deleteEntity(E e);
- public void deleteEntityById(Serializable id);
- public E loadEntity(final Class<E> class1, final Serializable id);
- public E loadEntityById(Serializable id);
- public List<E> loadListEntities(PageUtil page);
- }
2.BaseDaoImpl类:BaseDao的实现类
[java] view plain copy
- import java.io.Serializable;
- import java.lang.reflect.ParameterizedType;
- import java.sql.SQLException;
- import java.util.List;
- import org.hibernate.HibernateException;
- import org.hibernate.Session;
- import org.springframework.orm.hibernate3.HibernateCallback;
- import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
- import com.xxx.utils.PageUtil;
- public class BaseDaoImpl<E> extends HibernateDaoSupport implements BaseDao<E> {
- private Class cls;
- public BaseDaoImpl(){
- // 就是要获取E的真实数据类型
- this.cls = (Class<E>)((ParameterizedType)this.getClass().getGenericSuperclass())
- .getActualTypeArguments()[0];
- }
- public void saveEntity(E e) {
- this.getHibernateTemplate().save(e);
- }
- public void updateEntity(E e) {
- this.getHibernateTemplate().update(e);
- }
- public void deleteEntity(E e) {
- this.getHibernateTemplate().delete(e);
- }
- public E loadEntity(final Class<E> class1,final Serializable id){
- return this.getHibernateTemplate().get(class1, id);
- }
- @SuppressWarnings("unchecked")
- public E loadEntityById(Serializable id) {
- return (E) loadEntity(cls,id);
- }
- @SuppressWarnings("unchecked")
- public List<E> loadListEntities(final PageUtil page) {
- return this.getHibernateTemplate().executeFind(new HibernateCallback<List<E>>() {
- public List<E> doInHibernate(Session session) throws HibernateException, SQLException {
- Long totalL = (Long) session.createQuery("select count(*) from "+page.getModelName()).uniqueResult();
- page.setTotalCount(totalL.intValue());
- return session.createQuery("from " +page.getModelName())
- .setFirstResult((page.getPageNow()-1)*page.getPageSize())
- .setMaxResults(page.getPageSize()).list();
- }
- });
- }
- public void deleteEntityById(Serializable id) {
- deleteEntity(loadEntityById(id));
- }
- }
3.UserDao:User对应的dao接口 [java] view plain copy
- import com.xxx.model.User;
- public interface UserDao extends BaseDao<User>{
- //这里还可以自己添加特殊的接口
- }
4.UserDaoImpl:UserDao的实现类 [java] view plain copy
- import org.springframework.stereotype.Component;
- import com.xxx.model.User;
- @Component("userDao") //Spring的注解给新手的说明哦
- public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao{
- //这里还可以自己添加特殊的接口的实现
- }
5.PageUtil,自己写得分页辅助类,为hibernate的分页使用
[java] view plain copy
- import org.springframework.stereotype.Component;
- @Component("page") //spring注解,交给spring管理师最好不过的了,因为是单例嘛,呵呵
- public class PageUtil {
- private static PageUtil page = null;
- private String modelName; //实体名字,比如User,就是写User
- private int pageNow; //当前页
- private int pageSize; //每页显示个数
- private int totalCount; //总数
- private PageUtil() {
- }
- public int getPages() { //获取总页数
- return totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;
- }
- public static PageUtil getInstance() {
- if (null == page) {
- page = new PageUtil();
- }
- return page;
- }
- public static PageUtil getPage() {
- return page;
- }
- public static void setPage(PageUtil page) {
- PageUtil.page = page;
- }
- public String getModelName() {
- return modelName;
- }
- public void setModelName(String modelName) {
- this.modelName = modelName;
- }
- public int getPageNow() {
- return pageNow;
- }
- public void setPageNow(int pageNow) {
- this.pageNow = pageNow;
- }
- public int getPageSize() {
- return pageSize;
- }
- public void setPageSize(int pageSize) {
- this.pageSize = pageSize;
- }
- public int getTotalCount() {
- return totalCount;
- }
- public void setTotalCount(int totalCount) {
- this.totalCount = totalCount;
- }
- }
以上就是个人的通用dao层,只是给大家抛砖,希望大侠们给点意见
至于ssh的引入jar包和各配置文件,请关注我另外的文章,谢谢