Spring整合Hibernate的优势
•通用的资源管理,直接管理Hibernate底层的DataSource、SessionFactory。
•有效的Session管理
•声明式的事务管理。
•异常包装。Spring把所有checked异常包装成runtime异常。
(1)导包:如果已经有javassist包会冲突,删掉项目中低版本的javassist包
C3P0的两个jar包
数据库驱动(可以是MySql也可以是Oracle)
(2)在Spring的xml文件里配置Hibernate的数据源(要加载db.properties文件,所以这个文件要放在类路径下)
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
p:url="${jdbc.url}"
p:driverClass="${jdbc.driverClass}"
p:username="${jdbc.username}"
p:password="${jdbc.password}"
/>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
p:configLocation="classpath:hibernate.cfg.xml"
p:dataSource-ref="dataSource"/>
sessionFactory底层封装了dataSource,而且hibernate一些相关的信息放在hibernate.cfg.xml中配置
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.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property><!-- 自动建表 -->
<mapping class="com.ssh.commons.po.Userpo"/>
</session-factory>
</hibernate-configuration>
hibernate.cfg.xml文件配置完实体类的映射之后,去实体类中添加注解
@Entity
@Table(name="table_name")
@Id
@Column(name="column_name")
@GeneratedValue(strategy=GenerationType.IDENTITY)[主键自增策略]等
此时,Web应用一启动就会创建Spring容器,创建Spring容器就会执行applicationContext.xml文件里的bean(dataSource和SessionFactory等),在初始化SessionFactory时就会加载hibernate.cfg.xml,就会在hibernate.cfg.xml文件中加载对应的持久化类(反射创建类对象)
如果hibernate.cfg.xml文件中配置的了
<property name="hibernate.hbm2ddl.auto">update</property>就会在数据库创建对应的表(如果不存在此表)