`
javachikuang
  • 浏览: 71203 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

使用HbernateTemplate

阅读更多

HibernateTemplate提供持久层访问模板化,使用HibernateTemplate无须实现特定接口,它只需要提供一个SessionFactory的引用,就可执行持久化操作。SessionFactoyr对象可通过构造参数传入,或通过设值方式传入。如下:

//获取Spring上下文

ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml");

//通过上下文获得SessionFactory

SessionFactory sessionFactory = (SessionFactory) ctx.getBean(“sessionFactory”);

然后创建HibernateTemplate实例。HibernateTemplate提供如下三个构造函数

q      HibernateTemplate()

q      HibernateTemplate(org.hibernate.SessionFactory sessionFactory)

q      HibernateTemplate(org.hibernate.SessionFactory sessionFactory, boolean allowCreate)

第一个构造函数,构造一个默认的HibernateTemplate实例,因此,使用HibernateTemplate实例之前,还必须使用方法setSessionFactory(SessionFactory sessionFactory)来为HibernateTemplate传入SessionFactory的引用。

第二个构造函数,在构造时已经传入SessionFactory引用。

第三个构造函数,其boolean型参数表明:如果当前线程已经存在一个非事务性的Session,是否直接返回此非事务性的Session

对于在Web应用,通常启动时自动加载ApplicationContextSessionFactoryDAO对象都处在Spring上下文管理下,因此无须在代码中显式设置,可采用依赖注入解耦SessionFactoryDAO,依赖关系通过配置文件来设置,如下所示:

<?xml version="1.0" encoding="gb2312"?>

<!--  Spring配置文件的DTD定义-->

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

    "http://www.springframework.org/dtd/spring-beans.dtd">

<!--  Spring配置文件的根元素是beans-->

<beans>

         <!--定义数据源,beanIDdataSource-->

         <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

                   <!--  指定数据库驱动-->

           <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>

                   <!--  指定连接数据库的URL-->                 

           <property name="url"><value>jdbc:mysql://wonder:3306/j2ee</value></property>

                   <!--  root为数据库的用户名-->

           <property name="username"><value>root</value></property>

                   <!--  pass为数据库密码-->

           <property name="password"><value>pass</value></property>

    </bean>

         <!--定义HibernateSessionFactory-->

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

           <!--  依赖注入数据源,注入正是上文定义的dataSource>

           <property name="dataSource"><ref local="dataSource"/></property>

                   <!--  mappingResouces属性用来列出全部映射文件>

           <property name="mappingResources">

                <list>

                     <!--以下用来列出所有的PO映射文件-->

                                     <value>lee/Person.hbm.xml</value>

                </list>

           </property>

          <!--定义HibernateSessionFactory的属性 -->

           <property name="hibernateProperties">

                    <props>

                                     <!--  指定Hibernate的连接方言-->

                                     <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

                                     <!--  不同数据库连接,启动时选择create,update,create-drop-->

                         <prop key="hibernate.hbm2ddl.auto">update</prop>

                    </props>

        </property>

</bean>

<!--  配置Person持久化类的DAO bean-->

<bean id="personDao" class="lee.PersonDaoImpl">

           <!--  采用依赖注入来传入SessionFactory的引用>

           <property name="sessionFactory"><ref local="sessionFactory"/></property>

</bean>

</beans>

DAO实现类中,可采用更简单的方式来取得HibernateTemplate的实例。代码如下:

public class PersnDAOImpl implements PersonDAO

{

    //以私有的成员变量来保存SessionFactory

private SessionFactory sessionFactory;

         //设值注入SessionFactory必需的setter方法

    public void setSessionFactory(SessionFactory sessionFactory)

{

           this.sessionFactory = sessionFactory;

    }

 

    public List loadPersonByName(final String name)

{

           HibernateTemplate hibernateTemplate =

                    new HibernateTemplate(this.sessionFactory);

                   //此处采用HibernateTemplate完成数据库访问

    }

}

10.6.1 HibernateTemplate的常规用法

HibernateTemplate提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作,Spring 2.0更增加对命名SQL查询的支持,也增加对分页的支持。大部分情况下,使用Hibernate的常规用法,就可完成大多数DAO对象的CRUD操作。下面是HibernateTemplate的常用方法简介:

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

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

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

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

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

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

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

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

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

下面是一个完整DAO类的源代码:

public class PersonDAOHibernate implements PersonDAO

{

    //采用log4j来完成调试时的日志功能

private static Log log = LogFactory.getLog(NewsDAOHibernate.class);

    //以私有的成员变量来保存SessionFactory

private SessionFactory sessionFactory;

//以私有变量的方式保存HibernateTemplate

private HibernateTemplate hibernateTemplate = null;

         //设值注入SessionFactory必需的setter方法

    public void setSessionFactory(SessionFactory sessionFactory)

{

           this.sessionFactory = sessionFactory;

    }

         //初始化本DAO所需的HibernateTemplate

public HIbernateTemplate getHibernateTemplate()

{

         //首先,检查原来的hibernateTemplate实例是否还存在

         if ( hibernateTemplate == null)

         {

                   //如果不存在,新建一个HibernateTemplate实例

                   hibernateTemplate = new HibernateTemplate(sessionFactory);

         }

         return hibernateTemplate;

}

         //返回全部的人的实例

    public List getPersons()

         {       

                   //通过HibernateTemplatefind方法返回Person的全部实例

           return getHibernateTemplate().find("from Person");

    }

         /**

          * 根据主键返回特定实例

          * @ return 特定主键对应的Person实例

          * @ param 主键值

    public News getNews(int personid)

         {

           return (Person)getHibernateTemplate().get(Person.class, new Integer(personid));

    }

         /**

          * @ person 需要保存的Person实例

          */

    public void savePerson(Person person)

         {                

                   getHibernateTemplate().saveOrUpdate(person);

    }

         /**

          * @ param personid 需要删除Person实例的主键

          * /

    public void removePerson(int personid)

         {

                   //先加载特定实例

           Object p = getHibernateTemplate().load(Person.class, new Integer(personid));

                   //删除特定实例

           getHibernateTemplate().delete(p);

    }

}

10.6.2 Hibernate的复杂用法HibernateCallback

HibernateTemplate还提供一种更加灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式。HibernateTemplate的灵活访问方式是通过如下两个方法完成:

q      Object execute(HibernateCallback action)

q      List execute(HibernateCallback action)

这两个方法都需要一个HibernateCallback的实例,HibernateCallback实例可在任何有效的Hibernate数据访问中使用。程序开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,解决Spring封装Hibernate后灵活性不足的缺陷。HibernateCallback是一个接口,该接口只有一个方法doInHibernate(org.hibernate.Session session),该方法只有一个参数Session

通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的实例,方法doInHibernate的方法体就是Spring执行的持久化操作。具体代码如下:

public class PersonDaoImpl implements PersonDao

{

    //私有实例变量保存SessionFactory

         private SessionFactory sessionFactory;

         //依赖注入必须的setter方法

    public void setSessionFactory(SessionFactory sessionFactory)

         {

           this.sessionFactory = sessionFactory;

    }

         /**

          * 通过人名查找所有匹配该名的Person实例

          * @param name 匹配的人名

          * @return 匹配该任命的全部Person集合

          */

    public List findPersonsByName(final String name)

         {

           //创建HibernateTemplate实例

                   HibernateTemplate hibernateTemplate =

                         new HibernateTemplate(this.sessionFactory);

           //返回HibernateTemplateexecute的结果

                   return (List) hibernateTemplate.execute(

                //创建匿名内部类

                   new HibernateCallback()

                   {

              public Object doInHibernate(Session session) throws HibernateException

                            {

                   //使用条件查询的方法返回

                                     List result = session.createCriteria(Person.class)

                                                                     .add(Restrictions.like(“name”, name+”%”)

                                                                           .list();

                                    return result;

                     }

                });

    }

}

注意:方法doInHibernate方法内可以访问Session,该Session对象是绑定到该线程的Session实例。该方法内的持久层操作,与不使用Spring时的持久层操作完全相同。这保证对于复杂的持久层访问,依然可以使用Hibernate的访问方式。

评论

相关推荐

    HbernateTemplate的使用.pdf

    HbernateTemplate的使用.pdf

    2024年测风激光雷达行业分析报告.pptx

    行业报告

    mapreduce综合应用案例 - 招聘数据清洗.docx

    招聘数据清洗是一个典型的大数据处理任务,可以通过MapReduce来实现高效且可扩展的数据清洗过程。下面是一个简单的招聘数据清洗的MapReduce应用案例: 输入数据准备:将招聘数据集划分为若干个块,每个块包含多条记录。 Map阶段: 每个Map任务负责处理一个数据块。 Map函数解析输入记录,提取关键字段,如职位名称、公司名称、薪资等。 对于每条记录,如果关键字段缺失或格式不正确,可以忽略或标记为错误数据。 输出中间键值对,其中键为职位名称,值为包含相关信息的自定义对象或字符串。 Reduce阶段: 所有Map任务的输出会根据职位名称进行分组。 Reduce函数对每个职位名称的数据进行处理,可以进行去重、合并、计数等操作。 根据需求,可以进一步筛选、过滤数据,如只保留特定行业或薪资范围的职位。 输出最终结果,可以保存为文件或存储到数据库中。 通过以上MapReduce应用,可以高效地清洗大规模的招聘数据,并提供结构化、准确的数据用于后续的分析和决策。此外,由于MapReduce具有良好的容错性和可扩展性,可以处理海量数据并在分布式环境中实现高性能的数据清洗任务。

    Springboot+vue学生管理系统源码

    Springboot+vue学生管理系统源码 idea导入后端项目,设置好依赖,运行SystemApplication.java 使用vscode或者hbuilderx等工具打开前端项目,运行即可 另外前端vue页打包成静态资源放到后端里面了,即便不运行前端vue项目也是可以的 如果需要修改,则使用npm run bulid重新打包,生成的前端代码,放到后端代码的resources的static目录下

    学习数据结构和算法.zip

    大学生数据结构学习笔记和资料大全!

    机器视觉课程概要及重点分析

    适用于大学生的课程设计,报告等,包含图像处理等许多基础知识

    xp系统安装.net框架包括镜像和.net4.0安装包

    xp系统安装.net框架包括镜像和.net4.0安装包

    Java项目-基于Springboot+Vue的铁路订票管理系统的设计与实现(源码+万字LW+部署视频+代码讲解视频+全套软件)

    【基于Springboot+Vue的铁路订票管理系统的设计与实现】高分通过项目,已获导师指导。 本项目是一套基于Springboot+Vue的铁路订票管理系统,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者。也可作为课程设计、期末大作业 包含:项目源码、数据库脚本、开发说明文档、部署视频、代码讲解视频、全套软件等,该项目可以直接作为毕设使用。 项目都经过严格调试,确保可以运行! 项目详情: https://blog.csdn.net/u011832806/article/details/139635957

    GoogleCloud2024年数据和AI趋势报告+生成式AI+数据治理

    1. 生成式 AI 的影响 生成式 AI 革命及其对各行各业的颠覆性影响。 数据作为 AI 核心的重要性,以及如何利用数据激活生成式 AI。 企业成功利用生成式 AI 的关键要素:数据质量、安全、负责任的数据使用原则。 2. 五大趋势概览 趋势 1:生成式 AI 将在组织内加快数据洞见的交付 数据洞见民主化趋势,非技术用户使用生成式 AI 获取洞见。 现代 BI 工具与生成式 AI 的结合,提升数据素养和决策能力。 趋势 2:数据和 AI 的角色将变得模糊 数据角色界限模糊,数据分析师和数据科学家职责交叉。 生成式 AI 弥合技能差距,提升数据团队效率。 趋势 3:强有力的数据治理机制是实现 AI 创新的关键 暗数据问题,数据质量和治理的重要性。 趋势 4:运营数据将激发生成式 AI 的潜力 企业对与生成式 AI 集成的数据库的期望。 矢量搜索和矢量数据库在生成式 AI 中的应用。 趋势 5:2024 将是数据平台改造突飞猛进的一年 组织对旧数据库 AI 支持状况的不满意。 旧数据库的问题:技术落后、用户体验不佳、成本高昂。 3. Google Cloud 的帮助

    unity贪吃蛇大作战项目游戏源代码

    unity贪吃蛇大作战项目游戏源代码,源码演示视频地址:https://www.bilibili.com/video/BV1u1421C7cn/;unity贪吃蛇大作战项目游戏源代码,源码演示视频地址:https://www.bilibili.com/video/BV1u1421C7cn/;unity贪吃蛇大作战项目游戏源代码,源码演示视频地址:https://www.bilibili.com/video/BV1u1421C7cn/;unity贪吃蛇大作战项目游戏源代码,源码演示视频地址:https://www.bilibili.com/video/BV1u1421C7cn/;unity贪吃蛇大作战项目游戏源代码,源码演示视频地址:https://www.bilibili.com/video/BV1u1421C7cn/;unity贪吃蛇大作战项目游戏源代码,源码演示视频地址:https://www.bilibili.com/video/BV1u1421C7cn/;

    数据库管理工具:dbeaver-ce-23.0.1-linux.gtk.aarch64-nojdk.tar.gz

    1.DBeaver是一款通用数据库工具,专为开发人员和数据库管理员设计。 2.DBeaver支持多种数据库系统,包括但不限于MySQL、PostgreSQL、Oracle、DB2、MSSQL、Sybase、Mimer、HSQLDB、Derby、SQLite等,几乎涵盖了市场上所有的主流数据库。 3.支持的操作系统:包括Windows(2000/XP/2003/Vista/7/10/11)、Linux、Mac OS、Solaris、AIX、HPUX等。 4.主要特性: 数据库管理:支持数据库元数据浏览、元数据编辑(包括表、列、键、索引等)、SQL语句和脚本的执行、数据导入导出等。 用户界面:提供图形界面来查看数据库结构、执行SQL查询和脚本、浏览和导出数据,以及处理BLOB/CLOB数据等。用户界面设计简洁明了,易于使用。 高级功能:除了基本的数据库管理功能外,DBeaver还提供了一些高级功能,如数据库版本控制(可与Git、SVN等版本控制系统集成)、数据分析和可视化工具(如图表、统计信息和数据报告)、SQL代码自动补全等。

    python的字符界面程序

    这个文件资源包含一系列用 Python 编写的字符界面程序,每个程序文件对应一个独立的功能模块。 这些程序的编写难度从简单到中等不等,大多数程序实现单一功能,适合初学者和中级 Python 开发者编写和学习。它们的应用场景涵盖教育、数据处理、安全监控和用户界面美化等多个领域。这些程序可以作为学习 Python 基础知识和进阶技能的良好示例,也可以作为实际项目的基础模块进行扩展和应用。 九九乘法表:生成并打印九九乘法表,用于数学学习和练习。 斐波那契数列:生成并打印指定长度的斐波那契数列。 文本分词:对输入的文本进行分词处理,常用于自然语言处理任务。 简单密码校验 :对输入的密码进行基本校验,如长度、字符类型等。 简单密码加密:对输入的密码进行简单加密,如使用哈希算法。 打印彩色字符:在终端中打印带有颜色的字符,用于美化输出。 读取大文本文件;读取并处理大文本文件。 监测安全指标:监测系统或应用的安全指标,并输出相应报告。 显示进度条:在终端中显示操作进度条,提供用户反馈。 命令行程序:实现一个简单的命令行工具,接收用户输入并执行相应操作。

    MATRIX KEY 4*4触摸按键模块

    VK36N16I芯片 STM32F103驱动代码

    JAVA毕业设计之基于SpringBoot+Vue的乡政府管理系统(springboot+mysql)完整源码.zip

    基于SpringBoot+Vue的乡政府管理系统是一个现代化的Web应用程序,它使用了当今流行的技术栈来实现高效的后端服务和交互式的前端界面。以下是该系统使用的主要技术和功能介绍: 技术栈: SpringBoot:一个快速开发的框架,用于构建独立的、生产级别的Spring应用程序。它简化了配置过程,提供了大量默认配置,使得项目启动和运行更加便捷。 Vue.js:一个渐进式的JavaScript框架,用于构建用户界面。它易于上手,同时能够与其它库或已有项目整合,为开发者提供灵活性。 MySQL:一个关系型数据库管理系统,用于存储和管理数据。它支持标准的SQL语言,并且具有高性能、稳定性和易用性的特点。 功能模块: 用户管理:包括用户注册、登录、权限控制等功能,确保系统的安全性和用户的身份验证。 信息发布:允许管理员发布公告、通知等信息,以便及时传达给相关人员。 文件管理:提供文件上传、下载、删除等功能,方便管理和共享文档资料。 数据统计:对系统中的数据进行统计和分析,生成报表和图表,帮助决策者做出明智的决策。 任务管理:支持任务的创建、分配、跟踪和完成情况的记录,提高工作的效率和协作性。 留言板:提供一个平台供用户之间进行交流和讨论,促进信息共享和问题解决。 日志记录:记录系统的运行情况和用户的操作行为,便于问题的排查和安全审计。 数据备份与恢复:定期备份数据并能够在需要时进行恢复,保障数据的完整性和可靠性。 系统设置:允许管理员对系统的各项参数进行配置和管理,以满足不同场景的需求。 以上是该乡政府管理系统的主要技术和功能介绍。通过这些技术和功能的整合,该系统能够提供高效、安全、便捷的管理服务,满足乡政府的日常工作需求。

    EOM_Drive_Top.v

    EOM_Drive_Top.v

    数据库管理工具:dbeaver-ce-23.0.4-amd64.deb

    1.DBeaver是一款通用数据库工具,专为开发人员和数据库管理员设计。 2.DBeaver支持多种数据库系统,包括但不限于MySQL、PostgreSQL、Oracle、DB2、MSSQL、Sybase、Mimer、HSQLDB、Derby、SQLite等,几乎涵盖了市场上所有的主流数据库。 3.支持的操作系统:包括Windows(2000/XP/2003/Vista/7/10/11)、Linux、Mac OS、Solaris、AIX、HPUX等。 4.主要特性: 数据库管理:支持数据库元数据浏览、元数据编辑(包括表、列、键、索引等)、SQL语句和脚本的执行、数据导入导出等。 用户界面:提供图形界面来查看数据库结构、执行SQL查询和脚本、浏览和导出数据,以及处理BLOB/CLOB数据等。用户界面设计简洁明了,易于使用。 高级功能:除了基本的数据库管理功能外,DBeaver还提供了一些高级功能,如数据库版本控制(可与Git、SVN等版本控制系统集成)、数据分析和可视化工具(如图表、统计信息和数据报告)、SQL代码自动补全等。

    在C语言面试资格的一些建议

    在C语言面试资格的一些建议

    数据库管理工具:dbeaver-ce-23.1.0-amd64.deb

    1.DBeaver是一款通用数据库工具,专为开发人员和数据库管理员设计。 2.DBeaver支持多种数据库系统,包括但不限于MySQL、PostgreSQL、Oracle、DB2、MSSQL、Sybase、Mimer、HSQLDB、Derby、SQLite等,几乎涵盖了市场上所有的主流数据库。 3.支持的操作系统:包括Windows(2000/XP/2003/Vista/7/10/11)、Linux、Mac OS、Solaris、AIX、HPUX等。 4.主要特性: 数据库管理:支持数据库元数据浏览、元数据编辑(包括表、列、键、索引等)、SQL语句和脚本的执行、数据导入导出等。 用户界面:提供图形界面来查看数据库结构、执行SQL查询和脚本、浏览和导出数据,以及处理BLOB/CLOB数据等。用户界面设计简洁明了,易于使用。 高级功能:除了基本的数据库管理功能外,DBeaver还提供了一些高级功能,如数据库版本控制(可与Git、SVN等版本控制系统集成)、数据分析和可视化工具(如图表、统计信息和数据报告)、SQL代码自动补全等。

    D637真有效值测量电路——Multisim仿真.zip

    D637真有效值测量电路——Multisim仿真

    数据库管理工具:dbeaver-ce-23.2.1-amd64.deb

    1.DBeaver是一款通用数据库工具,专为开发人员和数据库管理员设计。 2.DBeaver支持多种数据库系统,包括但不限于MySQL、PostgreSQL、Oracle、DB2、MSSQL、Sybase、Mimer、HSQLDB、Derby、SQLite等,几乎涵盖了市场上所有的主流数据库。 3.支持的操作系统:包括Windows(2000/XP/2003/Vista/7/10/11)、Linux、Mac OS、Solaris、AIX、HPUX等。 4.主要特性: 数据库管理:支持数据库元数据浏览、元数据编辑(包括表、列、键、索引等)、SQL语句和脚本的执行、数据导入导出等。 用户界面:提供图形界面来查看数据库结构、执行SQL查询和脚本、浏览和导出数据,以及处理BLOB/CLOB数据等。用户界面设计简洁明了,易于使用。 高级功能:除了基本的数据库管理功能外,DBeaver还提供了一些高级功能,如数据库版本控制(可与Git、SVN等版本控制系统集成)、数据分析和可视化工具(如图表、统计信息和数据报告)、SQL代码自动补全等。

Global site tag (gtag.js) - Google Analytics