一个泛型Hibernate DAO实现

HibernateDaoSupport二次封装组件,快速统计和查询,修改 HibernateDaoSupport二次封装组件,快速统计和查询,修改,删除,并且对SQL语句的in,or,exitsts都有涉及 立即下载
自己四处参考,写写抄抄折腾出来的一个泛型Hibernate DAO,用了Spring的HibernateDaoSupport。提供基本的CRUD操作,支持分页查询,可使用HQL、Criteria和DetachedCriteria。
废话不说了,上代码

package sgf4web.dao;

import java.io.Serializable;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.hibernate.*;
import org.hibernate.criterion.*;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import sgf4web.dao.support.PaginationSupport;
import sgf4web.util.GenericsUtils;

/**
 * 泛型Hibernate DAO类
 * 
 * 
@author DigitalSonic
 
*/

@SuppressWarnings(
"unchecked")
public class HibernateGenericDao<T, ID extends Serializable> extends HibernateDaoSupport {
    
private Class<T> pojoClass;
    
    
/**
     * 初始化DAO,获取POJO类型
     
*/

    
public HibernateGenericDao() {
//        this.pojoClass = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
        this.pojoClass = GenericsUtils.getSuperClassGenricType(getClass());
    }

    
    
/**
     * 获得该DAO对应的POJO类型
     
*/

    
public Class<T> getPojoClass() {
        
return this.pojoClass;
    }

    
    
/**
     * 获得该DAO对应的POJO类型名
     
*/

    
public String getPojoClassName() {
        
return getPojoClass().getName();
    }


    
//加载对象
    
    
/**
     * 加载所有的对象
     
*/

    
public List<T> loadAll() {
        
return (List<T>)getHibernateTemplate().loadAll(getPojoClass());
    }

    
    
/**
     * 根据hql查询
     *
     * 
@param values 可变参数
     
*/

    
public List find(String hql, Object... values) {
        
return getHibernateTemplate().find(hql, values);
    }


    
/**
     * 根据条件加载对象
     * 
     * 
@param criteria Criteria实例
     
*/

    
public List<T> findByCriteria(final Criteria criteria) {
        List list 
= criteria.list(); 
        
return transformResults(list);
    }

    
    
/**
     * 根据条件加载对象
     * 
@param detachedCriteria DetachedCriteria实例
     
*/

    
public List<T> findByCriteria(final DetachedCriteria detachedCriteria) {
        
return (List<T>) getHibernateTemplate().execute(new HibernateCallback() {
               
public Object doInHibernate(Session session) throws HibernateException {
                   Criteria criteria 
= detachedCriteria.getExecutableCriteria(session);
                   List list 
= criteria.list(); 
                   
return transformResults(list); 
               }

           }
, true);
    }

    
    
/**
     * 根据给定的实例查找对象
     
*/

    
public List<T> findByExample(T instance) {
        List
<T> results = (List<T>)getHibernateTemplate().findByExample(instance);
        
return results;
    }
    
    
    
/**
     * 根据ID查找对象
     
*/

    
public T findById(ID id) {
        
return (T) getHibernateTemplate().get(getPojoClassName(), id);
    }

    
    
/**
     * 根据某个具体属性进行查找
     
*/

    
public List<T> findByProperty(String propertyName, Object value) {
       String queryString 
= "from " + getPojoClassName() + " as model where model." 
                               
+ propertyName + "= ?";
       
return (List<T>)getHibernateTemplate().find(queryString, value);
    }

    
    
//新建、修改、删除
    
    
/**
     * 新建对象实例化
     
*/

    
public ID save(T transientInstance) {
        
return (ID)getHibernateTemplate().save(transientInstance);
    }

    
    
/**
     * 更新已存在的对象
     
*/

    
public void update(T transientInstance) {
        getHibernateTemplate().update(transientInstance);
    }

    
    
/**
     * 删除指定ID的对象
     
*/

    
public void delete(ID id) {
           T instance 
= findById(id);
           
if (instance != null)
               getHibernateTemplate().delete(instance);
    }

    
    
/**
     * 删除指定对象
     
*/

    
public void delete(T persistentInstance) {
        getHibernateTemplate().delete(persistentInstance);
    }
    
    
    
//分页
    /**
     * 根据Criteria加载分页,指定页大小和起始位置
     
*/

    
public PaginationSupport findPageByCriteria(final Criteria criteria, final int pageSize, final int startIndex) {   
        
int totalCount = getCountByCriteria(criteria);   
        criteria.setProjection(
null);
        List items 
= criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();
        items 
= transformResults(items);
        PaginationSupport ps 
= new PaginationSupport(items, totalCount, pageSize, startIndex);
        
return ps;
    }

    
    
/**
     * 根据Criteria加载分页,默认页大小,从第0条开始
     
*/

    
public PaginationSupport findPageByCriteria(final Criteria criteria) {   
        
return findPageByCriteria(criteria, PaginationSupport.PAGESIZE, 0);   
    }
   
 
    
/**
     * 根据Criteria加载分页,默认页大小,从第startIndex条开始
     
*/

    
public PaginationSupport findPageByCriteria(final Criteria criteria, final int startIndex) {   
        
return findPageByCriteria(criteria, PaginationSupport.PAGESIZE, startIndex);   
    }

    
    
/**
     * 根据Criteria统计总数
     
*/

    
public int getCountByCriteria(final Criteria criteria) {   
        Integer count 
= (Integer) criteria.setProjection(Projections.rowCount()).uniqueResult();    
        
return count.intValue();   
    }

    
    
/**
     * 根据DetachedCriteria加载分页,指定页大小和起始位置
     
*/

    
public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria, final int pageSize, final int startIndex) {   
        
return (PaginationSupport) getHibernateTemplate().execute(new HibernateCallback() {   
            
public Object doInHibernate(Session session) throws HibernateException {   
                Criteria criteria 
= detachedCriteria.getExecutableCriteria(session);
                
int totalCount = ((Integer) criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue();   
                criteria.setProjection(
null);
                List items 
= criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();
                items 
= transformResults(items);
                PaginationSupport ps 
= new PaginationSupport(items, totalCount, pageSize, startIndex);   
                
return ps;   
            }

        }
, true);   
    }

    
    
/**
     * 根据DetachedCriteria加载分页,默认页大小,从第0条开始
     
*/

    
public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria) {   
        
return findPageByCriteria(detachedCriteria, PaginationSupport.PAGESIZE, 0);   
    }
   
  
    
