一个通用的泛型GenericHibernateDao

一个很好的通用泛型dao(含源码) 为什么我们要使用通用DAO接口呢,因为我们的数据库操作无非是增删改查,CRUD操作,我们不需要为每个实体去编写一个dao接口,对于相似的实体操作可以只编写一个通用接口,然后采用不同的实现! DAO已经成为持久层的标准模式,DAO使结构清晰,面向接口编程为代码提供了规范。而泛型DAO是一个类型安全的,代码精简的设计模式(相对于传统DAO),尤其在DAO组件数量庞大的时候,代码量的减少更加明显。 泛型DAO的核心是定义一个GenericDao接口,声明基本的CRUD操作: 用hibernate作为持久化解决方案的GenericHibernateDao实现类,被定义为抽象类,它提取了CRUD操作,这就是简化代码的关键,以便于更好的重用,这个就不给例子了,增删改都好写,查就需要各种条件了。 然后是各个领域对象的dao接口,这些dao接口都继承GenericDao接口,这样各个领域对象的dao接口就和传统dao接口具有一样的功能了。 下一步是实现类了,个自领域对象去实现各自的接口,还要集成上面的抽象类,这样就实现了代码复用的最大化,实现类中只需要写出额外的查询操作就可以了。当然还要获得域对象的Class实例,这就要在构造方法中传入Class实例。用spring提供的HibernateTemplate注入到GenericHibernateDao中,这样在各个实现类就可以直接调用HibernateTemplate来实现额外的查询操作了。 如果在实现类中不想调用某个方法(例如:update()),就可以覆盖它,方法中抛出UnsupportedOperationException()异常。 立即下载
 
编写Spring+Hibernate框架下的应用,总是离不了编写一个通用的泛型GenericHibernateDao。查阅了网上不少的GenericHibernateDao实现,归纳整理为如下实现,供后续编码参考。

GenericDao.java:
package dao;

import java.io.Serializable;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.LockMode;
import org.hibernate.criterion.DetachedCriteria;

/**
 *
 * 
@author lny
 */

public interface GenericDao<T extends Serializable, PK extends Serializable>
{
    
// -------------------- 基本检索、增加、修改、删除操作 --------------------

    // 
根据主键获取实体。如果没有相应的实体,返回 null。
    public T get(PK id);

    
// 根据主键获取实体并加锁。如果没有相应的实体,返回 null。
    public T getWithLock(PK id, LockMode lock);

    
// 根据主键获取实体。如果没有相应的实体,抛出异常。
    public T load(PK id);

    
// 根据主键获取实体并加锁。如果没有相应的实体,抛出异常。
    public T loadWithLock(PK id, LockMode lock);

    
// 获取全部实体。
    public List<T> loadAll();

    
// loadAllWithLock() ?

    // 
更新实体
    public void update(T entity);

    
// 更新实体并加锁
    public void updateWithLock(T entity, LockMode lock);

    
// 存储实体到数据库
    public void save(T entity);

    
// saveWithLock()

    // 
增加或更新实体
    public void saveOrUpdate(T entity);

    
// 增加或更新集合中的全部实体
    public void saveOrUpdateAll(Collection<T> entities);

    
// 删除指定的实体
    public void delete(T entity);

    
// 加锁并删除指定的实体
    public void deleteWithLock(T entity, LockMode lock);

    
// 根据主键删除指定实体
    public void deleteByKey(PK id);

    
// 根据主键加锁并删除指定的实体
    public void deleteByKeyWithLock(PK id, LockMode lock);

    
// 删除集合中的全部实体
    public void deleteAll(Collection<T> entities);

    
// -------------------- HSQL ----------------------------------------------

