zoukankan      html  css  js  c++  java
  • 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             }



      

  • 相关阅读:
    day34
    day33 UDP、进程
    Java RMI 框架(远程方法调用)
    Maven查看JAR包的依赖关系
    连接Oracle数据库的时候报了“Got minus one from a read call”
    Http、Socket和WebService协议之间的区别
    http 协议
    其它
    Jmeter-CSV data set config参数化
    英文
  • 原文地址:https://www.cnblogs.com/nanlinghan/p/9931327.html
Copyright © 2011-2022 走看看