/**
     * 根据DetachedCriteria加载分页,默认页大小,从第startIndex条开始
     
*/

    
public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria, final int startIndex) {   
        
return findPageByCriteria(detachedCriteria, PaginationSupport.PAGESIZE, startIndex);   
    }
 
    
    
/**
     * 根据DetachedCriteria统计总数
     
*/

    
public int getCountByCriteria(final DetachedCriteria detachedCriteria) {   
        Integer count 
= (Integer) getHibernateTemplate().execute(new HibernateCallback() {   
            
public Object doInHibernate(Session session) throws HibernateException {   
                Criteria criteria 
= detachedCriteria.getExecutableCriteria(session);   
                
return criteria.setProjection(Projections.rowCount()).uniqueResult();   
            }
   
        }
, true);   
        
return count.intValue();   
    }
 
    
    
/**
     * 根据hql加载分页,指定页大小和起始位置
     
*/

    
public PaginationSupport findPageByQuery(final String hql, final int pageSize, final int startIndex, Object...values) {
        
int totalCount = getCountByQuery(hql, values);
        
        
if (totalCount < 1)
            
return new PaginationSupport(new ArrayList(0), 0);

        Query query 
= createQuery(hql, values);
        List items 
= query.setFirstResult(startIndex).setMaxResults(pageSize).list();
        PaginationSupport ps 
= new PaginationSupport(items, totalCount, pageSize, startIndex);
        
return ps;
    }

    
    
/**
     * 根据hql加载分页,默认页大小,从第0条开始
     
*/

    
public PaginationSupport findPageByQuery(final String hql, Object...values) {   
        
return findPageByQuery(hql, PaginationSupport.PAGESIZE, 0, values);   
    }
   
 
    
