zoukankan      html  css  js  c++  java
  • 【JavaWeb】Hibernate Dao层设计

    层接口定义IBaseDao.java

    package dao;
    
    import java.io.Serializable;
    import java.util.Collection;
    import java.util.List;
    
    import org.hibernate.Session;
    
    /**
     * Dao层基本操作接口定义
     * 
     * @author Administrator
     *
     * @param <T>
     * @param <K>
     */
    public interface IBaseDao<T, K extends Serializable> {
    
        /**
         * 获取当前session对象
         * 
         * @return
         */
        public Session getSession();
    
        /**
         * 将实体对象保存到数据库中
         * 
         * @param t
         *            待保存的实体对象
         * @return 实体对象的ID
         */
        public K save(T t);
    
        /**
         * 将实体对象【集合】保存到数据库中
         * 
         * @param ct
         *            实体对象【集合】
         */
        public void saveAll(Collection<T> ct);
    
        /**
         * 根据Id查询实体对象
         * 
         * @param id
         *            表记录中的对应的id字段
         * @return 对应的实体对象
         */
        public T findById(K id);
    
        /**
         * 更新一条记录(未注入属性值默认为null)
         * 
         * @param t
         *            待更新记录对应的实体对象
         * @return 更新后的实体对象
         */
        public T update(T t);
    
        /**
         * 删除一个实体对象对应的表记录
         * 
         * @param t
         *            待删除的实体对象
         */
        public void delete(T t);
    
        /**
         * 删除一组记录
         * 
         * @param ct
         *            待删除记录集合
         */
        public void deleteAll(Collection<T> ct);
    
        /**
         * 根据id删除一条记录
         * 
         * @param id
         *            待删除记录id
         * @return 是否删除成功(id是否有效)
         */
        public boolean deleteById(K id);
    
        /**
         * 加载所有记录集合
         * 
         * @return 所有记录集合
         */
        public List<T> loadAll();
    
        /**
         * 分页加载记录集合
         * 
         * @param page
         *            当前第多少页
         * @param rows
         *            每页最多多少行数据
         * @return 第page页的数据集合
         */
    
        public List<T> pages(int page, int rows);
    
        /**
         * 分页加载记录集合
         * 
         * @param page
         *            当前第多少页
         * @param rows
         *            每页最多多少行数据
         * @param propertyName
         *            分页参数,对应实体类属性
         * @param orderType
         *            排序方式,"asc"为升序,"desc"为降序
         * @return 第page页的数据集合
         * 
         */
        public List<T> pages(int page, int rows, String propertyName, String orderType);
    
        /**
         * 获取总记录数
         * 
         * @return 总数
         */
    
        public long getTotalCount();
    
    }
    

    BaseDao实现类BaseDaoImpl.java

    package dao;
    
    import java.io.Serializable;
    import java.util.Collection;
    import java.util.List;
    
    import javax.transaction.Transactional;
    
    import org.hibernate.Criteria;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.criterion.Order;
    import org.hibernate.criterion.Projections;
    
    import model.User;
    
    @Transactional
    /**
     * Dao层基本操作接口实现
     * 
     * @author Administrator
     *
     * @param <T>
     * @param <K>
     */
    public class BaseDaoImpl<T, K extends Serializable> implements IBaseDao<T, K> {
    
        private Class<T> clatt;
    
        public BaseDaoImpl() {
    
        }
    
        public BaseDaoImpl(Class<T> clatt) {
            this.clatt = clatt;
        }
    
        @Override
        public Session getSession() {
            Configuration cfg = new Configuration();
            cfg.configure();// 加载配置文件
            SessionFactory sf = cfg.buildSessionFactory();
            Session session = sf.openSession();
            return session;
        }
    
        @Override
        public K save(T t) {
            Session session = getSession();
            session.beginTransaction();
            System.out.println(((User) t).getPw());
            @SuppressWarnings("unchecked")
            K k = (K) session.save(t);
            session.getTransaction().commit();
            session.close();
            return k;
        }
    
        @Override
        public void saveAll(Collection<T> ct) {
            Session session = getSession();
            session.beginTransaction();
            for (T t : ct) {
                session.save(t);
            }
            session.getTransaction().commit();
            session.close();
        }
    
        @Override
        public T findById(K id) {
            Session session = getSession();
            session.beginTransaction();
            T t = (T) (session.get(clatt, id));
            session.getTransaction().commit();
            session.close();
            return t;
        }
    
        @Override
        public T update(T t) {
            Session session = getSession();
            session.beginTransaction();
            session.update(t);
            session.getTransaction().commit();
            session.close();
            return t;
        }
    
        @Override
        public void delete(T t) {
            Session session = getSession();
            session.beginTransaction();
            session.delete(t);
            session.getTransaction().commit();
            session.close();
        }
    
        @Override
        public void deleteAll(Collection<T> ct) {
            Session session = getSession();
            session.beginTransaction();
            for (T t : ct) {
                session.delete(t);
            }
            session.getTransaction().commit();
            session.close();
    
        }
    
        @Override
        public boolean deleteById(K id) {
            Session session = getSession();
            session.beginTransaction();
            T t = (T) (session.get(clatt, id));
            if (t != null) {
                session.getTransaction().commit();
                session.close();
                return false;
            } else {
                session.getTransaction().rollback();
                session.close();
                return false;
            }
        }
    
        @SuppressWarnings("unchecked")
        @Override
        public List<T> loadAll() {
            Session session = getSession();
            return session.createQuery("from " + clatt.getSimpleName()).list();
        }
    
        public Class<?> getClatt() {
            return this.getClass();
        }
    
        public void setClatt(Class<T> clatt) {
            this.clatt = clatt;
        }
    
        @Override
        public List<T> pages(int page, int rows) {
            return pages(page, rows, null, null);
        }
    
        @Override
        public List<T> pages(int page, int rows, String propertyName, String orderType) {
            Session session = getSession();
            @SuppressWarnings("deprecation")
    
            Criteria cr = session.createCriteria(clatt);
            if (propertyName != null && orderType != null) {
                if (orderType.equals("desc"))
                    cr.addOrder(Order.desc(propertyName));
                else
                    cr.addOrder(Order.asc(propertyName));
            }
            cr.setFirstResult((page - 1) * rows);
            cr.setMaxResults(rows);
            @SuppressWarnings("unchecked")
            List<T> results = cr.list();
            session.close();
            return results;
        }
    
        @Override
        public long getTotalCount() {
            Session session = getSession();
            @SuppressWarnings("deprecation")
            Criteria criteria = session.createCriteria(clatt);
            Object object = criteria.setProjection(Projections.rowCount()).uniqueResult();
            long totalCount = 0;
            if (object != null) {
                totalCount = Long.parseLong(object.toString());
            }
            return totalCount;
        }
    
    }
    

    UserDao接口定义:IUserDao.java

    package dao;
    
    import model.User;
    /**
     * User特殊操作接口定义
     * @author Administrator
     *
     */
    public interface IUserDao extends IBaseDao<User,Integer>{
    
    }
    

    UserDao接口实现:UserDaoImpl.java

    package dao;
    
    import model.User;
    /**
     * User特殊接口实现
     * @author Administrator
     *
     */
    public  class UserImpl extends BaseDaoImpl<User, Integer> implements IUserDao  {
    public UserImpl() {
            super(User.class);
        }
    }
    
  • 相关阅读:
    SQLAlchemy教程-第二章-SQL常用查询的ORM写法
    弹性数组
    C++模板
    typedef 函数名
    typedef 函数指针
    备忘录:“#ifdef __cplusplus extern "C" { #endif”的定义
    linux mmap 内存映射
    生成模型与判别模型(转)
    DL反向传播理解
    UFLDL(Unsupervised Feature Learning and Deep Learning)
  • 原文地址:https://www.cnblogs.com/cnsec/p/13286779.html
Copyright © 2011-2022 走看看