使用Hibernate的SessionFactory自封装统一的DAO实现_经过测试_可以直接参考使用

        使用Hibernate的SessionFactory自封装统一的DAO实现,使用泛型,减少重复代码,提升开发效率。

1、dao实现类:BaseDaoImpl


import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;


import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils;
import com.kou.dao.BaseDao;
import com.kou.exception.MultipleResultException;
import com.kou.util.vo.ListVO;
import com.kou.util.vo.PageVO;

/**
 * dao基类实现
 */
public class BaseDaoImpl<T> implements BaseDao<T> {
    private static final Logger log = LoggerFactory.getLogger(BaseDaoImpl.class);
    @Resource(name = "sessionFactory")
    private SessionFactory sf;
    private final Class<T> clazz;

    public BaseDaoImpl() {
		ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
		clazz = (Class<T>) type.getActualTypeArguments()[0];
    }

    public String save(T t) {
        Object object = sf.getCurrentSession().save(t);

        return String.valueOf(object);
    }


    public void update(T t) {
        sf.getCurrentSession().update(t);
    }

    @Deprecated
    public void saveOrUpdate(T t) {
        sf.getCurrentSession().saveOrUpdate(t);
    }


    public void delete(T t) {
        sf.getCurrentSession().delete(t);
    }

    /**
     * 修改和批处理
     */
    public void batchByHQL(String hql, Object... objects) {
        Query q = sf.getCurrentSession().createQuery(hql);
        for (int i = 0; i < objects.length; i++) {
            q.setParameter(i, objects[i]);
        }
        q.executeUpdate();
    }

    public void batchBySQL(String sql, Object... objects) {
        Query q = sf.getCurrentSession().createSQLQuery(sql);
        for (int i = 0; i < objects.length; i++) {
            q.setParameter(i, objects[i]);
        }
        q.executeUpdate();
    }


    public T get(Serializable id) {
        return (T) sf.getCurrentSession().get(clazz, id);
    }

    //load
    public T load(Serializable id) {
        return (T) sf.getCurrentSession().load(clazz, id);
    }


    public List<T> findByHQL(String hql, Object... objects) {
        Query q = sf.getCurrentSession().createQuery(hql);
        for (int i = 0; i < objects.length; i++) {
            q.setParameter(i, objects[i]);
        }
        return q.list();
    }


    public ListVO<T> findModels(PageVO pageModel,
                                Map<String, Object> condition, Boolean isDesc, String orderBy) {
        return findModels(pageModel, condition, new Object[][]{{orderBy, isDesc}});
    }


    public ListVO<T> findByHQLPage(String hql, Object[] objects, PageVO pageModel) {

        pageModel = findCountByHQLPage(hql, objects, pageModel);

        Query q = findListByHQLPage(hql, objects, pageModel);

        return new ListVO<>(pageModel, q.list());
    }

    public <E> ListVO<E> findModelsByHQLPage(String hql, Object[] objects, PageVO pageModel) {

        pageModel = findCountByHQLPage(hql, objects, pageModel);
        Query q = findListByHQLPage(hql, objects, pageModel);
        return new ListVO<>(pageModel, q.list());
    }

    private Query findListByHQLPage(String hql, Object[] objects,
                                    PageVO pageModel) {
        Query q = sf.getCurrentSession().createQuery(hql);
        initPageQuery(objects, pageModel, q);
        return q;
    }

    private void initPageQuery(Object[] objects, PageVO pageModel, Query q) {
        q.setMaxResults(pageModel.getPageSize());

        q.setFirstResult((pageModel.getPageNo() <= 0 ? 0 : pageModel.getPageNo() - 1) * pageModel.getPageSize());

        if (objects != null && objects.length > 0) {
            for (int i = 0; i < objects.length; i++) {
                if (objects[i] instanceof String[]) {

                } else {
                    q.setParameter(i, objects[i]);
                }
            }
        }
    }

    public ListVO<Object[]> findBySQLPage(String sql, Object[] objects, PageVO pageModel) {

        pageModel = findCountBySQLPage(sql, objects, pageModel);

        Query q = sf.getCurrentSession().createSQLQuery(sql);
        initPageQuery(objects, pageModel, q);

        return new ListVO<Object[]>(pageModel, q.list());
    }

