一、Spring JdbcTemplate 使用
1 、 Spring 提供 不同持久化技术 模板工具类
JDBC ---- org.springframework.jdbc.core.JdbcTemplate
Hibernate3.0 --- org.springframework.orm.hibernate3.HibernateTemplate
IBatis(MyBatis) --- org.springframework.orm.ibatis.SqlMapClientTemplate
JPA --- org.springframework.orm.jpa.JpaTemplate
JdbcTemplate 是用来简化JDBC操作的 , 操作和Apache DbUtils 框架非常类似
2、 快速入门
步骤一 : 导入jar包
在Spring 最基本jar包 基础上, 导入JDBC模板开发包
spring-jdbc-3.2.0.RELEASE.jar --- 存放JdbcTemplate 工具类
spring-tx-3.2.0.RELEASE.jar ---- 进行事务管理
操作数据库 别忘了驱动
步骤二 :编写无配置文件 入门案例
1) 创建连接池
2) 构造jdbcTemplate对象
3) 执行SQL语句
3、 使用xml 配置数据库连接池
常用数据源
* Spring 数据源实现类 DriverManagerDataSource
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql:///spring3day2"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
* DBCP 数据源 BasicDataSource
导入jar包
com.springsource.org.apache.commons.dbcp-1.2.2.osgi.jar
com.springsource.org.apache.commons.pool-1.5.3.jar
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql:///spring3day2"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
* C3P0 数据源 ComboPooledDataSource (重点掌握)
导入jar包
com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql:///spring3day2"></property>
<property name="user" value="root"></property>
<property name="password" value="abc"></property>
</bean>
在Spring 直接修改常用属性,不方便,可以将属性抽取出来 建立单独 properties 文件,在Spring 中引入properties
在Spring的applicationContext.xml 引入properties 有两种写法
写法一 :
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties"></property>
</bean>
将连接池配置参数,使用 ${属性key}
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<span style="white-space:pre"> </span><context:property-placeholder location="classpath:jdbc.properties">
UserDAO 实现数据库操作,必须要使用 JdbcTemplate, Spring 将jdbcTemplate 注入 UserDAO
1) Spring 为每种持久化技术 提供一个支持类
支持类作用,在DAO 中注入 模板工具类
JDBC : org.springframework.jdbc.core.support.JdbcDaoSupport
Hibernate 3.0 :org.springframework.orm.hibernate3.support.HibernateDaoSupport
iBatis :org.springframework.orm.ibatis.support.SqlMapClientDaoSupport
用户自己编写DAO 只需要继承 JdbcDaoSupport, 就可以注入 JdbcTemplate
2) 通过jdbcTemplate 提供 int update(String sql, Object... args) 实现增加 、修改 、删除
3) 简单查询,返回原始数据类型, String类型
String sql = "select count(*) from user"; // int queryForInt(String sql)
String sql = "select name from user where id = ? "; // <T> T queryForObject(String sql, Class<T> requiredType, Object... args)
4) 复杂查询
JdbcTemplate 没有handler, 手动完成对象封装
编写实体类 RowMapper
class UserRowMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
// rs 已经指向每一条数据,不需要自己调用 next,将rs指向数据 转换 User对象
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
return user;
}
}
查询单个对象 <T> T queryForObject(String sql, RowMapper<T> rowMapper, Object... args)
return this.getJdbcTemplate().queryForObject(sql, new UserRowMapper(),id);
查询所有对象List集合 <T> List<T> query(String sql, RowMapper<T> rowMapper, Object... args)
return this.getJdbcTemplate().query(sql, new UserRowMapper());