传统的JDBC访问技术(效率低)
Jdbc数据访问的一般流程:
获取数据源 Class.forName(……);
根据数据源获取数据连接 Connerctionconn=DriverManager.getConnerction(url,name,pwd);
设定事务开始 conn.setAutoCommit(false);Statement st=conn.createStatement();
执行操作 st.executeUpdate(sql);
提交/回滚 conn.commit();/conn.rollback();
省略关闭资源
Spring的数据访问
Spring有三种通过XML文件实现DataSource注入的方式:
1. spring的DriverManagerDataSource
2. DBCP连接池
3. Tomcat的JNDI
一、 spring的DriverManagerDataSource(效率和传统的JDBC区别很小)
在XML中配置数据源时,配置该数据源的BeanId为dataSource,他的类处于org.springframework.jdbc.datasource包下,名称为DriverManagerDataSource.class。
之后配置其数据库信息,阅读其源代码,可以看到DriverManagerDataSource类提供了四种构造方法。
分别是:
publicDriverManagerDataSource() { } |
public DriverManagerDataSource(Stringurl) { setUrl(url); } |
public DriverManagerDataSource(Stringurl, String username, String password) { setUrl(url); setUsername(username); setPassword(password); } |
public DriverManagerDataSource(Stringurl, PropertiesconProps) { setUrl(url); setConnectionProperties(conProps); } |
同时DriverManagerDataSource的父类为AbstractDriverBasedDataSource.父类的源代码中主要由四个属性为:
private Stringurl; private Stringusername; private PropertiesconnectionProperties; |
所以,我们在进行设值注入时,可以根据自己的需求注入相应的数据。
当然根据源码同样可以使用配置文件注入。
接下来使用声明式事务管理。
之后进行声明式事务管理,这里使用的同一包(org.springframework.jdbc.datasource)下的类DataSourceTransactionManager.class。
其中有一个属性privateDataSourcedataSource;
所以在配置该Bean时,我们需要将之前配置的dataSource传入进去。
之后配置一个实例Bean进行操作即可。
配置文件代码:
<?xml version="1.0" encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- 设定DataSource的方法 --> <!-- 配置该数据源的BeanId为dataSource,他的类处于org.springframework.jdbc.datasource包下,名称为 DriverManagerDataSource.class--> <beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!-- 配置数据库的信息 --> <propertyname="url"><!--数据库连接 --> <value>jdbc:mysql://DataBaseUrl/DataBaseName/TableName</value> </property> <propertyname="username"> <value>username</value> </property> <propertyname="password"> <value>pwd</value> </property> <!-- 上面是直接设值注入三个属性,还可以使用配置文件注入。 还可以使用资源文件的方式进行配置。 --> </bean> <!-- 接下来设定声明式事务管理,这里使用的是同包(org.springframework.jdbc.datasource)下的 DataSourceTransactionManager.class类。 --> <beanid="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 将数据源注入 --> <propertyname="dataSource"> <refbean="dataSource"></ref> </property> </bean>
</beans>
|
在配置datasource时还应该配置DriverClassName:
二、 使用DBCP连接池
——DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要2个包:commons-dbcp.jar,commons-pool.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。
在spring中使用DBCP连接池需要用到三个jar包:
commons-collections.jar包、commons-dbcp.jar、commons-pool.jar
之后在XML配置datasource时,使用dbcp中BasicDataSource类即可。
三、 使用Tomcat的JNDI
使用tomcat的JNDI容易,首先需要在Tomcat的server.xml文件中配置,之后使用jndi的JndiObjectFactoryBean作为datasource。