关于Spring的数据访问---Hibernate
首先我们来回忆下使用Hibernate API 创建SessionFactory的过程。
1)创建好对象关系映射文件xxx.hbm.xml
2)通过Hibernate配置文件hibernate.cfg.xml将所有的xxx.hbm.xml 映射文件组装起来
3)通过读取Hibernate配置文件得到SessionFactory的实例
Configuration config = new Configuration().configure("xxx.cfg.xml"); SessionFactory sessionFactory = config.buildSessionFactory();
不妨来看下例子:
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!--数据源--> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property> <property name="connection.url">jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=数据库名</property>
<property name="connection.username">用户名</property> <property name="connection.password">密码</property> <!--属性--> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="use_sql_comments">true</property> <!--对象关系映射文件--> <mapping resource="com/bbs/domain/user.hbm.xml"/>
<mapping resource="com/bbs/domain/book.hbm.xml"/> </session-factory> </hibernate-configuration>
现在我们要写出更具有Spring风格的配置,完全抛开hibernate.cfg.xml配置文件,在applicationContext.xml中利用LocalSessionFactoryBean来达到相同目的。代码如下:
<!--1.引入定义jdbc连接的属性文件 --> <context:property-placeholder location="classpath:jdbc.properties" /> <!--2.配置数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClass" value="${jdbc.driver}" /> <!--数据库连接驱动 --> <property name="jdbcUrl" value="${jdbc.url}" /> <!--数据库地址 --> <property name="user" value="${jdbc.username}" /> <!--用户名 --> <property name="password" value="${jdbc.password}" /> <!--密码 --> </bean> <!--3.配置Hibernate的session工厂 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /><!--数据源--> <property name="packagesToScan" value="com.**" /><!-- 扫描并加载基于JPA注解PO类目录(此目录下所有带注解的实体类) --> <property name="hibernateProperties"><!-- 指定Hibernate的属性信息 --> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> <!--加载实体类的映射文件位置及名称 --> <property name="mappingLocations" value="classpath:config:/*.hbm.xml"></property> </bean>
注意:mappingLocations属性的类型是Resource[], mappingJarLocations则用于映射文件在JAR文件中, mappingDirectoryLocations则用于放了很多映射文件的的目录,mappingResources通过相对于类路径的方式指定映射文件,属性类型为String[],