    // 
使用HSQL语句直接增加、更新、删除实体
    public int bulkUpdate(String queryString);

    
// 使用带参数的HSQL语句增加、更新、删除实体
    public int bulkUpdate(String queryString, Object[] values);

    
// 使用HSQL语句检索数据
    public List find(String queryString);

    
// 使用带参数的HSQL语句检索数据
    public List find(String queryString, Object[] values);

    
// 使用带命名的参数的HSQL语句检索数据
    public List findByNamedParam(String queryString, String[] paramNames, Object[] values);

    
// 使用命名的HSQL语句检索数据
    public List findByNamedQuery(String queryName);

    
// 使用带参数的命名HSQL语句检索数据
    public List findByNamedQuery(String queryName, Object[] values);

    
// 使用带命名参数的命名HSQL语句检索数据
    public List findByNamedQueryAndNamedParam(String queryName, String[] paramNames, Object[] values);

    
// 使用HSQL语句检索数据,返回 Iterator
    public Iterator iterate(String queryString);
    
    
// 使用带参数HSQL语句检索数据,返回 Iterator
    public Iterator iterate(String queryString, Object[] values);
    
    
// 关闭检索返回的 Iterator
    public void closeIterator(Iterator it);
    
    
// -------------------------------- Criteria ------------------------------
    
    // 
创建与会话无关的检索标准对象
    public DetachedCriteria createDetachedCriteria();

    
// 创建与会话绑定的检索标准对象
    public Criteria createCriteria();

    
// 使用指定的检索标准检索数据
    public List findByCriteria(DetachedCriteria criteria);
    
    
// 使用指定的检索标准检索数据,返回部分记录
    public List findByCriteria(DetachedCriteria criteria, int firstResult, int maxResults);

    
// 使用指定的实体及属性检索(满足除主键外属性=实体值)数据
    public List<T> findEqualByEntity(T entity, String [] propertyNames);

    
// 使用指定的实体及属性(非主键)检索(满足属性 like 串实体值)数据
    public List<T> findLikeByEntity(T entity, String [] propertyNames);

    
// 使用指定的检索标准检索数据,返回指定范围的记录
    public Integer getRowCount(DetachedCriteria criteria);
    
    
// 使用指定的检索标准检索数据,返回指定统计值
    public Object getStatValue(DetachedCriteria criteria, String propertyName, String StatName);

    
// -------------------------------- Others --------------------------------
    
    // 
加锁指定的实体
    public void lock(T entity, LockMode lockMode);
    
    
// 强制初始化指定的实体
    public void initialize(Object proxy);

    
// 强制立即更新缓冲数据到数据库(否则仅在事务提交时才更新)
    public void flush();
        
}

GenericHibernateDao.java
package dao;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.beanutils.PropertyUtils;
import org.hibernate.Criteria;
import org.hibernate.LockMode;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

/**
 * GenericHibernateDao 
继承 HibernateDao,简单封装 HibernateTemplate 各项功能,
 * 
简化基于Hibernate Dao 的编写。 
 * 
 * 
@author lny
 */

@SuppressWarnings("unchecked")
public class GenericHibernateDao<T extends Serializable, PK extends Serializable>
        
