HibernateTemplate和HibernateDaoSupport

HibernateTemplate和HibernateDaoSupport(spring注入问题) HibernateTemplate     HibernateTemplate是Spring提供的一个就Hibernate访问持久层技术而言、支持Dao组件的一个工具。HibernateTemplate提供持久层访问模板,应用HibernateTemplate无须实现特定的接口,它只需要提供一个sessionFactory的引用就可以执行持久化操作。     该模板无需打开sessio 阅读详情

Spring整合Hibernate后,为Hibernate的DAO提供了两个工具类:HibernateTemplate和HibernateDaoSupport

HibernateTemplate
HibernateTemplate是Spring提供的一个就Hibernate访问持久层技术而言、支持Dao组件的一个工具。HibernateTemplate提供持久层访问模板,应用HibernateTemplate无须实现特定的接口,它只需要提供一个sessionFactory的引用就可以执行持久化操作。
该模板无需打开session及关闭Session。它只要获得SessionFactory的引用,就可以打开Session,并在持久化访问结束后关闭Session,程序开发只需要完成持久层逻辑,通用的CRUD操作由HibernateTemplate完成.

HibernateDaoSupport
HibernateDaoSupport同样也是Spring提供的、为Hibernate访问数据库的DAO组件:该类主要提供如下两个方法,方便DAO的实现:
1>public final HibernateTemplate getHibernateTemplate()
2>public final void setSessionFactory(SessionFactory sessionFactory)
其中setSessionFactory方法用来接收Spring的ApplicationContext的依赖注入,可接收配置在Spring的SessionFactory实例,getHibernateTemplate方法则用来生成HibernateTeplate模板对象来完成数据库访问。
同样常用HibernateDaoSupport中的getSession方法来获取Session对象对数据库进行操作,相对HibernateTemplate对象而言,HibernateDaoSupport应用更加灵活。

hibernateTemplate的常用方法:

Øvoid delete(Object entity):删除指定持久化实例

ØdeleteAll(Collection entities):删除集合内全部持久化类实例

Øfind(String queryString):根据HQL查询字符串来返回实例集合

ØfindByNamedQuery(String queryName):根据命名查询返回实例集合

Øget(Class entityClass, Serializable id):根据主键加载特定持久化类的实例

Øsave(Object entity):保存新的实例

ØsaveOrUpdate(Object entity):根据实例状态,选择保存或者更新

Øupdate(Object entity):更新实例的状态,要求entity是持久状态

ØsetMaxResults(int maxResults):设置分页的大小

配置方案——Spring+hibernate访问数据库有以下几种方法:

1>注入SessionFactory

在spring配置文件中,对Dao注入sessionFactory,如下所示
配置文件相关配置如下:

<bean id="manageEmpDaoImpl" 
    class="com.cyou.lms.emp.manageemp.dao.impl.ManageEmpDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
</bean>

Dao编码如下:

复制代码
public class ManageEmpDaoImpl extends HibernateDaoSupport implements ManageEmpDao{
       public void addEmp(Emp emp) {
           this.getHibernateTemplate().save(emp);
       }
       public List<Emp> getEmpList() {
           return null;
       }
   }
复制代码

这里的sessionFacotry注入不是给类的,而是给继承HibernateDaoSupport类的sessionFactory,在上面源码中可以看到。这样编写的一个好处就是我们不再需要关心关闭、是否连接成功等问题。主要是很方便。但是这个不好就是java只支持单继承,所以唯一的继承给了HibernateDaoSupport有点可惜。而且也没有必要这样做。


2>注入HibernateTemplate

这种方法本质上跟上面的sessionFacotry一样,只不过进行了一层包装,好处就是Dao中的类就不用再继承那个HibernateDaoSuport了,不过要先配置好HibernateTemplate:
配置文件如下所示:

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
   <property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="manageEmpDaoImpl" class="com.cyou.lms.emp.manageemp.dao.impl.ManageEmpDaoImpl"/>

DAO编码如下所示:

复制代码
 public class ManageEmpDaoImpl implements ManageEmpDao {
   @Resource
    private HibernateTemplate hibernateTemplate;
    public void addEmp(Emp emp) {
       this.hibernateTemplate.save(emp);
    }
    public List<Emp> getEmpList() {
       return null;
    }
}
复制代码

3> 注入jdbcTemplate
这种配置是使用Spring对JDBC的封装,而非Hibernate。即不加载Hibernate容器,直接使用Spring对JDBC的封装来操作数据库

