Spring整合Hibernate入门
一、HibernateTemplate概述
使用HibernateTemplate可将Hibernate 的持久层访问模板化,使用HibernateTemplate 非常简单。创建Hi bernateTemplate 实例后,注入一个SessionFactory 的引用,就可执行持久化操作。SessionFactoyr 对象可通过构造参数传入,或通过设值方式传入。
HibernateTemplate 提供如下三个构造函数:
• HibernateTemplate() 。
第一个构造函数:构造一个默认的HibernateTemplate 实例,因此,使用HibernateTemplate实例之前,还必须使用方法setSessionFactory(SessionFactorysessionFactory)来为HibernateTemplate 传入SessionFactory 的引用。
• HibernateTemplate(org.hibernate.SessionFactory sessionFactory)
第二个构造函数:在构造时已经传入SessionFactory 引用。
• HibernateTemplate(org.hibernate.SessionFactory sessionFactory, booleanallowCreate)
第三个构造函数:其boolean 型参数表明,如果当前线程己经存在一个非事务性的Session ,是否直接返回此非事务性的Session 。
接下来,看看如何开发Spring整合Hibernate的程序(XML版本)
一、导入项目jar包
需要到的jar包括:
1)hibernate相关jar
2)SpringIOC和AOP相关jar
3)Spring-ORM整合jar
4)mysql驱动程序
二、准备数据库表和实体类
创建数据库:
create database spring;
use spring;
创建表:
create table account(
id int primary key auto_increment,
name varchar(40),
money float
)character set utf8 collate utf8_general_ci;
package com.yiidian.domain;
import java.io.Serializable;
/**
* @author http://www.yiidian.com
*
*/
public class Account implements Serializable{
private Integer id;
private String name;
private Float money;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Float getMoney() {
return money;
}
public void setMoney(Float money) {
this.money = money;
}
@Override
public String toString() {
return "Account [id=" + id + ", name=" + name + ", money=" + money
+ "]";
}
}
三、编写Account类的Hibernate映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--
http://www.yiidian.com
-->
<hibernate-mapping>
<class name="com.yiidian.domain.Account" table="account">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="name" column="name"></property>
<property name="money" column="money"></property>
</class>
</hibernate-mapping>
四、配置applicationContext.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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties"/>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClass}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/yiidian/domain/Account.hbm.xml</value>
</list>
</property>
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
</beans>
五、编写测试类
package com.yiidian.test;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.orm.hibernate5.HibernateTemplate;
import com.yiidian.domain.Account;
/**
* @author http://www.yiidian.com
*
*/
public class HibernateTemplateDemo {
public static void main(String[] args) {
// 1.获取Spring容器
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
// 2.根据id获取bean对象
HibernateTemplate ht = (HibernateTemplate) ac.getBean("hibernateTemplate");
// 3.执行操作
List<Account> list = ht.loadAll(Account.class);
for (Account account : list) {
System.out.println(account);
}
}
}
六、运行结果
热门文章
优秀文章