1. 概述
- Spring 框架提供了很多持久层的模板类来简化编程;
- Spring 框架提供的JDBC模板类:
JdbcTemplate 类
; - Spring 框架提供的整合 Hibernate 框架的模板类:
HibernateTemplate 类
2. 环境搭建
2.1 创建数据库表结构
CREATE TABLE t_account(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20),money DOUBLE
);
2.2 导入 jar 包
- Spring 框架的基本开发包(6个);
- Spring 的传统AOP的开发包
spring-aop-4.3.10.RELEASE
org.aopalliance-1.10.0
(在 Spring 依赖包中)
- aspectJ 的开发包
org.aspectj.weave-1.6.8.RELEASE.jar
(在 Spring 依赖包中)spring-aspects-4.3.10.RELEASE.jar
- JDBC 模板所需 jar 包
mysql-connector-java.jar
: MySql 驱动包;Spring-jdbc.jar
;Spring-tx.jar
: Spring 事务包;
2.3 编写测试代码
// 第一种方式: 采用 new 对象的方式完成
@Test
public void fun(){// 使用 Spring 内置的连接池,创建连接池DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setDriverClassName("com.mysql.jdbc.Driver");dataSource.setUrl("jdbc:mysql://localhost:3306/mydb2");dataSource.setUsername("root");dataSource.setPassword("root");// 创建模板类JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);// 完成数据添加JdbcTemplate.update("INSERT INTO t_account VALUES(null,?,?)","张三",1000);
}// 第二种方式: 采用 IOC 的方式
// applicationContext.xml 配置<!-- 配置连接池 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mydb2"/><property name="username" value="root"/><property name="password" value="root"/>
</beaen><!-- 配置 JDBC 的模板类 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/>
</bean>// 测试类@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext.xml")public class Demo2{@Resource(name="jdbcTemplate")private JdbcTemplate jdbcTemplate;@Testpublic void fun(){// update(String sql, Object...params); 可以完成增删改操作jdbcTemplate.update("INSERT INTO t_account VALUES(null,?,?)","张三",1000);}@Testpublic void fun2(){// 查询// 第一种方式: 通过主键查询一条记录// queryForObject(String sql, RowMapper<T> rowMapper, Object... params)Account ac = jdbcTemplate.queryForObject("SELECT * FROM t_account WHERE id=?",new BeanMapper(),1);}@Testpublic void fun3(){// 查询// 第二种方式: 查询所有// query(String sql, RowMapper<T> rowMapper, Object... params)List<Account> ac = jdbcTemplate.query("SELECT * FROM t_account",new BeanMapper());}}// 自己手动的来封装数据(一行一行的封装)public class BeanMapper implements RowMapper<Account>{public Account mapRow(ResultSet rs, int rowNum) throws SQLException{Account ac = new Account();ac.setId(rs.getInt("id"));ac.setName(rs.getString("name"));ac.setMoney(rs.getDouble("money"));return ac;}}// javaBean 用于封装查询到的结果
public class Account{private Integer id;private String name;private Double money;get 和 set 方法...
}
3. Spring 框架管理开源的连接池
3.1 管理 DBCP 连接池
- 引入 DBCP 的 jar 包
org.apache.commong.dbcp-1.2.2.osgi.jar
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 name="url" value="jdbc:mysql://localhost:3306/mydb2"/><property name="username" value="root"/><property name="password" value="root"/>
</bean>
3.2 管理 C3P0 连接池
- 引入 c3p0 的 jar包
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 name="jdbcUrl" value="jdbc:mysql://localhost:3306/mydb2"/><property name="user" value="root"/><property namem="password" value="root"/>
</bean>
参考资料
- Spring 入门视频