Spring知识点总结(五)Spring整合JDBC

2018-11-09 02:38:04来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

 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             }

 

 



  

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:比较准确完整的中文字符正则校验

下一篇:如何用栈实现队列