Spring知识点总结(五)Spring整合JDBC
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 }
作者:ZHIWEI —— 南岭寒
出处:http://www.cnblogs.com/nanlinghan/
本文版权归作者和博客园共有,欢迎转载。