Spring JDBC(配合数据库连接池使用)

Spring JDBC

  • Spring 框架对JDBC的简单封装

    • 提供了一个JDBCTemplate对象简化JDBC的开发
  • 步骤 :

    • 1.导入jar包

    • 1643993718470

    • 2.创建JdbcTemplate对象 , 依赖于数据源 DataSource (参照数据库连接池中的工具类 , 有一个获取DataSource的方法)

      • JdbcTemplate template = new JdbcTemplate(dataSource);
    • 3.调用JdbcTemplate的方法来完成CRUD的操作

      • 方法有 : 这些都要传一个sql语句 , 后边跟不同的参数

        • ①update()

        • update() : //执行DML语句 增 删 改语句
          
        • ②queryForMap()

        • queryForMap() : //将查询结果集封装为Map集合
          //注意 : 使用queryForMap()的时候 , 查询的结果只能是一条记录 , 多了会报错 , 
          Map<String, Object> stringObjectMap = jdbcTemplate.queryForMap(sql, 15);
          //返回值只是一个Map集合
          
        • ③queryForList()

        • queryForList() : //将插叙结果集封装为List集合
          //想要查询多条记录就要使用queryForList()这个方法
          //将每一行记录封装为一个Map集合 , 再将这些Map集合封装为一个List集合
          List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
          //返回值是一个list集合 , 集合中是一个个Map集合
          
      • ④query() 的参数 :RowMapper

      • 注意 : 如果类型定义的时候 , 使用的是基本数据类型 , 那么在使用BeanPropertyRowMapper 的时候 , 如果数据库中有数据是null的话 , 就会报错 , 所以这个时候 需要在定义的时候使用基本数据类型的包装类 ( Int -> Integer , double -> Double)

      • 业务中一般是将数据封装为javabean对象 , 再讲对象封装到List集合中去

        query() : //将查询结果集封装为javabean对象 , 在封装到list集合中
        

      自己实现RowMapper接口 :

      • /**
        * 6.查询所有记录 , 将其封装为javabean对象的List集合
        */
        @Test
        public void test6(){
        sql = "select * from books";
            //这里的query中不仅要传一个sql , 还要传一个 new RowMapper<Emp>
            //RowMapper是sping中的 , 可以将数据中的每一行数据封装成用户定义的类 , 如果sping与hibernate 相结合了,基本上是用不到,大多数都是在spring单独使用时用到,常见的情况就是与JdbcTemplate一起使用。
        List<Emp> query = jdbcTemplate.query(sql, new RowMapper<Emp>() {
        	@Override
            public Emp mapRow(ResultSet rs, int rowNum) throws SQLException {
                Emp emp = new Emp();
                int id = rs.getInt("ID");
                String title = rs.getString("TITLE");
                String isbn = rs.getString("ISBN");
                String publish = rs.getString("PUBLISH");
                int stock = rs.getInt("STOCK");
                String clas = rs.getString("clas");
        
                emp.setID(id);
                emp.setTITLE(title);
                emp.setISBN(isbn);
                emp.setPUBLISH(publish);
                emp.setSTOCK(stock);
                emp.setClas(clas);
                return emp;
            }
        });
            for (Emp emp : query) {
                System.out.println(emp);
            }
        }
        

      自动实现RowMapper接口 : 开发中常使用的方法

      • 用户定义的泛型就是 一个javabean类型的类

      • 注意 : 这里设置的泛型 , 如果是多结果集的 , 就返回一个List集合 , 里边存储的是一个个泛型对象 ,

      • 如果是单结果集的 , 就会返回一个泛型对象 ,

      • /**
        * 6.查询所有记录 , 将其封装为javabean对象的List集合
        */
        @Test
        public void test6(){
            sql = "select * from books";
            //这里直接new一个 BeanPropertyRowMapper<这里传一个用户自定义的泛型>(括号中传用户自定义的泛型的字节码文件)即可
            List<Emp> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));
            for (Emp emp : query) {
                System.out.println(emp);
            }
        }
        
        • ⑤queryForObject()

          queryForObject() : //将查询结果集封装为一个对象
          
        • /**
          * 7.查询总的一个记录数
          */
          @Test
          public void test7(){
              sql = "select count(ID) from books";
          //这里使用的是将查询结果集封装为一个long对象 , count在sql中的作用是显示查询出来的结果个数 , null忽略不计 , 这个方法能够生成各种类型的对象 , 并不局限于long对象
              Long aLong = jdbcTemplate.queryForObject(sql, long.class);
              System.out.println(aLong);
          }
          
  • 使用方法 :

    package com.sichen;
    import org.springframework.jdbc.core.JdbcTemplate;
    import utils.JDBCutil;
    /**
     * JdbcTemplate入门
     */
    public class jdbctemplate {
        public static void main(String[] args) {
            //1.导入jar包
            //2.创建JDBCTemplate对象
            JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCutil.getDataSource());
            //3.调用方法
            String sql = "update ceshi set dname = ? , loc = ? where deptno = ?";
            //这里不用再单独设置?的值了 , 直接按照顺序在后边写就可以了 
            int update = jdbcTemplate.update(sql, "闻熙灏", "爱思尘", 45);
            System.out.println(update);
        }
    }
    

用再单独设置?的值了 , 直接按照顺序在后边写就可以了
int update = jdbcTemplate.update(sql, “闻熙灏”, “爱思尘”, 45);
System.out.println(update);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值