    public ListVO<T> findByHQLPage(String hql, PageVO pageModel, Object... objects) {
        return findByHQLPage(hql, objects, pageModel);
    }

    //单值检索(查询结果有且仅有一条记录)
    public Object uniqueResult(String hql, Object... objects) {
        Query q = sf.getCurrentSession().createQuery(hql);
        for (int i = 0; i < objects.length; i++) {
            q.setParameter(i, objects[i]);
        }
        return q.uniqueResult();
    }

    //单值检索(查询结果有且仅有一条记录)
    public Object uniqueSQLResult(String sql, Object... objects) {
        Query q = sf.getCurrentSession().createSQLQuery(sql);
        for (int i = 0; i < objects.length; i++) {
            q.setParameter(i, objects[i]);
        }
        return q.uniqueResult();
    }


    public ListVO<T> findByHQLPage(String hql, PageVO pageModel, Map<String, Object> condition, Boolean isDesc, String orderBy) {
        return findByHQLPage(hql, pageModel, condition, new Object[]{orderBy, isDesc});
    }

    /**
     * 拼接查询条件
     * <p>
     * 包含 字符串、数字、日期
     *
     * @param map
     * @return
     */
    public List<Object> getCondition(Map<String, Object> map, StringBuffer whereSql) {

        List<Object> list = new ArrayList<Object>();

        if (map == null || map.size() <= 0) {
            return list;
        }

        whereSql.append(" where ");

        Iterator<Map.Entry<String, Object>> it = map.entrySet().iterator();
        while (it.hasNext()) {

            Map.Entry<String, Object> entry = it.next();
            String key = entry.getKey();
            Object value = entry.getValue();

            if (value == null) {
                log.warn("condition value is null, removed , key: {}", key);
                it.remove();
                continue;
            }
            if (whereSql.length() > 7) {
                whereSql.append(" and ");
            }
            if (key.contains("Id") || key.contains("id")) {
                whereSql.append(key).append(" = ? ");
                list.add(value);
                continue;
            }

            if (value instanceof String) {
                String string = ((String) value).trim();
                if (key.startsWith("#no_")) {
                    whereSql.append(key.substring(4)).append(" = ? ");
                    list.add(value);

                } else if (key.startsWith("#left_")) {
                    whereSql.append(key.substring(6)).append(" like ? ");
                    list.add("%" + value);

                } else if (key.startsWith("#right_")) {
                    whereSql.append(key.substring(7)).append(" like ? ");
                    list.add(value + "%");

                } else if (key.startsWith("#all_")) {
                    whereSql.append(key.substring(5)).append(" like ? ");
                    list.add("%" + value + "%");

                } else if (key.startsWith("#noEqual_")) {
                    whereSql.append(key.substring(9)).append(" != ? ");
                    list.add(value);

                } else if (string.contains(",")) {
                    String[] values = string.split(",");
                    whereSql.append( key);
                    whereSql.append(" in ( ");
                    for (int i = 0; i < values.length - 1; i++) {
                        whereSql.append("?, ");
                        list.add(values[i]);
                    }
                    whereSql.append("? ) ");
                    list.add(values[values.length - 1]);
                }else {
                    if ("".equals(string)){
                        log.warn("condition value is '' , key: {} \tvalue: {} ", key, value);
                    }

                    whereSql.append(key).append(" = ? ");

                    list.add(value);
                }
            } else if (value instanceof Number || value instanceof Date) {
                if (key.contains("#start_")) {
                    whereSql.append(key.substring(7)).append(" >= ? ");
                } else if (key.contains("#end_")) {
                    whereSql.append(key.substring(5)).append(" <= ? ");
                } else {
                    whereSql.append(key).append(" = ? ");
                }
                list.add(value);
            } else if (value instanceof Boolean) {
                whereSql.append(key).append(" = ? ");
                list.add(value);
            } else {
                log.warn(" unknown type of the condition, ignored ,key: {} \tvalue: {} ", key, value);
            }

        }
        if (whereSql.length() == 7){
            whereSql.setLength(0);
        }
        return list;
    }


