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

下面是 HibernateTemplate的常用方法。

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

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

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

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

load或get(Classentity Class,Serializable id): 根据主键加载特定持久化类的实例。

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

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

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

setMaxResults(intmax Results): 设置分页的大小。

HibernateTemplate与session的区别

使用方法没有多大的区别,只是使用时不用自己设置事务,也不用关闭session。

我们使用HibernateTemplate,有一个很重要的原因就在于我们不想直接控制事务,不想直接去获取,打开Session,开始一个事务,处理异常,提交一个事务,最后关闭一个SessionHibernateTemplate 是Hibernate操作进行封装,我们只要简单的条用HibernateTemplate 对象,传入hql和参数,就获得查询接口,至于事务的开启,关闭,都交给HibernateTemplate  对象来处理我们自己只专注于业务,不想去作这些重复而繁琐的操作。我们把这些责任全部委托给了 HibernateTemplate,然后使用声明式的配置来实现这样的功能。

如果我们通过类似getSession()这样的方法获得了Session,那就意味着我们放弃了上面所说的一切好处。

在使用Spring的时候 DAO类继承了 HibernateDaoSupport 类又因为HibernateDaoSupport 类里面有个属性 hibernateTemplate;所以就可以进行设置注,也就是Spring的一大优点面向切面式编程,进行设置注入,在Tomcat启动的时候由 Tomcat 加载 ApplicationContext.xml,配置文件给 hibernateTemplate赋值,这样的话就实现了,在使用某个对象之前不用给他实例化

实例:

hibernate自动生成数据库表的实体类

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/mydb</property>
<property name="hibernate.connection.username">root</property>
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<!--
<mapping resource="com/itnba/maya/entities/Family.hbm.xml"/>
<mapping resource="com/itnba/maya/entities/Info.hbm.xml"/>
<mapping resource="com/itnba/maya/entities/Nation.hbm.xml"/>
<mapping resource="com/itnba/maya/entities/Title.hbm.xml"/>
<mapping resource="com/itnba/maya/entities/Work.hbm.xml"/>
-->
</session-factory> </hibernate-configuration>
db.properties文件
driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/mydb
user=root
password=
minPoolSize=5
maxPoolSize=20
initialPoolSize=5

Spring的beans.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"
>
<!-- 自动扫描 -->
<context:component-scan base-package="com.itnba.maya.entities"></context:component-scan>
<!--加载资源对象 -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 实例化c3p0对象 -->
<bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource">
<property name="driverClass" value="${driverClass}"></property>
<property name="jdbcUrl" value="${jdbcUrl}"></property>
<property name="user" value="${user}"></property>
<property name="password" value="${password}"></property>
<property name="minPoolSize" value="${minPoolSize}"></property>
<property name="maxPoolSize" value="${maxPoolSize}"></property>
<property name="initialPoolSize" value="${initialPoolSize}"></property>
</bean>
<!-- 配置Hibernate的SessionFactory -->
<bean class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" id="factory">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
<property name="mappingLocations" value="com/itnba/maya/entities/*.hbm.xml"></property>
</bean>
<!-- 配置spring的声明性事务 -->
<bean class="org.springframework.orm.hibernate5.HibernateTransactionManager" id="transactionManager"><!-- 要根据hibernate的版本配置 -->
<property name="sessionFactory" ref="factory"></property>
</bean>
<!-- 配置事务属性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!-- 配置事务切入点 -->
<aop:config>
<aop:pointcut expression="execution(* com.itnba.maya.entities.*.*(..))" id="pointCut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut"/>
</aop:config>
<!-- 配置 HibernateTemplate -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
<property name="sessionFactory" ref="factory"></property>
</bean> </beans>

 InfoDao类

package com.itnba.maya.entities;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateTemplate;
import org.springframework.stereotype.Repository;
@Repository//自动扫描
public class InfoDao {
@Autowired//注解
private HibernateTemplate ht; public void select() {
Info data =ht.get(Info.class, "p005");
System.out.println(data.getName()); }
/* 之前用是下面的之中写法
private SessionFactory factory;
public Session getSession(){
return factory.getCurrentSession();
}
public void select() {
Info data = getSession().get(Info.class, "p005");
System.out.println(data.getName()); }
*/
}

main方法类

package com.itnba.maya.entities;

import java.sql.Connection;
import java.sql.SQLException; import javax.sql.DataSource; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) throws SQLException {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
InfoDao data=(InfoDao) context.getBean("infoDao");
data.select();
} }