/**
     * 根据hql加载分页,默认页大小,从第startIndex条开始
     
*/

    
public PaginationSupport findPageByQuery(final String hql, final int startIndex, Object...values) {   
        
return findPageByQuery(hql, PaginationSupport.PAGESIZE, startIndex, values);  
    }

    
    
/**
     * 根据hql统计总数
     
*/

    
public int getCountByQuery(final String hql, Object...values) {   
        String countQueryString 
= " select count (*) " + removeSelect(removeOrders(hql));
        List countlist 
= getHibernateTemplate().find(countQueryString, values);
        
return (Integer) countlist.get(0);
    }

    
    
//创建Criteria和Query
    
    
/**
     * 创建Criteria对象
     *
     * 
@param criterions 可变的Restrictions条件列表
     
*/

    
public Criteria createCriteria(Criterion...criterions) {
        Criteria criteria 
= getSession().createCriteria(getPojoClass());
        
for (Criterion c : criterions)
            criteria.add(c);
        
return criteria;
    }


    
/**
     * 创建Criteria对象,带排序字段与升降序字段
     
*/

    
public Criteria createCriteria(String orderBy, boolean isAsc, Criterion...criterions) {
        Criteria criteria 
= createCriteria(criterions);
        
if (isAsc)
            criteria.addOrder(Order.asc(orderBy));
        
else
            criteria.addOrder(Order.desc(orderBy));
        
return criteria;
    }

    
    
/**
     * 方法取自SpringSide.
     * 创建Query对象. 对于需要first,max,fetchsize,cache,cacheRegion等诸多设置的函数,可以在返回Query后自行设置.
     * 留意可以连续设置,如下:
     * <pre>
     * dao.getQuery(hql).setMaxResult(100).setCacheable(true).list();
     * </pre>
     * 调用方式如下:
     * <pre>
     *        dao.createQuery(hql)
     *        dao.createQuery(hql,arg0);
     *        dao.createQuery(hql,arg0,arg1);
     *        dao.createQuery(hql,new Object[arg0,arg1,arg2])
     * </pre>
     *
     * 
@param values 可变参数.
     
*/

    
public Query createQuery(String hql, Object... values) {
        Query query 
= getSession().createQuery(hql);
        
for (int i = 0; i < values.length; i++) {
            query.setParameter(i, values[i]);
        }

        
return query;
    }

    
    
/**
     * 方法取自SpringSide.
     * 去除hql的select子句,未考虑union的情况
     
*/

    
private static String removeSelect(String hql) {
        
int beginPos = hql.toLowerCase().indexOf("from");
        
return hql.substring(beginPos);
    }


    
/**
     * 方法取自SpringSide.
     * 去除hql的orderby子句
     
*/

    
private static String removeOrders(String hql) {
        Pattern p 
= Pattern.compile("order/s*by[/w|/W|/s|/S]*", Pattern.CASE_INSENSITIVE);
        Matcher m 
= p.matcher(hql);
        StringBuffer sb 
= new StringBuffer();
        
while (m.find()) {
            m.appendReplacement(sb, 
"");
        }

        m.appendTail(sb);
        
return sb.toString();
    }

    
    
/**
     * 将联合查询的结果内容从Map或者Object[]转换为实体类型,如果没有转换必要则直接返回
     
*/

    
private List transformResults(List items) {
        
if (items.size() > 0) {
            
if (items.get(0) instanceof Map) {
                ArrayList list 
= new ArrayList(items.size());
                
for (int i = 0; i < items.size(); i++) {
                    Map map 
= (Map)items.get(i);
                    list.add(map.get(CriteriaSpecification.ROOT_ALIAS));
                }

                
return list;
            }
 else if (items.get(0) instanceof Object[]) {
                ArrayList list 
= new ArrayList(items.size());
                
int pos = 0;
                
for (int i = 0; i < ((Object[])items.get(0)).length; i++) {
                    
if (((Object[])items.get(0))[i].getClass() == getPojoClass()) {
                        pos 
= i;
                        
break;
                    }

                }

                
for (int i = 0; i < items.size(); i++) {
                    list.add(((Object[])items.get(i))[pos]);
                }

                
return list;
            }
 else
                
return items;
        }
 else
            
return items;
    }

}

