Spring中JDBC简介

原生JDBC(mysql)

  • 加载com.mysql.jdbc.Driver连接驱动
  • 获取连接池对象
  • 获取PreparedStatement或Statement对象
  • 设置sql语句
  • 依次设置入参值
  • 获取操作结果ResultSet
  • 手动解析ResultSet

示例

1、配置java包

2、定义Mysql表结构

3、配置数据库链接信息jdbc.properties

4、配置Spring扫描和加载properties文件

5、定义Pojo(接下来例子中,我们会用到lombok,无需设置pojo的setter,getter方法,在项目中引入lombok.jar即可。)

6、编写jdbc操作工具类

7、配置单元测试用例

8、运行结果

spring-jdbc.jar封装

  • JdbcTemplate类是JDBC核心软件包的核心类,主要提供五种方法
    • execute方法,可以用于执行任何sql,一般主要用于DDL
    • update(sql,args)方法,一般用于增、删、改sql语句
    • batchUpdate方法,执行批处理sql
    • query即queryForXX方法,查询sql(需要注意的是,queryForObject,如果查询结果为null,spring将会抛出异常提示。)
    • call方法,用于执行存储过程,函数等相关sql语句
  • 对前面原生JDBC代码进行改造,支持Spring JDBC操作方案。
  • 1、修改xml配置

在spring.xml中配置数据源信息,并且将数据源交给spring管理

2、由于JdbcTemplate中queryForObject方法,如果获取数据库结果集为空,会抛出异常,因此我们用queryForList方法执行数据库查询操作。然后queryForList中返回参数是List<Map<String, Object>>,因此我们在pojo中定义List<Map<String, Object>>转Object的方法。

3、定义UserDao及其实现类(关于UserDaoImpl类中JdbcTemplate自动装配:xml配置,因为需要dataSource对象,所以初始化在dataSourc之后)

4、执行单元测试用例

5、控制台输出如下

不足

  • queryForObject方法,如果查询的结果为空,Spring JDBC将会抛出EmptyResultDataAccessException异常
  • queryForList方法,Spring JDBC直接返回List<Map<String, Object>>,需要我们手动关联映射到实体类对象。
  • 解决:可以通过JAVA反射机制封装公共方法来将queryForList的方法结果ORM映射到实体类

储存过程

  • 优势
    • 重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量
    • 减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。
    • 安全性。参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。
  • SimpleJdbcInsert-快速插入数据
    • 1、定义UserSimpleJdbcInsert数据库操作类

    • 2、运行单眼测试用例

储存过程

  • SimpleJdbcCall 类支持被用于调用一个包含 IN 和 OUT 参数的存储过程。

假设我们有一个业务场景,需要获取数据库中,指定年龄以上最小年龄和最大年龄值。一般遇到这种业务,我们都是通过两次数据库操作来获取

  • 获取指定年龄以上的最小值
  • 获取指定年龄以上的最大值

示例
1、定义储存过程

2、UserSimpleJdbcCall使用(使用SimpleJdbcCall调用刚刚创建的存储过程getAgeInfo

3、在数据库中插入一些数据后,数据库内容如图所示:

4、编写单元测试用例,指定获取age=25以上的最大值和最小值

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值