extends HibernateDaoSupport implements GenericDao<T, PK>
{
    
// 实体类类型(由构造方法自动赋值)
    private Class<T> entityClass;

    
// 构造方法,根据实例类自动获取实体类类型
    public GenericHibernateDao()
    {
        
this.entityClass = null;
        Class c = getClass();
        Type t = c.getGenericSuperclass();
        
if (t instanceof ParameterizedType)
        {
            Type[] p = ((ParameterizedType) t).getActualTypeArguments();
            
this.entityClass = (Class<T>) p[0];
        }
    }

    
// -------------------- 基本检索、增加、修改、删除操作 --------------------

    // 
根据主键获取实体。如果没有相应的实体,返回 null。
    public T get(PK id)
    {
        
return (T) getHibernateTemplate().get(entityClass, id);
    }

    
// 根据主键获取实体并加锁。如果没有相应的实体,返回 null。
    public T getWithLock(PK id, LockMode lock)
    {
        T t = (T) getHibernateTemplate().get(entityClass, id, lock);
        
if (t != null)
        {
            
this.flush();   // 立即刷新,否则锁不会生效。
        }
        
return t;
    }

    
// 根据主键获取实体。如果没有相应的实体,抛出异常。
    public T load(PK id)
    {
        
return (T) getHibernateTemplate().load(entityClass, id);
    }

    
// 根据主键获取实体并加锁。如果没有相应的实体,抛出异常。
    public T loadWithLock(PK id, LockMode lock)
    {
        T t = (T) getHibernateTemplate().load(entityClass, id, lock);
        
if (t != null)
        {
            
this.flush();   // 立即刷新,否则锁不会生效。
        }
        
return t;
    }

    
// 获取全部实体。
    public List<T> loadAll()
    {
        
return (List<T>) getHibernateTemplate().loadAll(entityClass);
    }

    
// loadAllWithLock() ?
    
    // 
更新实体
    public void update(T entity)
    {
        getHibernateTemplate().update(entity);
    }

    
// 更新实体并加锁
    public void updateWithLock(T entity, LockMode lock)
    {
        getHibernateTemplate().update(entity, lock);
        
this.flush();   // 立即刷新,否则锁不会生效。
    }

    
// 存储实体到数据库
    public void save(T entity)
    {
        getHibernateTemplate().save(entity);
    }

    
// saveWithLock()?

    // 
增加或更新实体
    public void saveOrUpdate(T entity)
    {
        getHibernateTemplate().saveOrUpdate(entity);
    }

    
// 增加或更新集合中的全部实体
    public void saveOrUpdateAll(Collection<T> entities)
    {
        getHibernateTemplate().saveOrUpdateAll(entities);
    }

    
// 删除指定的实体
    public void delete(T entity)
    {
        getHibernateTemplate().delete(entity);
    }

    
// 加锁并删除指定的实体
    public void deleteWithLock(T entity, LockMode lock)
    {
        getHibernateTemplate().delete(entity, lock);
        
this.flush();   // 立即刷新,否则锁不会生效。
    }

    
// 根据主键删除指定实体
    public void deleteByKey(PK id)
    {
        
this.delete(this.load(id));
    }

    
// 根据主键加锁并删除指定的实体
    public void deleteByKeyWithLock(PK id, LockMode lock)
    {
        
this.deleteWithLock(this.load(id), lock);
    }

    
// 删除集合中的全部实体
    public void deleteAll(Collection<T> entities)
    {
        getHibernateTemplate().deleteAll(entities);
    }

    
// -------------------- HSQL ----------------------------------------------
    
    // 
使用HSQL语句直接增加、更新、删除实体
    public int bulkUpdate(String queryString)
    {
        
return getHibernateTemplate().bulkUpdate(queryString);
    }

    
// 使用带参数的HSQL语句增加、更新、删除实体
    public int bulkUpdate(String queryString, Object[] values)
    {
        
return getHibernateTemplate().bulkUpdate(queryString, values);
    }

    
// 使用HSQL语句检索数据
    public List find(String queryString)
    {
        
return getHibernateTemplate().find(queryString);
    }

    
// 使用带参数的HSQL语句检索数据
    public List find(String queryString, Object[] values)
    {
        
return getHibernateTemplate().find(queryString, values);
    }

    
// 使用带命名的参数的HSQL语句检索数据
    public List findByNamedParam(String queryString, String[] paramNames, Object[] values)
    {
        
return getHibernateTemplate().findByNamedParam(queryString, paramNames, values);
    }

    
// 使用命名的HSQL语句检索数据
    public List findByNamedQuery(String queryName)
    {
        
return getHibernateTemplate().findByNamedQuery(queryName);
    }

    
// 使用带参数的命名HSQL语句检索数据
    public List findByNamedQuery(String queryName, Object[] values)
    {
        
return getHibernateTemplate().findByNamedQuery(queryName, values);
    }

    
// 使用带命名参数的命名HSQL语句检索数据
    public List findByNamedQueryAndNamedParam(String queryName, String[] paramNames, Object[] values)
    {
        
return getHibernateTemplate().findByNamedQueryAndNamedParam(queryName, paramNames, values);
    }

    
// 使用HSQL语句检索数据,返回 Iterator
    public Iterator iterate(String queryString)
    {
        
return getHibernateTemplate().iterate(queryString);
    }

    
// 使用带参数HSQL语句检索数据,返回 Iterator
    public Iterator iterate(String queryString, Object[] values)
    {
        
return getHibernateTemplate().iterate(queryString, values);
    }

    
// 关闭检索返回的 Iterator
    public void closeIterator(Iterator it)
    {
        getHibernateTemplate().closeIterator(it);
    }

    
// -------------------------------- Criteria ------------------------------
    
    // 
创建与会话无关的检索标准
    public DetachedCriteria createDetachedCriteria()
    {
        
return DetachedCriteria.forClass(this.entityClass);
    }
    
    
// 创建与会话绑定的检索标准
    public Criteria createCriteria()
    {
        
return this.createDetachedCriteria().getExecutableCriteria(this.getSession());
    }

    
// 检索满足标准的数据
    public List findByCriteria(DetachedCriteria criteria)
    {
        
return getHibernateTemplate().findByCriteria(criteria);
    }
    
    
// 检索满足标准的数据,返回指定范围的记录
    public List findByCriteria(DetachedCriteria criteria, int firstResult, int maxResults)
    {
        
return getHibernateTemplate().findByCriteria(criteria, firstResult, maxResults);
    }

    
// 使用指定的实体及属性检索(满足除主键外属性=实体值)数据
    public List<T> findEqualByEntity(T entity, String [] propertyNames) 
    {
        Criteria criteria = 
this.createCriteria();
        Example exam = Example.create(entity);
        exam.excludeZeroes();
        String [] defPropertys = getSessionFactory().getClassMetadata(entityClass).getPropertyNames();
        
for(String defProperty : defPropertys)
        {
            
int ii = 0;
            
for(ii = 0; ii < propertyNames.length; ++ii)
            {
                
if(defProperty.equals(propertyNames[ii]))
                {
                    criteria.addOrder(Order.asc(defProperty));
                    
break;
                }
            }
            
if(ii == propertyNames.length)
            {
                exam.excludeProperty(defProperty);
            }
        }
        criteria.add(exam);
        
return (List<T>) criteria.list();
    }
    
    
// 使用指定的实体及属性检索(满足属性 like 串实体值)数据
    public List<T> findLikeByEntity(T entity, String [] propertyNames)
    {
        Criteria criteria = 
this.createCriteria();
        
for(String property : propertyNames)
        {
            
try
            {
                Object value = PropertyUtils.getProperty(entity, property);
                
if(value instanceof String)
                {
                    criteria.add(Restrictions.like(property, (String) value, MatchMode.ANYWHERE));
                    criteria.addOrder(Order.asc(property));
                }
                
else
                {
                    criteria.add(Restrictions.eq(property, value));
                    criteria.addOrder(Order.asc(property));
                }
            }
            
catch(Exception ex)
            {
                
// 忽略无效的检索参考数据。
            }
        }
        
return (List<T>) criteria.list();
    }
    
    
// 使用指定的检索标准获取满足标准的记录数
    public Integer getRowCount(DetachedCriteria criteria)
    {
        criteria.setProjection(Projections.rowCount());
        List list = 
this.findByCriteria(criteria, 0, 1);
        
return (Integer) list.get(0);
    }

    
// 使用指定的检索标准检索数据,返回指定统计值(max,min,avg,sum)
    public Object getStatValue(DetachedCriteria criteria, String propertyName, String StatName)
    {
        
if     (StatName.toLowerCase().equals("max")) 
            criteria.setProjection(Projections.max(propertyName));
        
else if(StatName.toLowerCase().equals("min"))
            criteria.setProjection(Projections.min(propertyName));
        
else if(StatName.toLowerCase().equals("avg"))
            criteria.setProjection(Projections.avg(propertyName));
        
else if(StatName.toLowerCase().equals("sum"))
            criteria.setProjection(Projections.sum(propertyName));
        
else return null;
        List list = 
this.findByCriteria(criteria, 0, 1);
        
return list.get(0);        
    }
    
    
// -------------------------------- Others --------------------------------
    
    // 
加锁指定的实体
    public void lock(T entity, LockMode lock)
    {
        getHibernateTemplate().lock(entity, lock);
    }

    
// 强制初始化指定的实体
    public void initialize(Object proxy)
    {
        getHibernateTemplate().initialize(proxy);
    }

    
// 强制立即更新缓冲数据到数据库(否则仅在事务提交时才更新)
    public void flush()
    {
        getHibernateTemplate().flush();
    }
}
告别连接难题:Windows 11下Multisim主数据库稳定运行终极配置指南 本文详细解析了Windows 11下Multisim 14.0主数据库连接失败的三大根源,并提供了四步终极解决方案,包括系统环境优化、软件权限配置、注册表修复和网络验证绕过技巧。通过实测数据对比,本方案显著提升了启动速度和稳定性,解决了电子仿真中的常见连接问题。 阅读详情