    //	排序暂只支持单个
    public String getOrderBy(Object[]... orderBy) {

        if (orderBy == null || orderBy.length == 0) {
            return null;
        }

        StringBuilder orderSql = new StringBuilder(" order by ");

        for (int i = 0; i < orderBy.length - 1; i++) {
            orderSql.append(orderBy[i][0]);

            if (orderBy[i][1].equals(true)) {
                orderSql.append(" desc, ");
            } else {
                orderSql.append(" asc, ");
            }
        }
        orderSql.append(orderBy[orderBy.length - 1][0]);

        if (orderBy[orderBy.length - 1][1].equals(true)) {
            orderSql.append(" desc ");
        } else {
            orderSql.append(" asc ");
        }
        return orderSql.toString();
    }

    public PageVO findCountBySQLPage(String sql, Object[] objects, PageVO pageModel) {
        if (pageModel == null) {
            pageModel = new PageVO();
        }

        if (pageModel.getRecordCount() <= 0) {
//			如果是第一次,则先查询结果总数
            String hql1 = " select count(*) from (" + sql + ") test";
            Query q = sf.getCurrentSession().createSQLQuery(hql1);
            if (objects != null && objects.length > 0) {
                for (int i = 0; i < objects.length; i++) {
                    q.setParameter(i, objects[i]);
                }
            }

            pageModel.setRecordCount(Long.valueOf(q.uniqueResult().toString()));
        }
        return pageModel;
    }

    public PageVO findCountByHQLPage(String hql, Object[] objects, PageVO pageModel) {
        if (pageModel == null) {
            pageModel = new PageVO();
        }

        if (pageModel.getRecordCount() <= 0) {
//			如果是第一次,则先查询结果总数
            String hql1 = " select count(*) " + hql;
            Query q = sf.getCurrentSession().createQuery(hql1);
            if (objects != null && objects.length > 0) {
                for (int i = 0; i < objects.length; i++) {
                    q.setParameter(i, objects[i]);
                }
            }
            pageModel.setRecordCount(Long.valueOf(q.uniqueResult().toString()));
        }
        return pageModel;
    }

    public PageVO findCountByHQLPage(String hql, PageVO pageModel, Object... objects) {
        return findCountByHQLPage(hql, objects, pageModel);
    }

    public PageVO findCountByHQLPage(String hql, PageVO pageModel, Map<String, Object> condition) {

        StringBuffer whereSql = new StringBuffer();
        List<Object> conditions = getCondition(condition, whereSql);
        StringBuffer sql = new StringBuffer(hql);

        if (whereSql != null) {
            sql.append(whereSql);
        }

        log.debug(" hql: " + sql.toString());

        return findCountByHQLPage(sql.toString(), conditions.toArray(), pageModel);
    }

    @Override
    public PageVO findModelsCount(PageVO pageModel,
                                  Map<String, Object> condition) {
        String hql = " from " + clazz.getName();
        return findCountByHQLPage(hql, pageModel, condition);
    }

    public SessionFactory getSf() {
        return sf;
    }

    public void setSf(SessionFactory sf) {
        this.sf = sf;
    }

    public List<T> findModels(Map<String, Object> condition) {
        return findModels(condition, null);
    }


    public List<T> findModels(Map<String, Object> condition, Boolean isDesc, String orderBy) {
        return findModels(condition, new Object[][]{{orderBy, isDesc}});
    }

    public List<T> findModels(Object[][] condition) {
        return findModels(condition, null);
    }


    public List<T> findModels(Object[][] condition, Boolean isDesc,
                              String orderBy) {

        Map<String, Object> map = new HashMap<String, Object>(condition.length);

        for (Object[] aCondition : condition) {
            map.put((String) aCondition[0], aCondition[1]);
        }

        return findModels(map, isDesc, orderBy);
    }

    @Override
    public T findOne(Map<String, Object> condition) {

        List<T> list = findModels(condition);

        if (list == null || list.size() == 0) {
            return null;
        }
        return list.get(0);
    }