package sgf4web.util;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * 泛型参数辅助类
 * 
 * 
@author DigitalSonic
 
*/

@SuppressWarnings(
"unchecked")
public class GenericsUtils {
    
/**
     * 通过反射,获得定义Class时声明的父类的第一个范型参数的类型。
     
*/

    
public static Class getSuperClassGenricType(Class clazz) {
        
return getSuperClassGenricType(clazz, 0);
    }

    
    
/**
     * 通过反射,获得定义Class时声明的父类的范型参数的类型。
     * 如没有找到符合要求的范型参数,则递归向上直到Object。
     *
     * 
@param clazz 要进行查询的类
     * 
@param index 如有多个范型声明该索引从0开始
     * 
@return 在index位置的范型参数的类型,如果无法判断则返回<code>Object.class</code>
     
*/

    
public static Class getSuperClassGenricType(Class clazz, int index) {
        
boolean flag = true;
        Type genType 
= clazz.getGenericSuperclass();
        Type[] params 
= null;
        
        
if (!(genType instanceof ParameterizedType))
            flag 
= false;
        
else {
            params 
= ((ParameterizedType) genType).getActualTypeArguments();
            
if (index >= params.length || index < 0)
                flag 
= false;
            
if (!(params[index] instanceof Class))
                flag 
= false;
        }

        
if (!flag) {
            clazz 
= clazz.getSuperclass();
            
if (clazz == Object.class)
                
return Object.class;
            
else
                
return getSuperClassGenricType(clazz, index);
        }

        
        
return (Class) params[index];
    }

}



package sgf4web.dao.support;

import java.util.List;

/**
 * 分页类,参考自JavaEye及SpringSide
 
*/

