首页 > 代码库 > Spring JDBCTemplate

Spring JDBCTemplate

Spring 支持三种数据访问技术

JDBC操作 -------- JdbcTemplate 
Hibernate框架操作 -------- HibernateTemplate 
IBatis 框架操作 -------- SqlMapClientTemplate 

JdbcTemplate 使用和 Apache DBUtils 非常类似 

导入jar包 : 6个Spring最基本jar包 、spring-jdbc 、spring-tx 、数据库驱动 

1、 手动JdbcTemplate 编程 

DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource(); // 连接池
		// 设置四个基本连接参数
		driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
		driverManagerDataSource.setUrl("jdbc:mysql:///spring3day2");
		driverManagerDataSource.setUsername("root");
		driverManagerDataSource.setPassword("abc");
2、使用配置文件 开发JdbcTemplate (将连接池配置到文件中 )
在applicationContext 中配置三种数据源 
Spring 数据源实现类 DriverManagerDataSource
DBCP 数据源 BasicDataSource 
C3P0 数据源  ComboPooledDataSource

配置DBCP 导入 

com.springsource.org.apache.commons.dbcp-1.2.2.osgi.jar
com.springsource.org.apache.commons.pool-1.5.3.jar
配置c3p0 导入

com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar
3、 使用applicationContext.xml 配置数据库连接基本参数,XML格式文件维护起来不是很方便 
* 在实际开发中,将JDBC的四个基本连接参数 抽取properties 属性文件 ,进行维护 

在applicationContext.xml  <context:property-placeholder> 引入一个外部properties 文件  

<!-- 引入一个外部 properties文件 -->
	<context:property-placeholder location="classpath:jdbc.properties"/>

	<!-- 第三种 c3p0数据源  -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value=http://www.mamicode.com/"${jdbc.driverClass}">>

4、JdbcTemplate 模板增删改查 
update(sql, args... ) 增加、删除、修改 
<T> T query(String sql, ResultSetExtractor<T> rse, Object... args)  查询  ----------------- 完整封装过程 
		List<User> users = jdbcTemplate.query("select * from user", new ResultSetExtractor<List<User>>(){
			@Override
			public List<User> extractData(ResultSet rs) throws SQLException,
					DataAccessException {
				List<User> users = new ArrayList<User>();
				while(rs.next()){
					User user = new User();
					user.setId(rs.getInt("id"));
					user.setName(rs.getString("name"));
					users.add(user);
				}
				return users;
			}
		});

<T> List<T>  query(String sql, RowMapper<T> rowMapper, Object... args)   查询 ------------ 只负责对象本身封装过程 
		List<User> users = jdbcTemplate.query("select * from user", new RowMapper<User>(){
			@Override
			public User mapRow(ResultSet rs, int rowNum) throws SQLException {
				User user = new User();
				user.setId(rs.getInt("id"));
				user.setName(rs.getString("name"));
				return user;
			}
		});

查询结果是一个List , 使用query方法 
查询结果是一个Object, 使用queryForObject 方法 

5、 Spring为了DAO 可以方便注入各种持久化技术 模板操作类, 提供一组DaoSupport 类
* 只需要让自己DAO 继承 DaoSuppert 获得各种模板 


例如: DAO中使用JdbcTemplate 
class UserDAO extends JdbcDaoSupport { 

}

开发web应用,在工程导入 spring-web.jar 


配置web.xml  
<!-- Spring核心监听器 -->
  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- Spring 配置文件位置 -->
  <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>classpath:applicationContext.xml</param-value>
  </context-param>


Spring JDBCTemplate