一个泛型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;
    }

}
deap数据集的情绪检测代码环境搭建与实现 deap数据数据集很大 阅读详情

相关推荐

UE5.3像素流送Docker化部署:从Linux服务器搭建到云端实时渲染

本文详细介绍了在Linux服务器上使用Docker容器化部署UE5.3像素流送服务的完整流程。通过将虚幻引擎运行时、信令服务器和TURN服务打包为标准化镜像,利用Docker Compose进行编排,实现了云端实时渲染应用的快速部署、环境一致与弹性扩展,有效解决了传统部署中的环境依赖与运维难题。

k0l1m2n3o的博客 200

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

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

kang1011的博客 2731

Anomalib实战:5分钟搞定图像异常检测模型训练(附完整代码)

本文提供了一份基于Anomalib框架的图像异常检测快速实战指南。文章详细介绍了从环境搭建、数据准备到模型训练与推理的完整流程,重点推荐了训练速度快、效果稳定的PatchCore模型,并附带了可运行的完整代码,旨在帮助开发者快速上手工业质检等实际应用。

weixin_29039773的博客 421

[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

4相5线步进电机驱动原理

步进电机驱动

while(1) 3万+

稀疏数据分析:马蹄估计量及其理论性质

稀疏数据分析:马蹄估计量及其理论性质基本框架half-Cauchy分布为什么它叫马蹄估计量后验均值、shrinkage与κ\kappaκθ\thetaθ的边缘先验分布的阶马蹄估计的一致性收敛速率Clarke-Barron(1990)引理马蹄估计的最优收敛速率 这是对The horseshoe estimator for sparse signal这篇论文的回顾,这篇论文在Modern Bayesian statistics与Bayesian Machine Learning领域比较重要,它提出了一种新的先验

一个不愿透露姓名的博客 3797

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

开关电源环路稳定性分析(01)-Buck变换器

这篇文章主要是根据Buck变换器的拓扑结构,利用欧姆定律,基尔霍夫定律,积分微分,这些我们所熟悉的理论推导出了开关电源输入和输出关系的表达式,我相信看完这篇文章,应该是可以自己推导一次。在后面的文章中,我们同样会按照这样的风格,尽量使用大家都已经掌握的知识,来一步一步的拆解晦涩难懂的环路稳定性的问题,在前面先把积木搭起来,后面综合分析的时候就不会显得那么困难!

D_Katter的博客 3833

Hibernate分页查询

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

thewebcode 225

AI奶牛TMR智能饲喂机器人 Qt信创完整项目( 统信/麒麟国产系统直接编译)

内置**犊牛、育成牛、围产牛、泌乳牛、干奶牛**5套标准化饲喂配方;+" 饲喂批次完成|牛群:"+grpText+"|投喂饲料:"+QString::number(ft)+"吨|剩料:"+QString::number(st)+"吨|异常牛:"+QString::number(abCow);cv::putText(frame,"霉变变质饲料禁止饲喂",cv::Point(20,40),cv::FONT_HERSHEY_SIMPLEX,0.7,cv::Scalar(0,0,255),2);

寒寒豆豆软件公司的博客 183

基于Simulink的电动车PMSM能量泄放与回收系统仿真设计

摘要 本文设计了一个基于Simulink的电动车PMSM能量泄放与回收系统仿真模型。系统采用分层建模方案,包含永磁同步电机(PMSM)矢量控制、电池管理和泄放功率计算等核心模块。通过详细的参数计算和MATLAB脚本实现,模拟了电动车在制动时的能量回收过程。重点研究了泄放电阻的控制策略,提出基于母线电压和电池SOC的多目标优化算法,确保系统在保护硬件安全的同时最大化能量回收效率。仿真模型包含完整的数学推导和模块搭建指南,为电动车能量管理系统设计提供了有效的仿真验证平台。

huanghm88的专栏 193

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

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

JimBo3693的专栏 3038

ADRC自抗扰PD+ESO控制(博途SCL源代码)

文章浏览阅读119次。线性自抗扰控制(LADRC)系统算法框图-优快云博客文章浏览阅读335次。NLADRC自抗扰控制从Simulink仿真到PLC控制实现_自抗扰控制器 simulink仿真-优快云博客本文介绍了如何将ADRC自抗扰控制算法从Simulink仿真应用到PLC控制中,包括Simulink框图、TD微分器模型、MATLAB函数的使用、SCL控制代码,以及非线性状态误差反馈控制率的实现。ADRC自抗扰PD+ESO控制(CODESYS测试+完整ST代码)-优快云博客。

RXXW_Dor的博客 1316

[转]一个泛型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

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

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

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

Simon_9527的博客 194

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

泛型 DAO 的基础CRUD

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

Kei's Blog 1918

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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、付费专栏及课程。

余额充值