Spring Hibernate 實現BaseDao

cenmin 8年前發布 | 7K 次閱讀 Java Spring Hibernate

Spring4.0, Hibernate4.0
</div>

 

BaseDao    

package com.school.dao;

import java.io.Serializable;
import java.util.List;

import com.school.util.PageList;

/**
 * 
 * @author Fandy
 *
 */
public interface BaseDao {

    /**
     * 
     * @param hql
     * @return
     */
    <T> T findObject(String hql);

    /**
     * 
     * @param hql
     * @param objects
     * @return
     */
    <T> T findObject(String hql, Object...objects);

    /**
     * 
     * @param cls
     * @param id
     * @return
     */
    <T> T findObject(Class<T> cls, Serializable id);

    /**
     * 
     * @param sql
     * @return
     */
    <T> T findObjectBySql(String sql);

    /**
     * 
     * @param sql
     * @param objects
     * @return
     */
    <T> T findObjectBySql(String sql, Object...objects);

    /**
     * 
     * @param hql
     * @return
     */
    <T> List<T> findList(String hql);

    /**
     * 
     * @param hql
     * @param objects
     * @return
     */
    <T> List<T> findList(String hql, Object...objects);

    /**
     * 
     * @param cls
     * @return
     */
    <T> List<T> findList(Class<T> cls);

    /**
     * 
     * @param sql
     * @return
     */
    <T> List<T> findListBySql(String sql);

    /**
     * 
     * @param sql
     * @param objects
     * @return
     */
    <T> List<T> findListBySql(String sql, Object...objects);

    /**
     * 
     * @param obj
     */
    <T> void saveObject(T obj);

    /**
     * 
     * @param obj
     */
    <T> void updateObject(T obj);

    /**
     * 
     * @param obj
     */
    <T> void saveOrUpdateObject(T obj);

    /**
     * 
     * @param sql
     * @return
     */
    int executeSql(String sql);

    /**
     * 
     * @param sql
     * @param objects
     * @return
     */
    int executeSql(String sql, Object...objects);

    /**
     * 
     * @param hql
     * @return
     */
    int coutObjects(String hql);

    /**
     * 
     * @param hql
     * @param objects
     * @return
     */
    int countObjects(String hql, Object...objects);

    /**
     * 
     * @param hql
     * @param page
     * @param rows
     * @return
     */
    <T> PageList<T> findPageList(String hql, int page, int rows);

    /**
     * 
     * @param hql
     * @param page
     * @param rows
     * @param objects
     * @return
     */
    <T> PageList<T> findPageList(String hql, int page, int rows, Object...objects);


}

BaseDao實現類    

package com.school.dao.impl;

/**
 * 
 * @author Fandy
 *
 */

import java.io.Serializable;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.school.dao.BaseDao;
import com.school.util.PageList;

@SuppressWarnings("unchecked")
@Repository("baseDao")
public class BaseDaoImpl implements BaseDao {

    @Autowired
    private SessionFactory sessionFactory;