相关推荐

el-transfer和el-tree进行结合搞一个树形穿梭框

由于业务需求需要在穿梭框里使用树形结构,但是本身element里并不支持,于是参考了别的大佬发的文章作为思路及后续自己新增了一些处理功能。

bbkhhvv的博客 6307

java传入通用泛型_java泛型

1 泛型1.1 泛型的作用泛型有两种作用,一种是让接口或方式更通用,一种是限制作用。第一种是一种是让接口或方式更通用,泛型和C++的模板很相似,有时在定义函数或者接口时,不确定需要传入的参数是什么类型,这时可能要创建多个重载函数来枚举所有的数据类型。而有了泛型之后,直接用一个标识符代替具体的数据类型,在调用的时候传入具体的数据类型给标识符。从而实现接收任意数据...

weixin_35033275的博客 1764

具身智能端到端大模型VLA (Vision Language Action)

在语言为条件的机器人任务中,策略必须具备理解语言指令、视觉感知环境并生成适当动作的能力,这就需要VLA的。例如,在自动驾驶领域,传统的做法是将感知、预测、规划等步骤分开处理,而VLA则试图用一个统一的框架来替代这种分立的方法。另外,VLA的模型对于算力的需求很大,单片AI算力1000Tops的Thor大概率会延期发布,加上英伟达芯片的量产时间与成本挑战,以及在国内的应用情况,对车企而言是个大问题。以谷歌DeepMind推出的RT-2为例,该模型可以在新的物体、背景和环境中表现出显著改善的性能。

