1、Hibernate:一个开源的对象关系映射框架,是对JDBC的轻量级封装,可以对自动生成SQL并执行。
2、Hibernate的配置文件:
(1)*.cfg.xml(Hibernate的属性配置文件)文件头如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
</session-factory>
</hibernate-configuration>
主要需要配置数据源(在Spring配置文件中配置),sessionFactory(在Spring配置文件中配置),方言(数据库类型和Java类型之间的转换),SQL的显示和格式,数据表的生成策略。
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
注:注意数据库中表生成时的引擎类型,只有在ENGINE=InnoDB时才支持事务。
(2)*.hbm.xml(映射配置文件):文件头:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
</hibernate-mapping>
每一个数据类都需要有一个对应的hbm映射配置文件
<class name="com.robin.spring.hibernate.Account" table="Hibernate_account">
<id name="id" type="Integer">
<column name="id"></column>
<generator class="native"></generator>
</id>
<property name="name" type="String">
<column name="name"></column>
</property>
<property name="balance" type="Double">
<column name="balance"></column>
</property>
</class>
3、Spring配置文件
(1)配置数据源
(2)配置sessionFactory(配置dataSource、configLocation、mappingLocation属性)
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
<property name="mappingLocations" value="classpath*:*.hbm.xml"></property>
</bean>
注:这里的classpath后面的*不能少不然冒号后面的*就不起作用了。
(3)配置事务(配置事务管理器transactionManager、事务属性tx:Advice、事务切点aop:config)
<!--基于注解的形式-->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
<!--基于配置文件的形式-->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true"></tx:method>
<tx:method name="*"></tx:method>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="pointcut" expression="execution(* com.robin.spring.hibernate.service.*.*(..))"></aop:pointcut>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"></aop:advisor>
</aop:config>