    Session getSession() {
        return sessionFactory.getCurrentSession();
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.school.dao.BaseDao#findObject(java.lang.String)
     */
    @Override
    public <T> T findObject(String hql) {
        List<T> list = findList(hql);
        return (null == list || list.size() == 0) ? null : list.get(0);
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.school.dao.BaseDao#findObject(java.lang.String,
     * java.lang.Object[])
     */
    @Override
    public <T> T findObject(String hql, Object... objects) {
        List<T> list = findList(hql, objects);
        return (null == list || list.size() == 0) ? null : list.get(0);
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.school.dao.BaseDao#findObject(java.lang.Class,
     * java.io.Serializable)
     */
    @Override
    public <T> T findObject(Class<T> cls, Serializable id) {
        return (T) getSession().get(cls, id);
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.school.dao.BaseDao#findObjectBySql(java.lang.String)
     */
    @Override
    public <T> T findObjectBySql(String sql) {
        List<T> list = findListBySql(sql);
        return (null == list || list.size() == 0) ? null : list.get(0);
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.school.dao.BaseDao#findObjectBySql(java.lang.String,
     * java.lang.Object[])
     */
    @Override
    public <T> T findObjectBySql(String sql, Object... objects) {
        List<T> list = findListBySql(sql, objects);
        return (null == list || list.size() == 0) ? null : list.get(0);
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.school.dao.BaseDao#findList(java.lang.String)
     */
    @Override
    public <T> List<T> findList(String hql) {
        Query query = getSession().createQuery(hql);
        return query.list();
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.school.dao.BaseDao#findList(java.lang.String,
     * java.lang.Object[])
     */
    @Override
    public <T> List<T> findList(String hql, Object... objects) {
        Query query = getSession().createQuery(hql);
        setParameter(query, objects);
        return query.list();
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.school.dao.BaseDao#findList(java.lang.Class)
     */
    @Override
    public <T> List<T> findList(Class<T> cls) {
        String hql = "FROM " + cls.getName();
        return findList(hql);
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.school.dao.BaseDao#findListBySql(java.lang.String)
     */
    @Override
    public <T> List<T> findListBySql(String sql) {
        Query query = getSession().createSQLQuery(sql);
        return query.list();
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.school.dao.BaseDao#findListBySql(java.lang.String,
     * java.lang.Object[])
     */
    @Override
    public <T> List<T> findListBySql(String sql, Object... objects) {
        Query query = getSession().createSQLQuery(sql);
        setParameter(query, objects);
        return query.list();
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.school.dao.BaseDao#saveObject(java.lang.Object)
     */
    @Override
    public <T> void saveObject(T obj) {
        getSession().save(obj);
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.school.dao.BaseDao#updateObject(java.lang.Object)
     */
    @Override
    public <T> void updateObject(T obj) {
        getSession().update(obj);
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.school.dao.BaseDao#saveOrUpdateObject(java.lang.Object)
     */
    @Override
    public <T> void saveOrUpdateObject(T obj) {
        getSession().saveOrUpdate(obj);
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.school.dao.BaseDao#executeSql(java.lang.String)
     */
    @Override
    public int executeSql(String sql) {
        Query query = getSession().createSQLQuery(sql);
        return query.executeUpdate();
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.school.dao.BaseDao#executeSql(java.lang.String,
     * java.lang.Object[])
     */
    @Override
    public int executeSql(String sql, Object... objects) {
        Query query = getSession().createSQLQuery(sql);
        setParameter(query, objects);
        return query.executeUpdate();
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.school.dao.BaseDao#coutObjects(java.lang.String)
     */
    @Override
    public int coutObjects(String hql) {
        Query query = getSession().createQuery(hql);
        ScrollableResults sr = query.scroll();
        sr.last();
        return sr.getRowNumber() == -1 ? 0 : sr.getRowNumber() + 1;
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.school.dao.BaseDao#countObjects(java.lang.String,
     * java.lang.Object[])
     */
    @Override
    public int countObjects(String hql, Object... objects) {
        Query query = getSession().createQuery(hql);
        setParameter(query, objects);
        ScrollableResults sr = query.scroll();
        sr.last();
        return sr.getRowNumber() == -1 ? 0 : sr.getRowNumber() + 1;
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.school.dao.BaseDao#findPageList(java.lang.String, int, int)
     */
    @Override
    public <T> PageList<T> findPageList(String hql, int page, int rows) {
        Query query = getSession().createQuery(hql);
        return findPageList(query, page, rows);
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.school.dao.BaseDao#findPageList(java.lang.String, int, int,
     * java.lang.Object[])
     */
    @Override
    public <T> PageList<T> findPageList(String hql, int page, int rows,
            Object... objects) {
        Query query = getSession().createQuery(hql);
        setParameter(query, objects);
        return findPageList(query, page, rows);
    }

    <T> PageList<T> findPageList(Query query, int page, int rows) {
        ScrollableResults sr = query.scroll();
        sr.last();
        int count = sr.getRowNumber() == -1 ? 0 : sr.getRowNumber() + 1;
        query.setFirstResult((page - 1) * rows);
        query.setMaxResults(page * rows);
        return new PageList<T>(page, rows, count, query.list());
    }

    void setParameter(Query query, Object... objects) {
        for (int i = 0; i < objects.length; i++) {
            query.setParameter(i, objects[i]);
        }
    }
}

[代碼]PageList    

package com.school.util;
/**
 * @author Fandy
 */
import java.util.List;

public class PageList<T> {

    private int page;
    private int rows;
    private int total;
    private List<T> list;

    public PageList() {
        super();
    }

    public PageList(int page, int rows, int total, List<T> list) {
        super();
        this.page = page;
        this.rows = rows;
        this.total = total;
        this.list = list;
    }

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public int getRows() {
        return rows;
    }

    public void setRows(int rows) {
        this.rows = rows;
    }

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }

    public int size(){
        return null==list?0:list.size();
    }

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }

}
 本文由用戶 cenmin 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!