Spring框架(数据库编程JdbcTemplate)

目录,更新ing,学习Java的点滴记录

  目录放在这里太长了,附目录链接大家可以自由选择查看--------Java学习目录

Spring知识

  一丶SpringIOC初步认识↓↓↓
第一篇---->初识Spring
  二丶SpringIOC深入↓↓↓
第二篇---->深入SpringIoC容器(一)
第三篇---->深入SpringIoC容器(二)
  三丶装配SpringBean↓↓↓
第四篇---->依赖注入的方式
第五篇---->基于xml装配Bean
第六篇---->基于注解装配Bean
第七篇---->Spring Bean之间的关系
第八篇---->SpringBean的作用域
第九篇---->Spring 加载属性(properties)文件
第十篇---->Spring表达式(SpEL)
第十一篇---->Spring在xml中配置组件扫描
  四丶面向切面编程↓↓↓
第十二篇—>认识SpringAOP及底层原理
第十三篇—>使用@AspectJ注解开发AOP
第十四篇—>使用xml配置开发AOP
  五丶Spring中数据库编程↓↓↓
第十五篇—>数据库编程JdbcTemplate
  六丶Spring事务管理↓↓↓
第十六篇—>Spring事务管理初识
第十七篇—>编程式事务和声明式事务
第十八篇—>事务ACID特性
第十九篇—>事务传播行为
第二十篇—>事务隔离级别

五丶Spring和数据库编程

1 Spring与数据库编程的联系

  • Spring最重要的功能是操作数据.在Java互联网项目中,数据大部分都存储在数据库中.因此完全可以说数据库编程时互联网编程的基础,Spring为数据库编程提供了JDBC模板模式,就是它自身提供的JdbcTemplate,它可以简化很多代码编程,但是不得不说,实际开发中JdbcTemplate并不常用.但是如果你确实要全方位了解Spring,那么熟悉它是有必要的.
  • Spring还提供了TransactionTemplate支持事务的模板,但是也不是常用技术.在持久层开发中,用的最多的是Hibernate和MyBatis框架,后者占主流地位.
  • 在Spring框架学习第一篇中已经提到过,Spring并不是要替代已有框架的功能,而是以模板的形式提供支持.对于Hibernate框架,Spring提供了HibernateTemplate支持,它可以有效简化Hibernate编程.对于MyBatis框架,最初由于版本原因,Spring并没有支持MyBatis,后来MyBatis社区接入了Spring开发的包,该包也提供了SqlSessionTemplate给我们使用,提高了代码的可读性.

2 使用JDBC代码的弊端分析

  • 话不多说,给出一段JDBC常见操作数据库的代码看一下,其中用到了一个user类
public class test {