结果还是一样的

HibernateTemplate的使用的更多相关文章

  1. SSH实战 · 用spring框架下的hibernatetemplate的get方法出现的问题

    用get方法查询:      return this.getHibernateTemplate().get(Product.class, pid); 出现错误为:id to load is requi ...

  2. Hibernate整合Spring异常'sessionFactory' or 'hibernateTemplate' is required

    今日在写GenericDao时,发现了一个异常,内容如下: org.springframework.beans.factory.BeanCreationException: Error creatin ...

  3. java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required

    java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required 严重: Exceptio ...

  4. HibernateTemplate的一些常用方法总结

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

  5. 'sessionFactory' or 'hibernateTemplate' is required解决方法

    这种情况就是在通过spring配置hibernate4的时候(注意,这里是hibernate4不是hibernate3,hibernate3的),使用的是HibernateDaoSupport的这种方 ...

  6. HibernateTemplate和HibernateDaoSupport(spring注入问题)

    HibernateTemplate HibernateTemplate是spring提供的一个就hibernate访问持久层技术而言.支持Dao组件的一个工具.HibernateTemplate提供持 ...

  7. hibernateTemplate.find或hibernateTemplate.save()执行操作没有反应,但是有sql语句

    今天使用ssh框架搭建的项目,进行查询和保存操作,使用的是 public Collection<T> getAllEntry() { return this.hibernateTempla ...

  8. 。。。HibernateTemplate与Session。。。

    今天在学习Spring框架的时候,突然发现了这个类----HibernateTemplate,这个类与Session一开始认为是差不多的,这个HibernateTemplate类对象拥有Session ...

  9. 集成Spring后HibernateTemplate实现分页

    spring 整合 hibernate 时候用的 HibernateTemplate 不支持分页,因此需要自己包装一个类进行分页,具体实现如下...使用spring的hibernateTemplate ...

  10. 在HibernateTemplate里执行Sql语句

    如下所示只能执行非Select语句: public static void executeSQL(HibernateTemplate hibernateTemplate, String sql) { ...

随机推荐

  1. failed (1113: No mapping for the Unicode character exists in the target multi-byte code page), client: 127.0.0.1...

    nginx部署网站后,访问域名,网页显示  500 Internal Server Error ,经查看发现nginx的error.log中有报错: failed (1113: No mapping ...

  2. php 实现购物车功能,以大苹果购物网为例,上图上代码。。。。

    首先是几个简单的登录页面 <body> <form action="chuli.php" method="post"> <div ...

  3. (原创)我对未来的人类的发展,以及AI技术发展的一些思考。

    最近AI非常的火,不仅仅是阿尔法狗的成功,因为它击败了人类最强的大脑,颠覆了人类几千年来的对传统的认识,也让人类意识 到了一个问题:天外有天,人外有AI. 那么AI究竟会对人类的未来造成什么深远的影响 ...

  4. Visual Studio 2017 ASP.NET Core开发

    Visual Studio 2017 ASP.NET Core开发,Visual Studio 2017 已经内置ASP.NET Core 开发工具. 在选择.NET Core 功能安装以后就可以进行 ...

  5. Pow(x, n) leetcode

    Implement pow(x, n). Subscribe to see which companies asked this question 利用依次消去二进制位上的1,来进行计算 double ...

  6. 1789: [Ahoi2008]Necklace Y型项链

    1789: [Ahoi2008]Necklace Y型项链 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 421  Solved: 258[Submit] ...

  7. 1613: [Usaco2007 Jan]Running贝茜的晨练计划

    1613: [Usaco2007 Jan]Running贝茜的晨练计划 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1252  Solved: 609 ...

  8. 1022: [SHOI2008]小约翰的游戏John

    1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1322  Solved: 829[Submit][ ...

  9. Java中的枚举的治理

    版权声明:本文为博主原创文章,转载请注明出处,欢迎使劲喷 一.为啥用枚举&为啥要对枚举进行治理 1.先来说说为啥用枚举 表中某个字段标识了这条记录的状态,我们往往使用一些code值来标识,例如 ...

  10. 学学简单的-------------javaScript基础

    首先知道什么是JavaScript? JavaScript是一种描述性语言,也是一种基于对象和事件驱动的.并具有安全性的脚本语言. 2.JavaScript由三部分组成:①ecmascript ②Bo ...