1. 回顾JDBC
a. java操作关系型数据的API。导入相关数据库的驱动包后可以通过JDBC提供的接口来操作数据库。
b. 实现JDBC的六个步骤
注册数据库驱动
获取数据库连接
获取传输器对象
传输sql执行获取结果集对象
遍历结果集获取信息
关闭资源
c. 数据库连接池(数据源)
C3P0连接池
2.Spring整合JDBC
a. 导入相关开发包

b. 将数据源交于Spring管理


c.通过spring获取数据源,获取连接,操作数据库

3.Spring中的JDBC模板类
使用模板类,能够极大的简化原有JDBC的编程过程,让数据库操作变得简单.
a. 在Spring中配置JDBC模板类

b. 使用JDBC模板类实现增删改查
- 1 @Test
- 2 public void test02() throws SQLException{
- 3 DataSource source = (DataSource) context.getBean("dataSource");
- 4 Connection conn = source.getConnection();
- 5 PreparedStatement ps = conn.prepareStatement("select * from users");
- 6 ResultSet rs = ps.executeQuery();
- 7 while(rs.next()){
- 8 int id = rs.getInt("id");
- 9 String name = rs.getString("name");
- 10 int age = rs.getInt("age");
- 11 User user = new User(id,name,age);
- 12 System.out.println(user);
- 13 }
- 14 }
- 15
- 16 @Test
- 17 public void test03() throws SQLException{
- 18 JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
- 19 List<Map<String,Object>> list = jdbcTemplate.queryForList("select * from users");
- 20 System.out.println(list);
- 21 }
- 22 @Test
- 23 public void test04() throws SQLException{
- 24 JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
- 25 SqlRowSet srs = jdbcTemplate.queryForRowSet("select * from users where id = ?",2);
- 26 srs.next();
- 27 System.out.println(srs.getString("name"));
- 28 }
- 29 @Test
- 30 public void test05() throws SQLException{
- 31 JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
- 32 int n = jdbcTemplate.update("insert into users values (null,?,?)", "ddd",23);
- 33 System.out.println("修改成功,影响到的行数为:"+n);
- 34 }
- 35 @Test
- 36 public void test06() throws SQLException{
- 37 JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
- 38 int n = jdbcTemplate.update("update users set age = ? where id = ?", 33,4);
- 39 System.out.println("修改成功,影响到的行数为:"+n);
- 40 }
- 41 @Test
- 42 public void test07() throws SQLException{
- 43 JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
- 44 int n = jdbcTemplate.update("delete from users where id = ?", 4);
- 45 System.out.println("修改成功,影响到的行数为:"+n);
- 46 }
c. 使用RowMapper封装bean
RowMapper接口定义了对象到列的映射关系,可以帮助我们在查询时自动封装bean。
- 1 public class UserRowMapper implements RowMapper<User> {
- 2
- 3 @Override
- 4 public User mapRow(ResultSet rs, int i) throws SQLException {
- 5 User user = new User();
- 6 user.setId(rs.getInt("id"));
- 7 user.setName(rs.getString("name"));
- 8 user.setAge(rs.getInt("age"));
- 9 return user;
- 10 }
- 11
- 12 }
- 13
- 14 /**
- 15 * 使用RowMap封装bean
- 16 */
- 17 @Test
- 18 public void test08(){
- 19 JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
- 20 List<User> list = jdbcTemplate.query("select * from users",new UserRowMapper());
- 21 System.out.println(list);
- 22 }
- 23 /**
- 24 * 使用RowMap封装bean
- 25 */
- 26 @Test
- 27 public void test09(){
- 28 JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
- 29 User user = jdbcTemplate.queryForObject("select * from users where id = ?",new UserRowMapper(),2);
- 30 System.out.println(user);
- 31 }
d. 使用BeanPropertyRowMapper自动进行映射
BeanPropertyRowMapper内部可以使用指定类进行反射(内省)来获知类内部的属性信息,自动映射到表的列。使用它一定要注意,类的属性名要和对应表的列名必须对应的上,否则属性无法自动映射。BeanPropertyRowMapper底层通过反射(内省)来实现,相对于之前自己写的RowMapper效率比较低。
- 1 /**
- 2 * 通过BeanPropertyRowMapper实现自动封装bean
- 3 */
- 4 @Test
- 5 public void test10(){
- 6 JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
- 7 List<User> list = jdbcTemplate.query("select * from users", new BeanPropertyRowMapper(User.class));
- 8 System.out.println(list);
- 9 }
- 10 /**
- 11 * 通过BeanPropertyRowMapper实现自动封装bean
- 12 */
- 13 @Test
- 14 public void test11(){
- 15 JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
- 16 User user = jdbcTemplate.queryForObject("select * from users where id = ?", new BeanPropertyRowMapper(User.class),2);
- 17 System.out.println(user);
- 18 }