    /**
     * 使用JDBC从数据库中获取User对象
     * @return User对象
     */
    public User getUser(){
        //声明User对象
        User user=null;
        //1. 设置JDBC连接属性
        Connection conn =null;
        PreparedStatement ps =null;
        ResultSet rs = null;
        try{
            //2. 注册驱动程序
            Class.forName("com.mysq.jdbc.Driver");
            //3. 获取数据库连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc");
            //4. 预编译sql
            ps = conn.prepareStatement("select id,name from t_user where id=?");
            //5. 设置占位符参数
            ps.setInt(1, 22);
            //6. 执行SQL
            rs = ps.executeQuery();
            //7. 处理结果集
            while(rs.next()){
                user = new User();
                user.setId(rs.getInt(1));
                user.setName(rs.getString(2));
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            //8. 关闭数据库连接资源
            try {
                if (rs!=null && !rs.isClosed()){
                    rs.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if (ps!=null && !ps.isClosed()){
                    ps.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if (conn!=null && !conn.isClosed()){
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return user;
    }
}

  在这里插入图片描述

  • 从代码中可以看出,这只是执行一条查询SQL语句,就需要这么多的代码,基本流程是获取数据库资源,执行SQL,获取结果,返回结果,关闭资源.但是代码中有太多try-catch块了,造成了代码非常冗余,这是对开发者很不友好的
  • 太多了try-catch-finally语句需要处理,资源的获取和释放这些都是定性必须要做的,还有就是事务的回滚和提交,一般都是发生异常回滚,无异常提交,这些都是比较固定的模式.Spring出现前大部分都是在使用jdbc去操作数据库,导致了代码可读性查,不好维护.在Spring出现后,提供了自己的解决方案—JdbcTemplate模板.

3 如何配置数据库资源

  • 在Spring中配置数据库资源非常简单,个人习惯上将这种配置使用xml方式来配置,开发中基本都会配置成数据库连接池,我们可以使用Spring内部提供的类,也可以使用第三方数据库连接池或者从Web服务器中通过JNDI获取数据源.

3.1 使用Spring自身提供的配置

  • 最简单的数据库配置是由Spring提供的一个类org.springframeword.jdbc.datasource.SimpleDriverDataSource,它很简单,不支持数据库连接池.现在我们通过xml方式来配置它
  • 首先创建一个项目,导入jar包
      jar包资料:链接:https://pan.baidu.com/s/15IS5V96rLgTGkPupoyNntA 提取码:qk5t
      在这里插入图片描述
  • 引入Spring配置文件
      在这里插入图片描述
  • 这是一种最简单的数据源配置,一般只用于测试,因为它不支持数据库连接池,更常用的是第三方数据库连接.

3.2 使用第三方数据库连接池

  • DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池,可以说是目前最好的数据库连接池,具体这里不做介绍
  • 这里使用阿里巴巴提供的Druid数据库连接池,需要导入一个jar包:链接:https://pan.baidu.com/s/19pOi6YHDrUlXYU9GAubQsg 提取码:s61a
  • 修改配置文件applicationContext.xml
      在这里插入图片描述

3.3 使用JNDI数据库连接池

  • 在tomcat等JavaEE服务器上配置数据源,它会存在一个JNDI的名称.也可以通过Spring提供的JNDI机制获取对应的数据源,这也很常用.

4 Spring提供的Jdbc Template

4.1 介绍

  • 为了使 JDBC 更加易于使用, Spring 在 JDBC API 上定义了一个抽象层, 以此建立一个 JDBC 存取框架.
  • 作为 Spring JDBC 框架的核心, JdbcTemplate的设计目的是为不同类型的 JDBC 操作提供模板方法. 每个模板方法都能控制整个过程, 并允许覆盖过程中的特定任务. 通过这种方式, 可以在尽可能保留灵活性的情况下, 将数据库存取的工作量降到最低.
  • 严格的说,它本身也不算成功,但是无论如何JdbcTemplate的设计方案体现了Spring框架的主导思想:给予常用技术提供模板化的编程,减少开发人员工作量
  • 这里使用上面Druid的数据源配置,创建一个JdbcTemplateBean实例
      在这里插入图片描述
  • 配置好之后我们就可以操作JdbcTemplate了,创建一个测试类
      在这里插入图片描述
  • 在queryForObject方法中,第一个参数是SQL,另一个是RowMapper接口,这里用到了匿名类,在mapRow方法中,从Resultset对象中取出查询的数据,组成User对象,而无需再写任何关闭数据库资源的代码,这是因为JdbcTemplate内部主动帮我们实现了他们.
  • 最后根据测试类,在MySQL数据库创建一张user表,加入一条id=1的数据
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  在这里插入图片描述

  • 执行测试类查看结果,注意配置文件中数据库用户名密码要根据自己情况修改
      在这里插入图片描述
  • 通过上面的简单案例,能帮你简单连接一下JDBC的工作流程,下面通过例子来看JdbcTemplate的增删改查

4.2 JdbcTemplate增加操作

  • 向数据库中添加一条记录
      在这里插入图片描述

4.3 JdbcTemplate删除操作

  • 删除数据库中id=1的记录
      在这里插入图片描述

4.4 JdbcTemplate修改操作

  • 将id为2的记录的name修改为Mark
      在这里插入图片描述

4.5 JdbcTemplate查询操作

  • 查询操作(如果数据库中数据比较少,可以先在数据库内添加一些数据)
      在这里插入图片描述
  • 通过上面几个例子可以对JdbcTemplate的基本查询有了初步认识,JdbcTemplate还有其他方法,比如批量增删改(batchUpdate())之类的,但是不得不承认该技术不是持久层中常用的技术,所以这里不再做深入分析各类方法

4.6 在 JDBC 模板中使用具名参数

  • 在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定.
  • 在 Spring JDBC 框架中, 绑定 SQL 参数的另一种选择是使用具名参数(named parameter).
  • 具名参数: SQL 按名称(以冒号开头)而不是按位置进行指定. 具名参数更易于维护, 也提升了可读性. 具名参数由框架类在运行时用占位符取代
  • 具名参数只在NamedParameterJdbcTemplate中得到支持
  • 在配置文件中配置NamedParameterJdbcTemplate的Bean
      在这里插入图片描述
  • 它的update方法可以使用update(sql, paramMap),第二个参数是一个Map集合,它是保存了你使用的具名参数及其值的集合,在执行SQL语句的时候,代码底层会从Map集合中查询数据,然后匹配到SQL语句中的指定位置
      在这里插入图片描述

4.7 总结

  • Spring提供的JdbcTemplate在底层执行SQL的时候,都会从我们指定的数据源中自动获取连接,然后执行SQL,最后帮我们释放资源的,很明显它简化了以往JDBC的繁琐步骤,有利于我们的开发效率
  • 但是JdbcTemplate是不能支持事务的,必须要引入事务管理器才能够支持事务,当设置了事务管理器之后,Spring获取的数据库连接也将从事务管理器中获取,并且JdbcTemplate的资源释放也将由事务管理器决定,而不是自身决定了.
  • 下一篇会谈到Spring中事务管理机制
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值