@SuppressWarnings(
"unchecked")
public class PaginationSupport {
    
public final static int PAGESIZE = 10;

    
private int pageSize = PAGESIZE;

    
private List items;

    
private int totalCount;

    
private int[] indexes = new int[0];

    
private int startIndex = 0;

    
public PaginationSupport(List items, int totalCount) {
        setPageSize(PAGESIZE);
        setTotalCount(totalCount);
        setItems(items);
        setStartIndex(
0);
    }


    
public PaginationSupport(List items, int totalCount, int startIndex) {
        setPageSize(PAGESIZE);
        setTotalCount(totalCount);
        setItems(items);
        setStartIndex(startIndex);
    }


    
public PaginationSupport(List items, int totalCount, int pageSize, int startIndex) {
        setPageSize(pageSize);
        setTotalCount(totalCount);
        setItems(items);
        setStartIndex(startIndex);
    }


    
/**
     * 将页码转换为列表的startIndex,页大小为默认大小
     
*/

    
public static int convertFromPageToStartIndex(int pageNo) {
        
return (pageNo - 1) * PAGESIZE;
    }

    
    
/**
     * 将页码转换为列表的startIndex
     
*/

    
public static int convertFromPageToStartIndex(int pageNo, int pageSize) {
        
return (pageNo - 1) * pageSize;
    }


    
public List getItems() {
        
return items;
    }


    
public void setItems(List items) {
        
this.items = items;
    }


    
public int getPageSize() {
        
return pageSize;
    }


    
public void setPageSize(int pageSize) {
        
this.pageSize = pageSize;
    }


    
public int getTotalCount() {
        
return totalCount;
    }


    
/**
     * 设置数据总数,并计算各页起始位置
     
*/

    
public void setTotalCount(int totalCount) {
        
if (totalCount > 0) {
            
this.totalCount = totalCount;
            
int count = totalCount / pageSize;
            
if (totalCount % pageSize > 0)
                count
++;
            indexes 
= new int[count];
            
for (int i = 0; i < count; i++) {
                indexes[i] 
= pageSize * i;
            }

        }
 else {
            
this.totalCount = 0;
        }

    }


    
public int[] getIndexes() {
        
return indexes;
    }


    
public void setIndexes(int[] indexes) {
        
this.indexes = indexes;
    }


    
public int getStartIndex() {
        
return startIndex;
    }


    
/**
     * 设置当前起始位置
     
*/

    
public void setStartIndex(int startIndex) {
        
if (totalCount <= 0)
            
this.startIndex = 0;
        
else if (startIndex >= totalCount)
            
this.startIndex = indexes[indexes.length - 1];
        
else if (startIndex < 0)
            
this.startIndex = 0;
        
else {
            
this.startIndex = indexes[startIndex / pageSize];
        }

    }


    
/**
     * 获得下页起始位置
     
*/

    
public int getNextIndex() {
        
int nextIndex = getStartIndex() + pageSize;
        
if (nextIndex >= totalCount)
            
return getStartIndex();
        
else
            
return nextIndex;
    }


    
/**
     * 获得上页起始位置
     
*/

    
public int getPreviousIndex() {
        
int previousIndex = getStartIndex() - pageSize;
        
if (previousIndex < 0)
            
return 0;
        
else
            
return previousIndex;
    }


    
/**
     * 取总页数.
     
*/

    
public long getTotalPageCount() {
        
if (totalCount % pageSize == 0)
            
return totalCount / pageSize;
        
else
            
return totalCount / pageSize + 1;
    }


    
/**
     * 取该页当前页码,页码从1开始.
     
*/

    
public long getCurrentPageNo() {
        
return startIndex / pageSize + 1;
    }


    
/**
     * 该页是否有下一页.
     
*/

    
public boolean hasNextPage() {
        
return this.getCurrentPageNo() < this.getTotalPageCount() - 1;
    }


    
/**
     * 该页是否有上一页.
     
*/

    
public boolean hasPreviousPage() {
        
return this.getCurrentPageNo() > 1;
    }

}
Vivado新手避坑指南:搞懂Generate Output Products和Create HDL Wrapper到底在干啥 本文深入解析Vivado设计流程中的Generate Output Products和Create HDL Wrapper两大关键步骤,帮助新手理解其核心功能与操作要点。通过详细讲解文件生成类型、关键选项设置及常见问题解决方案,指导开发者正确使用这两个功能,避免设计流程中的常见错误,提高FPGA开发效率。 阅读详情

相关推荐

ADS谐波平衡仿真自动优化报错?三步搞定HB控件设置(附常见错误排查)

本文针对ADS谐波平衡仿真在自动优化中常见的报错问题,提供了三步核心排查法。首先检查并禁用HB控件中可能导致冲突的小信号仿真模式,其次合理化仿真频率与扫描参数设置,最后审视优化变量与目标的定义。通过精准配置HB控件以适配自动优化流程,能有效解决大多数仿真失败问题,确保非线性电路设计顺利进行。

c2d3e4f的博客 789

Hibernate 查询数据库有数据,但hibernate返回null

1:Hibernate 查询异常 ssh查询无数据不会报错,有数据控制台无报错,dubug进去报空指针, 如图: sql语句可以查出数据但是java数据中有的为null sql语句直接在数据库查询有结果,在程序中无报错不展示,耗费了时间,最终解决, 修改数据库字段id字段,赋值后解决,程序查询出结果, 原因:Hibernate 查询配置了某些字段不能为空,为空则异常 参考 https://blog.youkuaiyun.com/fireofjava/article/details/23757657 ...

kang1011的博客 2731

告别有线:用PVE直通无线网卡,打造一台真正的‘无线’Win10软路由/测试机

本文详细介绍了如何通过PVE直通无线网卡技术,构建全无线Win10软路由或测试机。从硬件选型、PVE环境配置到PCIe和USB双模直通技术,逐步指导实现Wi-Fi AP和蓝牙连接功能,为家庭实验室和小型办公环境提供灵活高效的网络解决方案。

weixin_28683689的博客 586

[Hibernate] - Generic Dao