具身智能机器人 1万+

泛型

泛型准确的来说是通用类型,通常作为一个方法模板和类型的模板,泛型类和泛型方法兼具可重用性、类型安全性和效率,这是非泛型类和非泛型方法无法实现的。 泛型表示:List<T>,T是一个占位符,我们在Dynamic介绍过动态类型一般在执行的时候知道他的数据类型,那么T在编译的时候他就确定了它的类型。 命名空间 :System.Collections.Generic 我们经常在一个项目框...

mango_love的专栏 609

自监督预训练(三)wav2vec 2.0原理剖析

一、整体流程 二、feature encoder 理解Conv1d nn.Conv1d(in_channels=5, out_channels=20, kernel_size=3, stride=2) 假设输入input=(batch, in_channels, in_len) batch=1 in_channels=5,对应向量大小,比如word embedding in_len=10,对应word的个数 cnn内部kernel=(in_channels, kernel_size)=(5,3),相当

xmdxcsj的专栏 2万+

【路由交换】思科5506防火墙三区域互通

思科 5506 inside outside dmz 互通

baidu_22774701的博客 6207

掌握8条泛型规则,打造优雅通用的Java代码

使用泛型能够指定对象类型,在编译期间进行类型擦除并强制转换为对应类型除了兼容历史版本、获取Class对象、使用interface三种情况只能使用原生态类型,其他情况下都建议使用泛型泛型能够带来安全、灵活的特点,当无法预估对象类型时可以使用或无限制通配符<?

关注菜菜的后端私房菜,获取更多技术干货~ 895

29、智能问答系统:原理、挑战与实现

本文深入探讨了智能问答系统的原理、挑战与实现方法。从智能问答系统的定义、重要性、问题类型和构建步骤,到实现中的歧义问题、数据集创建及基于规则的系统实现,全面解析了这一自然语言处理领域的重要应用。同时,文章还介绍了智能问答系统的应用场景、发展趋势以及面临的挑战与应对策略,为读者提供了一个全面而深入的理解框架。

redis7keeper的博客 166

泛型实现通用对象工具类