    @Override
    public T findOne(Object[][] condition) {
//		TODO 使用分页查询
        List<T> list = findModels(condition);

        if (list == null || list.size() == 0) {
            return null;
        }

//		TODO 如果有多条,抛出异常
        return list.get(0);
    }

    @Override
    public <E> ListVO<E> findBySQLPage(String sql, Object[] objects,
                                       PageVO pageModel, Class<E> clazz) {

        ListVO<Object[]> listVO = findBySQLPage(sql, objects, pageModel);

        if (CollectionUtils.isEmpty(listVO.getList())) {
            return new ListVO<>(listVO.getPageVO(), new ArrayList<E>(0));
        }

        List<Object[]> list = listVO.getList();

        List<E> list2 = new ArrayList<>(0);
        try {
            list2 = findBySQL(clazz, list);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return new ListVO<>(listVO.getPageVO(), list2);
    }

    @SuppressWarnings("rawtypes")
    private <E> List<E> findBySQL(Class<E> clazz, List<Object[]> list) throws Exception {


        if (CollectionUtils.isEmpty(list)) {
            return new ArrayList<>(0);
        }

        List<E> list2 = new ArrayList<>(list.size());
//      TODO 获取list对应的存储的对象类型  不要根据存储的对象获取类型  有可能为null 不准确

        Object data = null;
        for (Object objects : list) {
            if (objects != null) {
                data = objects;
                break;
            }
        }

        if (!(data instanceof Object[])) {

            if (clazz.isInstance(data)) {

                List<E> list1 = new ArrayList<>(list.size());
                for (Object objects : list) {
                    list1.add((E) objects);
                }
                return list1;
            } else {
                log.warn("数据初始化出错,没有对应的类型");
                throw new Exception("数据初始化出错,没有对应的类型");
            }

        }

        Object[] param = list.get(0);

        Constructor<E>[] constructors = (Constructor<E>[]) clazz.getConstructors();

        Constructor<E> constructorFind = null;
        for (Constructor<E> constructor : constructors) {
            int len = constructor.getGenericParameterTypes().length;

            if (len == param.length) {

                boolean result = true;

                for (int i = 0; i < len; i++) {
                    Type type = constructor.getGenericParameterTypes()[i];

                    if (param[i] == null || param[i].getClass().equals(type)) {
                        continue;
                    } else {
                        log.debug("第{}个参数,实体类型为{},对应{}构造函数参数类型为{}", i + 1, param[i].getClass().getName(), clazz.getName(), ((Class) type).getName());
                        result = false;
                        break;
                    }

                }

                if (result) {
                    constructorFind = constructor;
                    break;
                }
            }

        }

        if (constructorFind == null) {
            log.warn("数据初始化出错,没有对应的构造函数");
            throw new Exception("数据初始化出错,没有对应的构造函数");
        }
        /**
         * 存在一个问题,如果数据第一条的字段为null,没有对应的格式,则后续数据有可能报错,
         * 因此需要在报错时查看数据字段的具体类型,然后添加对应的构造函数
         */
        for (Object[] objectArray : list) {

            try {
                E e1 = constructorFind.newInstance(objectArray);
                list2.add(e1);
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
        return list2;
    }

    public void deleteById(Serializable ids) {

        String hql = " delete from " +
                clazz.getName() +
                " where id = ? ";

        batchByHQL(hql, ids);
    }

    @Override
    public <E> List<E> findBySQL(String sql, Class<E> clazz, Object... objects) {
        Query q = sf.getCurrentSession().createSQLQuery(sql);
        for (int i = 0; i < objects.length; i++) {
            q.setParameter(i, objects[i]);
        }
        try {
            return findBySQL(clazz, q.list());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public T findOneSQL(String sql, Object... objects) {
        List<T> list = findBySQL(sql, objects);

        if (list == null || list.size() == 0) {
            return null;
        }

        if (list.size() > 1) {
            throw new MultipleResultException("结果异常,请求期望结果为一条,实际为多个");
        }

        return list.get(0);
    }

    @Override
    public <E> E findOneSQL(String sql, Class<E> clazz, Object... objects) {
        List<E> list = findBySQL(sql, clazz, objects);

        if (list == null || list.size() == 0) {
            return null;
        }

        if (list.size() > 1) {
            throw new MultipleResultException("结果异常,请求期望结果为一条,实际为多个");
        }

        return list.get(0);
    }

    @Override
    public List<T> findBySQL(String sql, Object... objects) {

        Query q = sf.getCurrentSession().createSQLQuery(sql).addEntity(clazz);
        for (int i = 0; i < objects.length; i++) {
            q.setParameter(i, objects[i]);
        }
        return q.list();
    }

    public List<T> findModels(Map<String, Object> condition, Object[][] orderBy) {
        String hql = " from " + clazz.getName();
        StringBuffer sql = new StringBuffer(hql);

        StringBuffer whereSql = new StringBuffer();
        List<Object> conditions = getCondition(condition, whereSql);

        if (whereSql != null) {
            sql.append(whereSql);
        }

        String orderSql = getOrderBy(orderBy);

        if (orderSql != null) {
            sql.append(orderSql);
        }

        log.debug(" hql: " + sql.toString());


        Query q = sf.getCurrentSession().createQuery(sql.toString());

        if (conditions != null && conditions.size() > 0) {
            for (int i = 0; i < conditions.size(); i++) {
                q.setParameter(i, conditions.get(i));
            }
        }

        if (q.list().size() == 0) {
            return null;
        }

        return q.list();
    }

    public List<T> findModels(Object[][] condition, Object[][] orderBy) {
        Map<String, Object> map = new HashMap<String, Object>(condition.length);

        for (Object[] aCondition : condition) {
            map.put((String) aCondition[0], aCondition[1]);
        }

        return findModels(map, orderBy);
    }

    @Override
    public ListVO<T> findByHQLPage(String hql, PageVO pageModel, Map<String, Object> condition, Object[][] orderBy) {
        StringBuffer whereSql = new StringBuffer();
        List<Object> conditions = getCondition(condition, whereSql);
        StringBuffer sql = new StringBuffer(hql);

        if (whereSql != null) {
            sql.append(whereSql);
        }

        String orderSql = getOrderBy(orderBy);

        if (orderSql != null) {
            sql.append(orderSql);
        }

        log.debug(" hql: " + sql.toString());

        return findByHQLPage(sql.toString(), conditions.toArray(), pageModel);
    }

    @Override
    public ListVO<T> findModels(PageVO pageModel, Map<String, Object> condition, Object[][] orderBy) {
        String hql = " from " + clazz.getName();
        return findByHQLPage(hql, pageModel, condition, orderBy);
    }

//    public static void main(String[] args) {
//        BaseDaoImpl baseDao = new BaseDaoImpl();
//        Map<String, Object> map = new HashMap<>();
		baseDao.findOne(new Object[][]{{"showId", ""}});
//        StringBuffer whereSql = new StringBuffer();
//        map.put("companyCode", "2");
//        map.put("xxx", "2");
//        map.put("ddffgg", 2);
//        map.put("fg", true);
		map.put("#no_channelCode","11111");
//
//        List<Object> list = baseDao.getCondition(map, whereSql);
//
//        System.out.print(list);
//    }
}

2、dao接口:BaseDao

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

import com.kou.util.vo.ListVO;
import com.kou.util.vo.PageVO;

/**
 * dao接口
 * 
 * 查询多条用find
 * 查询单条用get
 * 
 * HQL查询时,最好加上包名
 * 
 */
public interface BaseDao<T> {
	//写操作
	public String save(T t);
	
	public void update(T t);
	
	@Deprecated
	public void saveOrUpdate(T t);
	
	public void delete(T t);
	
	public void deleteById(Serializable ids);
	
	public T get(Serializable id);
	
	@Deprecated
	public T load(Serializable id);
	
	/**
	 * 按照hql批处理实体,可执行更新和删除
	 * 
	 * 批量操作,如果使用缓存,不建议使用,如果使用 需要手动清除对应缓存
	 * 
	 * @param hql
	 * @param objects
	 */
	public void batchByHQL(String hql,Object...objects);
	
	/**
	 * 按照sql批处理实体,可执行更新和删除
	 * 
	 * 批量操作,如果使用缓存,不建议使用,如果使用 需要手动清除对应缓存
	 * 
	 * @param sql
	 * @param objects
	 */
	public void batchBySQL(String Sql,Object...objects);
	/**
	 * HQL查询集合
	 * @param hql
	 * @param objects
	 * @return
	 */
	public List<T> findByHQL(String hql,Object...objects);
	/**
	 * SQL查询集合
	 * @param hql
	 * @param objects
	 * @return
	 */
	public <E> List<E> findBySQL(String sql,Class<E> clazz, Object...objects);
	
	/**
	 * SQL查询集合
	 * @param hql
	 * @param objects
	 * @return
	 */
	public List<T> findBySQL(String sql, Object...objects);

	/**
	 * HQL条件查询(一条结果)
	 * 
	 * @param condition
	 * @return
	 */
	public T findOne(Map<String, Object> condition);
	/**
	 * HQL条件查询(一条结果)
	 * 
	 * @param condition
	 * @return
	 */
	public T findOne(Object[][] condition);
	/**
	 * SQL条件查询
	 * 
	 * @param condition
	 * @return
	 */
	public List<T> findModels(Map<String, Object> condition);
	/**
	 * SQL条件查询
	 * 
	 * @param condition
	 * @return
	 */
	public List<T> findModels(Object[][] condition);
	/**
	 * SQL条件查询、排序
	 * 
	 * @param condition
	 * @param isDesc
	 * @param orderBy
	 * @return
	 */
	public List<T> findModels(Map<String, Object> condition, Boolean isDesc, String orderBy);
	/**
	 * SQL条件查询、排序
	 * 
	 * @param condition
	 * @param isDesc
	 * @param orderBy
	 * @return
	 */
	public List<T> findModels(Map<String, Object> condition, Object[][] orderBy);
	/**
	 * SQL条件查询、排序
	 * 
	 * @param condition
	 * @param isDesc
	 * @param orderBy
	 * @return
	 */
	public List<T> findModels(Object[][] condition,  Object[][] orderBy);
	/**
	 * SQL条件查询、排序
	 * 
	 * @param condition
	 * @param isDesc
	 * @param orderBy
	 * @return
	 */
	public List<T> findModels(Object[][] condition, Boolean isDesc, String orderBy);
	
	/**
	 * 一般HQL分页查询
	 * @param hql
	 * @param pageModel
	 * @param objects
	 * @return
	 */
	public ListVO<T> findByHQLPage(String hql, PageVO pageModel, Object... objects);
	
	public <E> ListVO<E> findModelsByHQLPage(String hql, Object[] objects, PageVO pageModel);
	
	/**
	 * 一般SQL分页查询(查询出来的需要自行组装)
	 * TODO 有歧义
	 * 
	 * @param hql
	 * @param pageModel
	 * @param objects
	 * @return
	 */
	public ListVO<Object[]> findBySQLPage(String sql, Object[] objects, PageVO pageModel);
	
	/**
	 * 一般SQL分页查询
	 * @param hql
	 * @param pageModel
	 * @param objects
	 * @return
	 */
	public <E> ListVO<E> findBySQLPage(String sql, Object[] objects, PageVO pageModel, Class<E> clazz);
	/**
	 * 查询总记录条数
	 * 
	 * @param sql
	 * @param pageModel
	 * @param condition
	 * @return
	 */
	public PageVO findCountBySQLPage(String sql, Object[] objects, PageVO pageModel);
	/**
	 * 复杂SQL分页查询
	 * 
	 * @param hql
	 * @param pageModel		分页
	 * @param condition		where条件
	 * @param isDesc   		是否是降序(由大到小)
	 * @param orderBy		排序列
	 * @return
	 */
	public ListVO<T> findByHQLPage(String hql, PageVO pageModel, Map<String, Object> condition, Object[][] orderBy);

	/**
	 * 复杂SQL分页查询
	 *
	 * @param hql
	 * @param pageModel		分页
	 * @param condition		where条件
	 * @param isDesc   		是否是降序(由大到小)
	 * @param orderBy		排序列
	 * @return
	 */
	public ListVO<T> findByHQLPage(String hql, PageVO pageModel, Map<String, Object> condition, Boolean isDesc, String orderBy);

	public ListVO<T> findByHQLPage(String hql, Object[] objects, PageVO pageModel);
	/**
	 * 单值检索(查询结果有且仅有一条记录)
	 * 
	 * @param hql
	 * @param objects
	 * @return
	 */
	public Object uniqueResult(String hql,Object...objects);
	/**
	 * 单值检索(查询结果有且仅有一条记录)
	 * 
	 * @param hql
	 * @param objects
	 * @return
	 */
	public Object uniqueSQLResult(String sql,Object...objects);
	
	/**
	 * @param pageModel 分页
	 * @param condition 查询条件
	 * @param isDesc	是否按由大到小顺序
	 * @param orderBy	排序列
	 * @return
	 */
	public ListVO<T> findModels(PageVO pageModel, Map<String, Object> condition, Object[][] orderBy);

	/**
	 * @param pageModel 分页
	 * @param condition 查询条件
	 * @param isDesc	是否按由大到小顺序
	 * @param orderBy	排序列
	 * @return
	 */
	public ListVO<T> findModels(PageVO pageModel, Map<String, Object> condition, Boolean isDesc, String orderBy);
	/**
	 * 查询总记录条数
	 * 
	 * @param hql
	 * @param pageModel
	 * @param condition
	 * @return
	 */
	public PageVO findCountByHQLPage(String hql, PageVO pageModel, Map<String, Object> condition);
	/**
	 * 查询总记录条数
	 * 
	 * @param pageModel
	 * @param condition
	 * @return
	 */
	public PageVO findModelsCount(PageVO pageModel, Map<String, Object> condition);
	
	/**
	 * SQL条件查询(一条结果)
	 * 
	 * @param condition
	 * @return
	 */
	public T findOneSQL(String sql, Object... object);
	/**
	 * SQL条件查询(一条结果)
	 * 
	 * @param condition
	 * @return
	 */
	public <E> E findOneSQL(String sql, Class<E> clazz, Object... object);
}

3、其他类引用

3.1、分页信息VO:ListVO
import java.io.Serializable;
import java.util.List;

public class ListVO<T>  implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -5391206473178621952L;
	private PageVO pageVO;
	private List<T> list;
	
	public ListVO() {
	}
	
	public ListVO(PageVO pageVO, List<T> list) {
		super();
		this.pageVO = pageVO;
		this.list = list;
	}
	public PageVO getPageVO() {
		return pageVO;
	}
	public void setPageVO(PageVO pageVO) {
		this.pageVO = pageVO;
	}
	public List<T> getList() {
		return list;
	}
	public void setList(List<T> list) {
		this.list = list;
	}
	
}
3.2、分写VO:PageVO
import java.io.Serializable;

public class PageVO implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 2259332203650205810L;
	private Integer pageSize = 10;  
	private Integer pageNo = 1;     
	private Long recordCount = 0l;
	
	
	public PageVO() {
	}
	
	public PageVO(Integer pageSize, Long recordCount) {
		super();
		this.pageSize = pageSize;
		this.recordCount = recordCount;
	}
	
	public Integer getPageSize() {
		return pageSize;
	}
	public void setPageSize(Integer pageSize) {
		this.pageSize = pageSize;
	}
	public Integer getPageNo() {
		return pageNo;
	}
	public void setPageNo(Integer pageNo) {
		this.pageNo = pageNo;
	}
	public long getRecordCount() {
		return recordCount;
	}
	public void setRecordCount(Long recordCount) {
		this.recordCount = recordCount;
	}

}

  3.3、自定义运行时异常类:MultipleResultException

/**
 * 
 * 	异常情况,结果不该有多个
 *
 *
 */
public class MultipleResultException extends RuntimeException{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1095889541166583401L;
	
	public MultipleResultException() {
	}
	
    public MultipleResultException(String message) {
        super(message);
    }

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春风化作秋雨

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值