Spring知识点总结Spring整合JDBC

Posted nanlinghan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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             }

 

 



  

 



























以上是关于Spring知识点总结Spring整合JDBC的主要内容,如果未能解决你的问题,请参考以下文章

Spring——spring整合JDBC,

Spring整合JDBC

JAVAEE——spring03:spring整合JDBC和aop事务

Spring整合JDBC以及AOP管理事务

Spring整合JDBC以及AOP管理事务

Spring整合JDBC以及AOP管理事务