今天,项目中为了实现一个用到,需要把许多不同对象类型的list集合转化为map集合,例如:List<SchoolRoom>,List<Student>等,之前没有觉得特别麻烦,只需要为每个list集合写一个转化方法就可以了。今天实在太多,就打算自己手动写一个通用的方法。希望给小伙伴也能省下麻烦的重复工作。 演示类: SchoolRoom类 /** * 考场...

天生卷发 734

【ArcGIS Engine二次开发】入门基础(2):ArcGIS开发方式(VBA、DLL、Add-in、Engine)对比

文章目录2.1 使用VBA进行桌面软件开发2.1.1 VBA开发方式2.1.1 VBA代码的安全性2.2 使用DLL进行桌面软件开发2.2.1 DLL开发方式2.2.2 DLL功能的应用部署2.3 使用Add-in进行桌面软件开发2.4 使用ArcGIS Engine构建独立应用程序 对于桌面GIS应用来说,ArcGIS平台不仅提供了用于开发独立运行的GIS应用软件的二次开发工包ArcGIS Engine,还提供了对ArcGIS Deskop桌面软件进行扩展的开发的话,在开发个具体的GIS 行业应用软件时

智慧空间实验室 6510

Python爬虫实战:利用Requests-HTML与异步技术高效爬取B站视频信息及弹幕数据分析

B站的弹幕,远非简单的评论功能,它是一种独特的、实时互动的社交方式,是观众情感的集体宣泄和共鸣。无论是用于内容创作者优化视频结构,还是用于社会学、传播学的研究,亦或是简单的个人兴趣分析,都具备极高的价值。stop_words = {'的', '了', '是', '我', '你', '他', '她', '它', '在', '有', '不', '吗', '吧', '啊', '这', '那'}本文不仅是代码的堆砌,更注重原理的剖析、反爬策略的应对以及工程化的思考,旨在为读者提供一份紧跟技术前沿的实战指南。

2201_76125261的博客 391

一个通用的泛型GenericHibernateDAO

导读:   新一篇: 用户,角色,功能三者之间的关系视图   编写Spring+Hibernate框架下的应用,总是离不了编写一个通用的泛型GenericHibernateDao。查阅了网上不少的GenericHibernateDao实现,归纳整理为如下实现,供后续编码参考。   GenericDao.java:   package dao;import java.io.Serializa

赵晓雷的专栏 1596

Unity 面试篇|(三)设计模式篇 【全面总结 | 持续更新 | 建议收藏】

设计模式是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的总结。设计模式与方法或库的使用方式不同, 你很难直接在自己的程序中套用某个设计模式。模式并不是一段特定的代码, 而是解决特定问题的一般性概念。你可以根据模式来实现符合自己程序实际所需的解决方案。常常会混淆模式和算法, 因为两者在概念上都是已知特定问题的典型解决方案。但算法总是明确定义达成特定目标所需的一系列步骤, 而模式则是对解决方案的更高层次描述。同一模式在两个不同程序中的实现代码可能会不一样。单例模式。

游戏开发小Y的博客 12万+

一个通用的泛型 GenericHibernateDao

新一篇: 用户,角色,功能三者之间的关系视图编写Spring+Hibernate框架下的应用,总是离不了编写一个通用的泛型GenericHibernateDao。查阅了网上不少的GenericHibernateDao实现,归纳整理为如下实现,供后续编码参考。GenericDao.java:package dao;import java.io.Serializable;

xd195666916的专栏 726

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

详细介绍 Hibernate 泛型 DAO 及其使用方法

编写Spring+Hibernate框架下的应用,总是离不了编写一个通用的泛型GenericHibernateDao。查阅了网上不少的GenericHibernateDao实现,归纳整理为如下实现,供后续编码参考。  首先定义接口泛型DAO接口 GenericDao package com.th.huz; import java.io.Serializable;import java.uti...

iteye_10902的博客 172

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

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

Spring+Hibernate集成查询 GenericHibernateDao

 spring  封装了对hibernate 底层操作,现列了一些查询方法:1,findByNamedParamcode:public List getRolesByName(String roleName) {        return getHibernateTemplate().findByNamedParam("from Role role where role.name=:

javadaydayup的专栏 1801

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: hibernate调用存储(返回记录集)
下一篇: 用axis2+Tomcat5.5+Eclipse3.2部署和访问Web服务
janejava
博客等级 码龄19年 0粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值