第一种配置:给DAO类注入数据源dataSource
配置如下:

<bean id="userManageImpl" class="com.nos.business.springJDBC.impl.UserManageImpl">
    <property name="dataSource" ref="dataSource" />
</bean>

DAO编码如下所示:

复制代码
public class UserManageImpl implements IUserManage{
    private JdbcTemplate jdbcTemplate;
    
    @Resource(name="dataSource")
    public void setDataSource(DataSource dataSource){
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

    @Override
    public void add(UserVo vo)
    {
        jdbcTemplate.update("insert into user_info(name,sex) values(?,?)", new Object[]{vo.getName(), vo.getSex()});
    }
}
复制代码

第二种配置:直接给Dao类注入JdbcTemplate(个人偏向于这种配置)
  配置如下:

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
   <property name="dataSource" ref="dataSource" />
</bean>

DAO编码如下所示:

复制代码
public class UserManageImpl2 implements IUserManage{
    @Resource
    private JdbcTemplate jdbcTemplate;

    @Override
    public void add(UserVo vo)
    {
        jdbcTemplate.update("insert into user_info(name,sex) values(?,?)", new Object[]{vo.getName(), vo.getSex()});
    }
}
SSH整合(其中dao用extends HibernateDaoSupport方式)总结【图解】 立即下载

相关推荐

hibernateTemplate的常用方法

hibernateTemplate的常用方法

Hibernate 中使用 HibernateTemplate的三种方法

在我们的项目中,经常要从HibernateDaoSupport继承然后使用他的HibernateTemplate给我们封装好的方法。 我们以用户模块的持久层UserDao这个类的addUser(User user)方法为例: 第一种方法:userDao extends HibernateDaoSupport:(不推荐使用) 我们知道继承这个类,必须给他注入一个HibernateT

东语的专栏 1033

HibernateDaoSupport的使用

HibernateDaoSupport的使用

Hibernate中hibernateTemplate()方法总结

1:get/load存取单条数据 public Teacher getTeacherById(Long id) { return (Teacher)this.hibernateTemplate.get(Teacher.class, id); } public Teacher getTeacherById(Long id) { ...

weixin_30335353的博客 168

SYSU-MM01数据集评估避坑指南:从RGB/IR图像理解到Python评估脚本调优

本文详细解析了SYSU-MM01数据集在跨模态行人重识别(ReID)评估中的关键技巧与常见陷阱。从RGB/IR图像理解到Python评估脚本优化,提供了数据评估模式选择、single-shot/multi-shot差异分析、特征文件处理规范等实用指南,帮助研究者避开指标异常问题,提升评估效率与准确性。

weixin_29044713的博客 196

CloudCompare如何进行二次开发?

CloudCompare源代码编译成功后,即可进行二次开发,可以通过修改源码或者制作插件实现二次开发。本文二次开发采用修改CloudCompare的源代码的方式,分别修改mainwindow.ui、mainwindow.h、mainwindow.cpp,实现扩展功能,克隆选中的点云。

【cacrle】的博客 5332

Hibernate6 入门手册(六)

原文:Beginning Hibernate 6 协议:CC BY-NC-SA 4.0 十二、集成 Hibernate 在第十一章中,我们展示了一种将 Hibernate 集成到 servlet 应用中的技术,但是我们的应用对于 JVM 来说是非常“裸机”的。没有人会写这样的应用。相反,人们使用应用框架来处理我们不得不自己处理的许多问题,比如 Quarkus、Spring Data(在我们的例子中,特别是 Spring Data JPA 模块)或 ActiveJ。在这一章中,我们将看看 Hibernat

龙哥盟 1282

【原创理论】Stochastic Coupled Dyadic System (SCDS):一个用于两性关系动力学建模的随机耦合系统框架

基于二人爱情耦合系统动力学、稳定性与最优策略的综合性理论的数值模拟与分析

weixin_44695861的博客 1135

Spring+Hibernate异常及错误处理——汇总

一、super.getHibernateTemplate()execute(HibernateCallback)错误信息:The method execute(HibernateCallback<T>) in the type HibernateTemplate is not applicable for the arguments (new HibernateCallback <List<Use

微寒的技术博客 2835

【论文精读】Formal Mathematical Reasoning: A New Frontier in AI

注:本文根据师兄汇报内容总结。

m0_60634555的博客 1189

Robocup3d

一、 比赛介绍 RoboCup 仿真比赛是一个能为多智能体系统和模拟智能进行研究、教育的工具。比赛是在一个标准的计算机环境中进行的,提供了一个完全分布式控制、实时异步多智能体环境。通过这个平台,可以测试各种理论、算法和Agent体系结构。在实时异步、有噪声的对抗环境中,研究多智能体的合作对抗问题。当然,仿真组的比赛使用的机器人并非是真的机器人。一个机器人是一个Agent, 它拥有自己的大脑,

zhanghe2775115的专栏 7267

HibernateTemplate 和HibernateDaoSupport的session

今天学习了下HibernateTemplate 和HibernateDaoSupport的session的区别。HibernateTemplate类中的方法是spring封装了hibernate中的方法,在使用完了以后会自动释放session。而如果使用了HibernateDaoSupport...

cihongmo6452的博客 171

生物信息学工具链搭建:用conda一键搞定MCScanX所有依赖(Ubuntu20.04实测)

本文详细介绍了在Ubuntu20.04系统上使用conda一键部署MCScanX及其所有依赖的高效方法,解决了传统源码编译安装中的依赖冲突问题。通过conda环境管理工具,研究者可以快速搭建生物信息学工具链,实现基因组共线性分析的高效运行,显著提升研究效率。

backprop5master的博客 247

spring的HibernateDaoSupport以及HibernateTemplate和jdbc

spring提供访问数据库的有三种方式:HibernateDaoSupport,HibernateTemplate(推荐使用),jdbcTemplate HibernateTemplate:org.springframework.orm.hibernate3.HibernateTem...

cihongmo6452的博客 137

双目立体成像(一)双目图片生成点云

利用左右目图片生成点云

qq_62964142的博客 4552

Python爬虫实战:2026最新版淘宝商品详情页数据抓取与价格监控

在2026年的今天,电商数据已经成为商业决策、市场分析和价格策略制定的核心资产。淘宝作为中国最大的电商平台之一,其商品详情页包含了海量有价值的信息:商品标题、价格、销量、评价数、店铺信息、SKU属性等。对于从事电商运营、竞品分析、价格监控的从业者来说,能够高效、稳定地获取这些数据至关重要。然而,淘宝平台的反爬虫策略在2026年已经演进到了相当成熟的阶段。

2201_76125261的博客 891

HibernateDaoSupport和HibernateTemplate

HibernateDaoSupport和HibernateTemplate hibernateTemplate的常用方法:  Ø  void delete(Object entity):删除指定持久化实例 Ø  deleteAll(Collection entities):删除集合内全部持久化类实例 Ø  find(String queryString):根据HQL查询

一个执着的程序员 2399

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SessionFactory、HibernateTemplate、HibernateDaoSupport之间的关系说明

SessionFactory        在接触HibernateTemplate之前,我们知道,在对数据库进行CRUD操作之前,需要开启session、transaction等等。在hibernate学习过程中,我们知道了,得到session之前,需要先得到SessionFactory,进而从SessionFactory里面openSession(),或者getCurrentSession(

天明之前的拂面微风 的专栏 4116

老版QQ原生表情gif动态

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

HibernateTemplate与HibernateDaoSupport详解

HibernateTemplate与HibernateDaoSupport详解 HibernateTemplate是Spring框架下的一个数据库操作类org.springframework.orm.hibernate3.HibernateTemplate HibernateDaoSupport也是Spring框架下的一个接口类 q      void delete(Object entit

学习那点事儿 7277

jre9下载 jdk9

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

hibernateTemplate以及spring中的hibernateDaosupport的配置

hibernateTemplate org.hibernate.dialect.MySQLDialect true true false update        cn/itcast/shop/user/vo/User.hbm.xml    

a15134673751的博客 2155

spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择问题

spring提供访问数据库的有三种方式: HibernateDaoSupport,HibernateTemplate(推荐使用),jdbcTemplate HibernateTemplate:org.springframework.orm.hibernate3.HibernateTemplate HibernateDaoSupport:org.springframework.orm.hib

zcywell的专栏 2万+

引用 HibernateDaoSupport和 HibernateTemplate的选择问题

本文引用自无殇《HibernateDaoSupport和 HibernateTemplate的选择问题》 hibernateTemplate的常用方法: ? void delete(Object entity):删除指定持久化实例 ? deleteAll(Collection entities):删除集合内全部持久化类实例 ? find(String query...

zyc1006的博客 198
上一篇: hibernate中取得session的两种方式
下一篇: spring的ContextLoaderListener
一名金人
博客等级 码龄16年 1粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值