hibernate根基dao类,hibernate底子dao

/***询问列表数据*@paramentity*@return*/publicListTfindList(Tentity){returndao.findList(entity);}dao.findList(entity):/***询问数据列表,若是需求分页,请设置分页对象,如:entity.setPage(newPageT(卡塔尔国卡塔尔国;*@paramentity*@return*/publicListTfindList(Tentity);

public interface BaseDao {
}

hibernate基础dao类,hibernate基础dao

效率:数据库的保存、更新、删除;sql、hql查询;分页查询;调用存款和储蓄进程

基础dao类,BaseDaoImpl.class

图片 1 1 import java.io.Serializable; 2 import java.sql.CallableStatement; 3 import java.sql.Connection; 4 import java.sql.ResultSet; 5 import java.sql.SQLException; 6 import java.text.MessageFormat; 7 import java.util.ArrayList; 8 import java.util.List; 9 import java.util.Map; 10 11 import org.hibernate.Criteria; 12 import org.hibernate.Query; 13 import org.hibernate.Session; 14 import org.hibernate.criterion.DetachedCriteria; 15 import org.hibernate.criterion.Projections; 16 import org.hibernate.jdbc.Work; 17 import org.springframework.orm.hibernate3.support.HibernateDaoSupport; 18 19 public class BaseDaoImpl<T extends Serializable> extends HibernateDaoSupport implements BaseDao<T>{ 20 public BaseDaoImpl(){ 21 super(); 22 } 23 24 /** 25 * 重回数据库session对象 26 * @return 27 */ 28 protected Session getCurrentSession(){ 29 return getHibernateTemplate().getSessionFactory().getCurrentSession(); 30 } 31 32 /** 33 * 保存实体对象 34 * @param entity 实体对象 35 */ 36 @Override 37 public void save(T entity){ 38 Session session = getCurrentSession(); 39 session.save(entity); 40 session.flush(); 41 session.evict(entity); 42 } 43 44 /** 45 * 更新实体对象 46 * @param 实体对象 47 */ 48 @Override 49 public void update(T entity){ 50 Session session = getCurrentSession(); 51 session.update(entity); 52 session.flush(); 53 session.evict(entity); 54 } 55 56 /** 57 * 保存或更新实体对象 58 * @param entity 实体对象 59 */ 60 @Override 61 public void saveOrUpdate(T entity) { 62 Session session = getCurrentSession(); 63 session.saveOrUpdate(entity); 64 session.flush(); 65 session.evict(entity); 66 } 67 68 /** 69 * 删除实体对象 70 * @param entity 实体对象 71 */ 72 @Override 73 public void delete(T entity){ 74 Session session = getCurrentSession(); 75 session.delete(entity); 76 session.flush(); 77 session.evict(entity); 78 } 79 80 /** 81 * 查询hql语句,重临独一结果 82 * @param hql 83 */ 84 @Override 85 public Object findUniqueResult(String hql){ 86 Query query = getCurrentSession().createQuery(hql); 87 return query.uniqueResult(); 88 } 89 90 /** 91 * 推行sql语句,更新数据库 92 * @param sql 93 */ 94 @Override 95 public void updateBySql(final String sql){ 96 getSession().doWork(new Work() { 97 @Override 98 public void execute(Connection connection) throws SQLException { 99 connection.prepareStatement(sql).executeUpdate(); 100 } 101 }); 102 } 103 104 /** 105 * 通过Criteria对象查询,再次回到实体对象结果集 106 * @param detachedCriteria 离线的Criteria对象 107 * @return 实体对象结果集 108 */ 109 @Override 110 public List findByCriteria(DetachedCriteria detachedCriteria){ 111 Criteria criteria = detachedCriteria.getExecutableCriteria(getCurrentSession()); 112 List records = criteria.list(); 113 return records; 114 } 115 116 /** 117 * 通过sql语句询问,重返map对象结果集 118 * @param sql 119 * @return map对象结果集 120 */ 121 @Override 122 public List<Map<String, Object>> findBySql(final String sql){ 123 final List<Map<String, Object>> result = new ArrayList<Map<String, Object>>(); 124 getSession().doWork(new Work() { 125 @Override 126 public void execute(Connection connection) throws SQLException { 127 ResultSet rs = connection.prepareStatement(sql).executeQuery(); 128 result.addAll(RsHelper.rSToList(rs)); 129 } 130 }); 131 return result; 132 } 133 134 /** 135 * 查询sql语句,再次来到独一结果 136 * @param sql 137 */ 138 @Override 139 public Object findUniqueResultBySql(String sql) { 140 return getCurrentSession().createSQLQuery(sql.toString()).uniqueResult(); 141 } 142 143 /** 144 * 通过Criteria对象查询,重临结果集的记录数 145 * @param detachedCriteria 离线的Criteria对象 146 * @return 结果集的记录数 147 */ 148 @Override 149 public long getCount(DetachedCriteria detachedCriteria) { 150 Criteria criteria = detachedCriteria.getExecutableCriteria(getCurrentSession()); 151 Object object = criteria.setProjection(Projections.rowCount()).uniqueResult(); 152 criteria.setProjection(null); 153 Long totalRow = Long.valueOf(String.valueOf(object)); 154 return totalRow; 155 } 156 157 /** 158 * 通过Criteria对象开展分页查询,再次来到实体对象结果集 159 * @param pageNum 第几页 160 * @param pageSize 每页大小 161 * @param detachedCriteria 离线的Criteria对象 162 * @return 实体对象结果集 163 */ 164 @Override 165 public List<T> findPage(int pageNum, int pageSize, 166 DetachedCriteria detachedCriteria){ 167 Criteria criteria = detachedCriteria.getExecutableCriteria(getCurrentSession()); 168 List<T> records = criteria.setFirstResult((pageNum-1) * pageSize).setMaxResults(pageSize).list(); 169 return records; 170 } 171 172 /** 173 * 通过sql语句,进行分页查询,重临分页对象 174 * @param pageNum 第几页 175 * @param pageSize 每页大小 176 * @param sql 177 * @return 分页对象 178 */ 179 @Override 180 public Pagination findPage(final int pageNum, final int pageSize,final String sql){ 181 final Pagination page = new Pagination(); 182 getSession().doWork(new Work() { 183 @Override 184 public void execute(Connection connection) throws SQLException { 185 String countSql = MessageFormat.format("select count(*) from ({0}) page", sql); 186 ResultSet rs = connection.prepareStatement(countSql).executeQuery(); 187 page.setTotal(Long.valueOf(RsHelper.getUniqueResult(rs).toString())); 188 189 long firstResult = (pageNum - 1)*pageSize; 190 String selectSql = MessageFormat.format("select * from ({0}) page limit {1},{2}", sql, firstResult, firstResult+pageSize); 191 page.setRows(RsHelper.rSToList(connection.prepareStatement(selectSql).executeQuery())); 192 } 193 }); 194 195 return page; 196 } 197 198 /** 199 * 调用存款和储蓄进度,再次回到单结果集 200 * @param proceName 存款和储蓄进程名称 201 * @param params 输入参数集结 202 * @return map对象结果集 203 */ 204 public List<Map<String, Object>> callProcedure(String proceName, final List<Object> params){ 205 final List<Map<String, Object>> result = new ArrayList<Map<String, Object>>(); 206 final StringBuffer sql = new StringBuffer(); 207 sql.append("{call " + proceName + "("); 208 for(int i=0; params!=null && i<params.size(); i++){ 209 sql.append("?"); 210 if(i+1!=params.size(卡塔尔国卡塔尔(قطر‎ 211 sql.append(","卡塔尔(قطر‎; 212 } 213 sql.append("卡塔尔}"State of Qatar; 214 getSession(卡塔尔(قطر‎.doWork(new Work(卡塔尔 { 215 @Override 216 public void execute(Connection connection卡塔尔 throws SQLException { 217 CallableStatement statement = connection.prepareCall( 218 sql.toString(State of Qatar卡塔尔; 219 for(int i=0; i<params.size(卡塔尔(قطر‎; i++卡塔尔(قطر‎{ 220 statement.setObject(i+1, params.get(i卡塔尔国State of Qatar;//设置参数 221 } 222 223 result.addAll(HighlandersHelper.rSToList(statement.executeQuery(卡塔尔卡塔尔卡塔尔; 224 } 225 }State of Qatar; 226 227 return result; 228 } 229 230 } View Code

 

基础dao类接口,BaseDao.class

图片 2 1 import java.io.Serializable; 2 import java.util.List; 3 import java.util.Map; 4 5 import org.hibernate.criterion.DetachedCriteria; 6 7 /** 8 * 统一数据访谈接口 9 */ 10 public interface BaseDao<T extends Serializable> { 11 12 /** 13 * 保存实体对象 14 * @param entity 实体对象 15 */ 16 public void save(T entity); 17 18 /** 19 * 更新实体对象 20 * @param 实体对象 21 */ 22 public void update(T entity); 23 24 /** 25 * 保存或更新实体对象 26 * @param entity 实体对象 27 */ 28 public void saveOrUpdate(T entity); 29 30 /** 31 * 删除实体对象 32 * @param entity 实体对象 33 */ 34 public void delete(T entity); 35 36 /** 37 * 查询hql语句,重临独一结果 38 * @param hql 39 */ 40 public Object findUniqueResult(String hql); 41 42 /** 43 * 实施sql语句,更新数据库 44 * @param sql 45 */ 46 public void updateBySql(String sql); 47 48 /** 49 * 通过Criteria对象查询,重返实体对象结果集 50 * @param detachedCriteria 离线的Criteria对象 51 * @return 实体对象结果集 52 */ 53 public List findByCriteria(DetachedCriteria detachedCriteria); 54 55 /** 56 * 通过sql语句询问,重回map对象结果集 57 * @param sql 58 * @return map对象结果集 59 */ 60 public List<Map<String, Object>> findBySql(String sql); 61 62 /** 63 * 查询sql语句,再次来到独一结果 64 * @param sql 65 */ 66 public Object findUniqueResultBySql(String sql); 67 68 /** 69 * 通过Criteria对象查询,重返结果集的笔录数 70 * @param detachedCriteria 离线的Criteria对象 71 * @return 结果集的笔录数 72 */ 73 public long getCount(DetachedCriteria detachedCriteria); 74 75 /** 76 * 通过Criteria对象进行分页查询,再次来到实体对象结果集 77 * @param pageNum 第几页 78 * @param pageSize 每页大小 79 * @param detachedCriteria 离线的Criteria对象 80 * @return 实体对象结果集 81 */ 82 public List<T> findPage(int pageNum, int pageSize, DetachedCriteria detachedCriteria); 83 84 /** 85 * 通过sql语句,实行分页查询,重回分页对象 86 * @param pageNum 第几页 87 * @param pageSize 每页大小 88 * @param sql 89 * @return 分页对象 90 */ 91 public Pagination findPage(int pageNum, int pageSize, String sqlState of Qatar; // 查找分页对象列表 92 93 /** 94 * 调用存款和储蓄进度,重回单结果集 95 * @param proceName 存款和储蓄进程名称 96 * @param params 输入参数会集 97 * @return map对象结果集 98 */ 99 public List<Map<String, Object>> callProcedure(String proceName, final List<Object> params); 100 } View Code

 

数据库结果集扶助器,GL450sHelper.class  

图片 3 1 import java.sql.ResultSet; 2 import java.sql.ResultSetMetaData; 3 import java.sql.SQLException; 4 import java.util.ArrayList; 5 import java.util.Collections; 6 import java.util.HashMap; 7 import java.util.List; 8 import java.util.Map; 9 10 /** 11 * 数据库结果集帮忙器 12 */ 13 public class RsHelper { 14 /** 15 * 再次来到结果集中的独一结果,未有则赶回null 16 * @param rs 结果集 17 * @return 18 * @throws SQLException 19 */ 20 public static Object getUniqueResult(ResultSet rs) throws SQLException{ 21 if(rs.next()) { 22 return rs.getObject(1); 23 } 24 return null; 25 } 26 27 /** 28 * 将实体结果集对象调换为map对象结果集 29 * @param rs 实体结果集对象 30 * @return map对象结果集 31 * @throws SQLException 32 */ 33 public static List<Map<String,Object>> rSToList(ResultSet rs) throws SQLException { 34 if (rs == null) 35 return Collections.EMPTY_LIST; 36 ResultSetMetaData md = rs.getMetaData(卡塔尔国; //获得结果集(rsState of Qatar的协会新闻,比方字段数、字段名等 37 int columnCount = md.getColumnCount(State of Qatar; //重临此 ResultSet 对象中的列数 38 List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(卡塔尔国; 39 Map<String,Object> rowData = new HashMap<String,Object>(卡塔尔(قطر‎; 40 while (rs.next(State of Qatar卡塔尔(قطر‎ { 41 rowData = new HashMap<String,Object>(columnCountState of Qatar; 42 for (int i = 1; i <= columnCount; i++卡塔尔 { 43 rowData.put(md.getColumnName(i卡塔尔(قطر‎, rs.getObject(i卡塔尔(قطر‎卡塔尔(قطر‎; 44 } 45 list.add(rowData卡塔尔; 46 } 47 return list; 48 } 49 } View Code

 

分页对象类,Pagination.class

图片 4 1 import java.util.ArrayList; 2 import java.util.List; 3 4 /** 5 * 分页对象,通常用于响应页面央浼 6 */ 7 public class Pagination { 8 /** 9 * 总记录数 10 */ 11 private Long total = 0l; 12 13 /** 14 * 记录集结 15 */ 16 private List rows = new ArrayList(); 17 18 public Long getTotal() { 19 return total; 20 } 21 public void setTotal(Long total) { 22 this.total = total; 23 } 24 25 public List getRows() { 26 return rows; 27 } 28 public void setRows(List rows) { 29 this.rows = rows; 30 } 31 } View Code

 

作用:数据库的保留、更新、删除;sql、hql查询;分页查询;调用存款和储蓄进程功底dao类,BaseDaoImpl.class 1 im...

    /**
     * 数据插入从前
     */
    public abstract void preInsert();
    
    /**
     * 更新数据从前
     */
    public abstract void preUpdate();
    
       /**
     * 是还是不是是新记录(暗许:false)
        */
    public boolean getIsNewRecord() {
        return isNewRecord || StringUtils.isBlank(getId());
    }

    /**
     * 获取单条数据
     * @param id
     * @return
     */
    public T get(String id);
    
    /**
     * 获取单条数据
     * @param entity
     * @return
     */
    public T get(T entity);
    
    /**
     * 查询数据列表,假若须要分页,请设置分页对象,如:entity.setPage(new Page<T>(卡塔尔(قطر‎卡塔尔国;
     * @param entity
     * @return
     */
    public List<T> findList(T entity);
    
    /**
     * 查询全数数据列表
     * @param entity
     * @return
     */
    public List<T> findAllList(T entity);
    
    /**
     * 查询全体数据列表
     * @see public List<T> findAllList(T entity)
     * @return
     */
    @Deprecated
    public List<T> findAllList();
    
    /**
     * 插入数据
     * @param entity
     * @return
     */
    public int insert(T entity);
    
    /**
     * 更新数据
     * @param entity
     * @return
     */
    public int update(T entity);
    
    /**
     * 删除数据
     * @param id
     * @see public int delete(T entity)
     * @return
     */
    @Deprecated
    public int delete(String id);
    
    /**
     * 删除数据
     * @param entity
     * @return
     */
    public int delete(T entity);
    
}

    /**
     * 是或不是插入新记录
     */
    protected boolean isNewRecord = false;

小说内容不写太多,希望大家能够明白每三个知识点,幼功的CRUD,BASE的包裹差不离都在那,后边会继续补充,具体的事务和得以达成前边会讲课到。

 2. BaseDao的基础封装(这些相当的轻松,因为使用的是mybatis集成方案,只供给保留接口就可以),代码如下:

接待大家跟作者四只读书《创设dubbo布满式平台》,希望大家不断关切前边的篇章!

/**
 * DAO幼功封装
 */
public interface CrudDao<T> extends BaseDao {