一、创建BaseDao的接口IBaseDao, 公共处理Dao对象, 这个对象包含了Hibernate所有的基本操作, 和Sql处理。
1.1、基本操作增删改查
/**
* 添加对象
* @param t
*/
public boolean add(T t);
/**
* 根据id删除对象
* @param id
*/
public boolean delete(int id);
/**
* 更新对象
* @param t
*/
public void update(T t);
/**
*添加对象
* @param t
* @return
*/
public T load(T t);
1.2.1、基于hql查询参数的不分页列表对象
/**
* 不分页的hql查询 基于查询参数
* select user from User where user.username=? and password=?
* @param hql
* @param args 条件的参数
* @return 一组不分页的 列表对象
*/
public List list(String hql, Object[] args);
public List list(String hql, Object arg);
public List list(String hql);
1.2.2基于别名和查询参数查询, 返回不分页的列表对象
/**
* 基于别名和查询参数的混合列表对象
* select role from Role where role.user.id in (:ids) and usernae=:username and nickname=?
* 调用使用session.createQuery(hql).setParemeter(id, [1,2,3]).setParemeter(username, "chb"); 使用Map进行传值
* @param hql
* @param args
* @param alias 别名对象
* @return
*/
public List list(String hql, Object[] args, Map alias);
public List list(String hql, Object arg, Map alias);
public List list(String hql, Map alias);
1.2.3、对应的就有返回分页对象, 基于查询参数和别名
/**
* 分页的hql查询
* @param hql
* @param args 条件的参数
* @return 一组分页的对象
*/
public Pager find(String hql, Object[] args);
/** select user from User where user.username=? */
public Pager find(String hql, Object arg);
public Pager find(String hql);
/**
* 基于别名和查询参数的混合Pager对象
* select role from Role where role.user.id in (:ids) and usernae=:username and nickname=?
* 调用使用session.createQuery(hql).setParemeter(id, [1,2,3]).setParemeter(username, "chb"); 使用Map进行传值
* @param hql
* @param args
* @param alias 别名对象
* @return 分页的对象
*/
public Pager find(String hql, Object[] args, Map alias);
public Pager find(String hql, Object arg, Map alias);
public Pager find(String hql, Map alias);
1.3、根据Hql更新对象
/**
* 根据Hql更新对象。
* @param hql
* @param args
*/
public void updateByHql(String hql, Object[] args);
public void updateByHql(String hql, Object arg);
public void updateByHql(String hql);
2、基于原生态的Sql查询
2.1、原生态的sql需要通过addEntiry(Cat.class)添加实体, 把我们需要添加的对象插入进去。
sess.createSQLQuery("SELECT * FROM CATS").addEntity(Cat.class);
sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").addEntity(Cat.class);
如果这个实体使用的DTO, 但是这个DTO并没有放到数据库中, 即没有使用Entity所表示。可以使用ResultTransformer ,它允许没有被Entity所管理的实体类。
sess.createSQLQuery("SELECT NAME, BIRTHDATE FROM CATS")
.setResultTransformer(Transformers.aliasToBean(CatDTO.class))
package com.chb.basic.dao;
import java.util.List;
import java.util.Map;
import com.chb.basic.model.Pager;
/**
* 公共处理Dao对象, 这个对象包含了Hibernate所有的基本操作, 和Sql处理
* @author 12285
*/
public interface IBaseDao {
/**
* 添加对象
* @param t
*/
public boolean add(T t);
/**
* 根据id删除对象
* @param id
*/
public boolean delete(int id);
/**
* 更新对象
* @param t
*/
public boolean update(T t);
/**
*添加对象
* @param t
* @return
*/
public T load(T t);
/**
* 不分页的hql查询
* @param hql
* @param args 条件的参数
* @return 一组不分页的 列表对象
*/
public List list(String hql, Object[] args);
/** select user from User where user.username=? */
public List list(String hql, Object arg);
public List list(String hql);
/**
* 基于别名和查询参数的混合列表对象
* select role from Role where role.user.id in (:ids) and usernae=:username and nickname=?
* 调用使用session.createQuery(hql).setParemeter(id, [1,2,3]).setParemeter(username, "chb"); 使用Map进行传值
* @param hql
* @param args
* @param alias 别名对象
* @return
*/
public List list(String hql, Object[] args, Map alias);
public List list(String hql, Object arg, Map alias);
public List list(String hql, Map alias);
/**
* 分页的hql查询
* @param hql
* @param args 条件的参数
* @return 一组分页的对象
*/
public Pager find(String hql, Object[] args);
/** select user from User where user.username=? */
public Pager find(String hql, Object arg);
public Pager find(String hql);
/**
* 基于别名和查询参数的混合Pager对象
* select role from Role where role.user.id in (:ids) and usernae=:username and nickname=?
* 调用使用session.createQuery(hql).setParemeter(id, [1,2,3]).setParemeter(username, "chb"); 使用Map进行传值
* @param hql
* @param args
* @param alias 别名对象
* @return 分页的对象
*/
public Pager find(String hql, Object[] args, Map alias);
public Pager find(String hql, Object arg, Map alias);
public Pager find(String hql, Map alias);
/**
* 根据Hql更新对象。
* @param hql
* @param args
*/
public void updateByHql(String hql, Object[] args);
public void updateByHql(String hql, Object arg);
public void updateByHql(String hql);
/**
* 基于Sql查询
* sess.createSQLQuery("SELECT * FROM CATS").addEntity(Cat.class);
* sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").addEntity(Cat.class);
* @param sql
@param args 查询参数
* @param clz 查询的实体类Class
* @param hasEntity 是否被Entity所管理, 即是否被Hibernate所管理
* 如果不是:session.createSQLQuery("SELECT NAME, BIRTHDATE FROM CATS").setResultTransformer(Transformers.aliasToBean(CatDTO.class))
* @return
*/
public List listBySql(String sql, Object[] args, Class clz, boolean hasEntity);
public List listBySql(String sql, Object arg, Class clz, boolean hasEntity);
public List listBySql(String sql, Class clz, boolean hasEntity);
public List listBySql(String sql, Object[] args, Map alias, Class clz, boolean hasEntiry);
public List listBySql(String sql, Object arg, Map alias, Class clz, boolean hasEntiry);
public List listBySql(String sql, Map alias, Class clz, boolean hasEntiry);
/**
* 返回分页对象。
* @param sql
* @param args
* @param clz
* @param hasEntity
* @return
*/
public List finBySql(String sql, Object[] args, Class clz, boolean hasEntity);
public List findBySql(String sql, Object arg, Class clz, boolean hasEntity);
public List findBySql(String sql, Class clz, boolean hasEntity);
public List findBySql(String sql, Object[] args, Map alias, Class clz, boolean hasEntiry);
public List findBySql(String sql, Object arg, Map alias, Class clz, boolean hasEntiry);
public List findBySql(String sql, Map alias, Class clz, boolean hasEntiry);
}