使用泛型写了一个通用的Hibernate DAO类。 GenericDao接口 package com.my.dao; import java.io.Serializable; import java.util.List; /** * Generic DAO interface * @author Robin * * @param <...

weixin_30565327的博客 148

自学PCB思路 | PCB设计零基础入门-小白适用(附详细入门经验分享)

本人大一在实践课上就听说PCB,被虎的一楞一楞的,不过现在回看,发现其实并没有相信的那么难!想着把自己这一路摸索的学习路线分享一下,当时我是一边摸索一边上手,一把鼻涕一把泪的过来的。如果你想搞硬件或者需要搞硬件,下面是我的入门学习过程,希望可以帮到你。目录前言选择一款设计软件好的入门课程掌握抄板元件采购焊板子烙铁头热风枪自己半设计明确设计需求全设计最后我并非什么大佬,也没法自己去教大家如何画板。

自动化小秋葵的博客 1万+

网课、网页视频倍速播放简单脚本

一个简单的网页视频倍速脚本

huazn612的博客 1万+

HibernateDao层逻辑

package com.idoo.iosms.core.hibernate.hibernate; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUti

okkeqin的专栏 1932

Python解析骑行fit文件:从数据缺失到完整记录

本文详细介绍了如何利用Python解析和处理骑行FIT文件,解决数据缺失问题。通过使用fitparse库读取二进制FIT文件,并结合Garmin FitCSVTool进行格式转换,指导读者一步步诊断数据完整性、设计心率修补方案,并最终生成完整的骑行记录文件。该方法为骑行爱好者提供了灵活的数据修复与自定义分析能力。

weixin_29062255的博客 456

Hibernate分页查询

通常使用的Hibernate通常是三种:hql查询,QBC查询和QBE查询:1、QBE(Qurey By Example)检索方式QBE是最简单的,但是功能也是最弱的,QBE的功能不是特别强大,仅在某些场合下有用。一个典型的使用场合就是在查询窗口中让用户输入一系列的查询条件,然后返回匹配的对象。QBE只支持=和like比较运算符,无法不大区间值,及其或的匹配。在这种情况下,还是采用HQL检索方...

thewebcode 225

直流无刷电机FOC控制算法 理论到实践 —— 实践

关于直流无刷电机FOC控制算法的理论章节,本人已经在前两章进行过详细说明,大家可以自行进行阅读,请务必了解过理论之后再来学习如何具体进行实现。直流无刷电机FOC控制算法 理论到实践 —— 理论(一)直流无刷电机FOC控制算法 理论到实践 —— 理论(二)本章节主要讨论采用MCU微控制器如何具体实现直流无刷电机的FOC控制。

爱出名的狗腿子 1万+

详解Xilinx FPGA高速串行收发器GTX/GTP(1)--SerDes和GTX的关系

详解Xilinx FPGA高速串行收发器GTX/GTP(1)--SerDes和GTX的关系

孤独的单刀 4350

dao层用Hibernate 查询 返回null无值、并且控制台没有输出SQL日志,也没有报任何异常

最近搭建了一个SpringMVC3.2+Hibernate+JDBC+Spring security3.2 的项目,全注解模式,遇到一个很二的问题。  问题现象是:1. 登陆时验证用户时,查询不到对应的User,返回null,但数据库里肯定是有这个User的。 2.控制台也没有输出Hibernate相关SQL日志 通过Debug 看,发现返回User确实是Null啊。         关键

JimBo3693的专栏 3038

深水区探秘:小红书App x-s参数逆向与高并发爬虫实战(2026版)

在移动互联网的碎片化时代,小红书凭借其“社区+电商”的独特模式,积累了超过3亿月活用户。其内容生态覆盖了从美妆、穿搭到旅行、数码等几乎所有垂直领域。对于数据分析师、市场研究员以及AI算法工程师而言,小红书平台蕴含的价值是巨大的——无论是热门趋势洞察、KOL画像分析,还是多模态图文数据的采集。然而,想要高效、稳定地获取小红书App的公开数据,却并非易事。与Web端相比,小红书App的防护体系堪称“铜墙铁壁”。其核心的反爬机制建立在动态混淆的加密参数之上,尤其是请求头中的X-SX-T以及X-S-Common。

2201_76125261的博客 263

[转]一个泛型Hibernate DAO实现

java 代码 package sgf4web.dao;       import java.io.Serializable;    import java.util.*;    import java.util.regex.Matcher;    import java.util.regex.Pattern;       im...

feigme H.Guo的专栏 146

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

一个简单的Hibernate泛型Dao的实现 ---- 20160624

项目中用到的简单的泛型Dao的实现。Mark一下,以后可以适当修改以后直接使用。

Simon_9527的博客 194

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

泛型 DAO 的基础CRUD

对于大多数开发人员,为系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复标识为 “代码味道”,但我们大多数都已经学会忍受它。其实有解决方案。可以使用许多 ORM 工具来避免代码重复。例如,使用 Hibernate,您可以简单地为所有的持久域对象直接使用会话操作。这种方法的缺点是损失了类型安全。 为什么您要为数据访问代码提供类型安全接口?我会争辩说,当它

Kei's Blog 1918

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

JPA的泛型DAO设计及使用

使用如Hibernate或者JPA作为持久化的解决方案时,设计一个泛型的DAO抽象父类可以方便各个实体的通用CRUD操作。由于此时大部分实体DAO的CRUD操作基本一样,采用泛型设计解决这个问题,带来了简洁代码的好处。 问题的关键在于我们需要在代码中获取抽象DAO父类(BaseEntityDAOImpl<T>)中的泛型信息。 由于Java的泛型是基于泛型擦除实现的,因...

banglaiqi4707的博客 821

泛型 Hibernate DAO 例

泛型 Hibernate DAO 例import java.io.Serializable;import java.util.List;public interface GenericDAO {  List findAll();  T persist(T entity);  void remove(T entity);}=========import java.io.Ser

飒龙的专栏 770

一个好用的hibernate泛型dao

以前从springside2.0上搞下来的很好用的,基本实现dao零编码只要配置xml文件就行了。 先看图: 一共4层,com.demonstration.hibernate.basedao是我加的用来进一步解耦hibernate和spring的耦合。 原来的官方解释如下: SpringSide对Hibernate做了三层封装: 第一层:HibernateGenericDao,基于s

Aries的专栏 996

开发积累—泛型工具类

前言:使用SSH2中使用的泛型工具类,以前写泛型比较麻烦。今天收集到一个工具类,好东呀!!分享给大家,绝对有用。JAVA版的web应用程序使用。

好刹那的专栏 2297

java 泛型 重构_对Java泛型的简单理解,并对Hibernate Dao重构

引用维基百科的定义:泛型的定义主要有以下两种:在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象。(这是当今较常见的定义)在程序编码中一些包含参数的类。其参数可以代表类或对象等等。(现在人们大多把这称作模板)泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。泛型只不过是java中的类型而已,继承自Type接口。 泛型的意义...

weixin_30895059的博客 184

java 泛型的 设置值、取值

public abstract class DaoSupportImpl implements DaoSupport { @Resource private SessionFactory sessionFactory; private Class clazz; public DaoSupportImpl() { // 使用反射技术得到T的真实类型 ParameterizedTy

LzwGlory的专栏 8029

基于hibernate的泛型dao实现

我们在进行hibernate开发时,因为hibernate是基于对象的ORM,所以由此我们可以在hibernate的基础上在做一层封装,从而大大简化我们的DAO层代码。 首先封装一个分页工具类:Pager<T> public class Pager<T> { private int offset; private int pagesize; private L...

tonysong111073的专栏 279

不要重复DAO!使用Hibernate 和Spring AOP 构建泛型类型安全的DAO

对于大多数开发人员,为系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复标识为 “代码味道”,但我们大多数都已经学会忍受它。其实有解决方案。可以使用许多 ORM 工具来避免代码重复。例如,使用 Hibernate,您可以简单地为所有的持久域对象直接使用会话操作。这种方法的缺点是损失了类型安全。 为什么您要为数据访问代码提供类型安全接口?我会争辩说,当它与现...

zhangziyangup 117
上一篇: 原来我也会写文档
下一篇: 一个泛型Hibernate DAO实现
dingx
博客等级 码龄24年 67粉丝 112原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值