Spring对多个持久化技术提供了集成支持,包括hibernate,mybatis,JPA,JDO, Spring面向DAO制定了一个通用的异常体系,屏蔽具体持久化技术的异常,使业务层和具体的持久化技术实现解耦.
DAO即Data Access Object ,是用于访问数据的对象,DAO不仅屏蔽了数据存储的最终介质的不同,也屏蔽了具体的实现技术的不同.
数据源
数据源表示可用于应用程序的数据。 更具体而言,数据源表示您希望在应用程序中使用的数据。 数据源可从数据库(包括本地数据库文件)、服务以及对象中获得。
不管采用何种持久化技术,都必须拥有数据连接,在spring中,数据连接是通过数据源获得的,在以往的应用中,数据源一般是由应用服务器提供的,在spring中,不但可以通过JNDI获取应用服务器的数据源,也可以直接在Spring容器中配置数据源,,还可以通过代码的方式创建一个数据源,以便进行无容器依赖的单元测试.
配置一个数据源
两个数据源实现类包,一个Apache的DBCP,一个是c3p0
c3p0是一个开放源码的JDBC数据源实现项目,实现了JDBC3和JDBC2拓展规范说明的Connection和Statement池.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> <property name="jdbcUrl" value="${dataSource.url}"></property> <property name="user" value="${dataSource.username}"></property> <property name="password" value="${dataSource.password}"></property> <property name="idleConnectionTestPeriod" value="60" /> <property name="initialPoolSize" value="5" /> <property name="maxIdleTime" value="60" /> <property name="maxPoolSize" value="10" /> <property name="minPoolSize" value="5" />
<property name="maxStatements" value="100" /> <property name="maxStatementsPerConnection" value="3" />
<property name="preferredTestQuery" value="select 1" /> <property name="acquireRetryAttempts" value="3" /> <property name="acquireRetryDelay" value="1000" />
<property name="checkoutTimeout" value="30000" /> </bean>
|
使用属性文件
数据源的配置信息可能经常改动,所以一般将数据源的配置信息独立出来到一个属性文件中,通过
<context:property-placeholder>
引入属性文件,以${xxx}的方式引用属性
1 2 3 4 5 6 7
| <context:property-placeholder location="/WEB-INF/jdbc.properties"/> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> <property name="jdbcUrl" value="${dataSource.url}"></property> <property name="user" value="${dataSource.username}"></property> <property name="password" value="${dataSource.password}"></property> </bean>
|
1 2 3
| dataSource.url = jdbc:mysql://localhost:3309/sample dataSource.username=root dataSource.password=123
|