Spring在數據訪問方面提供了模板化和Dao支持類的提供,方便操做數據庫。java
1、Spring JDBC (詳細配置:http://my.oschina.net/wangning0535/blog/535590?fromerr=MIriquMm)mysql
一、配置數據源 DataSourceweb
無論選擇哪種Spring Dao的支持方式,你都須要配置一個數據源的引用。配置方式有三種:spring
①、使用JNDI查找數據源:sql
②、使用數據源鏈接池:(dbcp c3p0 druid)數據庫
<!-- 配置數據源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/myjob"></property> <property name="username" value="root"></property> <property name="password" value="root"></property> <property name="initialSize" value="5"></property> <property name="maxActive" value="10"></property> </bean>
③、使用JDBC驅動程序定義的數據源:apache
DriverManagerDataSource:每次請求時都會返回一個新建的連接。session
SingleConnectionDataSource:在每一個鏈接請求時都會返回同一個鏈接。app
二、使用JDBC模板dom
你能夠選擇使用JDBC模板或Dao支持類,比較推薦Dao支持類
①、JdbcTemplate 提供最簡單的數據訪問功能
②、NamedParameterJdbcTemplate:經過該模板,能夠把參數做爲查詢的條件傳入方法中。
③、SimpleJdbcTemplate:(通常都使用這種)結合了一些自動裝箱的功能,整合了NamedParameterJdbcTemplate
如何配置JdbcTemplate:
第一種方式:在Spring的Ioc容器裏配置一個JdbcTemplate的bean,將DataSource注入進來,而後再把JdbcTemplate注入到Dao中。
第二種方式:咱們能夠在本身定義的Dao實現類中注入一個DataSource引用來完成JdbcTemplate的實例化。也就是從外部注入DataSource到Dao中,而後本身實例化JdbcTemplate,而後將DataSource設置到JdbcTemplate對象中。
三、使用Dao支持類:
①、JdbcDaoSupport
②、NamedParameterJdbcDaoSuport
③、SimpleJdbcDaoSupport
Dao支持類的配置方式:
Spring提供的JdbcDaoSupport類(NamedParameterJdbcDaoSupport、SimpleJdbcDaoSupport同理),這個類中定義了JdbcTemplate屬性,也定義了DataSource屬性,當設置DataSource屬性的時候,會建立jdbcTemplate實例,因此咱們本身編寫的Dao類只要繼承JdbcDaoSupport類,而後注入DataSource便可。
一個完整的配置方式:
<?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:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- bean實體類配置 --> <bean id="SysCustomer" class="com.edu.bean.SysCustomer"></bean> <!-- dao類配置 --> <!-- 使用第一種配置Jdbctemplate方式 --> <bean id="sysCustomerDao" class="com.edu.dao.impl.SysCustomerDaoImpl"> <property name="jdbcTemplate" ref="jdbcTemplate"></property> </bean> <!-- jdbcDaoSupport配置方式 --> <bean id="sysUserDao" class="com.edu.dao.impl.SysUserDaoImpl"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- service配置 --> <bean id="sysCustomerService" class="com.edu.service.SysCustomerService"> <property name="sysCustomerDao" ref="sysCustomerDao"></property> </bean> <bean id="sysUserService" class="com.edu.service.SysUserService"> <property name="sysUserDao" ref="sysUserDao"></property> </bean> <!-- 配置數據源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/myjob"></property> <property name="username" value="root"></property> <property name="password" value="root"></property> <property name="initialSize" value="5"></property> <property name="maxActive" value="10"></property> </bean> <!-- jdbcTemplate --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean> </beans>
2、Spring Hibernate整合
Spring對Hibernate配置文件hibernate.cfg.xml的集成至關好,能夠在Spring中配置Hibernate的SessionFacotry從而取代Hibernate的Hibernate.cfg.xml文件和HibernateSessionFactory.java
Spring在集成Hibernate時又分爲兩種形式:(集成後就不須要Hibernate.cfg.xml文件了)
一、繼續使用Hibernate的映射文件*.hbm.xml
二、使用JPA註解形式的pojo對象,而去掉Hibernate的映射文件*.hbm.xml文件
<1>、繼續使用Hibernate的映射文件*.hbm.xml文件
Spring集成Hibernate時去掉了Hibernate.cfg.xml文件,此時若是還想繼續使用Hibernate的映射文件*.hbm.xml的話,在配置Hibernate的SessionFactory時就要配置以何種方式尋找Hibernate的映射文件*.hbm.xml。
此時Spring配置SessionFactory的class應爲org.springframework.orm.hibernate4.LocalSessionFactoryBean (看你使用的Hibernate版本)
org.springframework.orm.hibernate4.LocalSessionFactoryBean這個類裏有好幾個屬性用來查找Hibernate的映射文件:mappingResources、mappingLocations、mappingDirectoryLocation與mappingJarLocations
他們的區別:
①、mappingResources:指定classpath下具體的映射文件名
<property name="mappingResources"> <value>petclinic.hbm.xml </value> </property>
②、mappingLocations:能夠指定任何文件路徑,而且能夠指定前綴:classpath、file等
<property name="mappingLocations"> <value>/WEB-INF/petclinic.hbm.xml </value> </property> <property name="mappingLocations"> <value>classpath:/com/company/domain/petclinic.hbm.xml </value> </property>
也能夠用通配符指定,"*"指定一個文件(路徑)名,"**"指定多個文件(路徑)名
<property name="mappingLocations"> <value>classpath:/com/company/domainmaps/*.hbm.xml </value> </property>
上面的配置是在com/company/domain包下任何maps路徑下的hbm.xml文件都被加載爲映射文件
③、經過mappingDirectoryLocations:指定映射的文件路徑
<property name="mappingDirectoryLocations"> <list> <value>WEB-INF/HibernateMappings</value> </list> </property>
也能夠經過classpath來指出
<property name="mappingDirectoryLocations"> <list> <value>classpath:/XXX/package/</value> </list> </property>
④、 mappingJarLocations:指定加載的映射文件在jar文件中
<二>、去掉Hibernate的*.hbm.xml文件,可使用jpa註解形式的pojo對象,而去掉*.hbm.xml的Hibernate映射文件時配置方法
Spring集成Hibernate時去掉了Hibernate.cfg.xml,此時若是使用jpa註解形式的pojo對象,而去掉Hibernate的映射文件*.hbm.xml的話,在配置Hibernate的SessionFactory時就要配置以何種方式尋找jpa註解形式的pojo映射對象
此時spring中配置SessionFactory bean時它對應的class應爲org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean
例如:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /><!-- 引用數據源 --> <property name="packagesToScan"> <list> <value>com.cn.nos.services.pojo*</value><!-- 加載hibernate的jpa註解形式的實體類 --> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <!--<prop key="hibernate.current_session_context_class">thread</prop>--> </props> </property> </bean>
AnnotationSessionFactoryBean中查找jpa註解形式的pojo映射對象的屬性有:annotatedClasses、packagesToScan
① annotatedClasses:指定classpath下指定的註解映射實體類的類名
<property name="annotatedClasses"> <list> <value>com.test.ObjectBean</value><!-- 能夠在這個list中配置多個 --> </list></property>
② packagesToScan指定映射文件的包名
<property name="packagesToScan"> <list> <value>com.cn.nos.services.pojo*</value><!-- 加載hibernate的jpa註解形式的實體類 --> </list></property>