当前位置:网站首页 > 技术博客 > 正文

jdbc使用流程



廖雪峰
资深软件开发工程师,业余马拉松选手。

我们在前面介绍JDBC编程时已经讲过,Java程序使用JDBC接口访问关系数据库的时候,需要以下几步:

  • 创建全局实例,表示数据库连接池;
  • 在需要读写数据库的方法内部,按如下步骤访问数据库:
    • 从全局实例获取实例;
    • 通过实例创建实例;
    • 执行SQL语句,如果是查询,则通过读取结果集,如果是修改,则获得结果。

正确编写JDBC代码的关键是使用释放资源,涉及到事务的代码需要正确提交或回滚事务。

在Spring使用JDBC,首先我们通过IoC容器创建并管理一个实例,然后,Spring提供了一个,可以方便地让我们操作JDBC,因此,通常情况下,我们会实例化一个。顾名思义,这个类主要使用了Template模式。

编写示例代码或者测试代码时,我们强烈推荐使用HSQLDB这个数据库,它是一个用Java编写的关系数据库,可以以内存模式或者文件模式运行,本身只有一个jar包,非常适合演示代码或者测试代码。

我们以实际工程为例,先创建Maven工程,然后引入以下依赖:

  • org.springframework:spring-context:6.0.0
  • org.springframework:spring-jdbc:6.0.0
  • jakarta.annotation:jakarta.annotation-api:2.1.1
  • com.zaxxer:HikariCP:5.0.1
  • org.hsqldb:hsqldb:2.7.1

在中,我们需要创建以下几个必须的Bean:

在上述配置中:

  1. 通过读取数据库配置文件;
  2. 通过注入配置文件的相关配置;
  3. 创建一个DataSource实例,它的实际类型是,创建时需要用到注入的配置;
  4. 创建一个JdbcTemplate实例,它需要注入,这是通过方法参数完成注入的。

最后,针对HSQLDB写一个配置文件:

可以通过HSQLDB自带的工具来初始化数据库表,这里我们写一个Bean,在Spring容器启动时自动创建一个表:

现在,所有准备工作都已完毕。我们只需要在需要访问数据库的Bean中,注入即可:

Spring提供的采用Template模式,提供了一系列以回调为特点的工具方法,目的是避免繁琐的语句。

我们以具体的示例来说明JdbcTemplate的用法。

首先我们看方法,它提供了Jdbc的供我们使用:

也就是说,上述回调方法允许获取Connection,然后做任何基于Connection的操作。

我们再看的用法:

最后,我们看方法:

在方法中,传入SQL以及SQL参数后,会自动创建,自动执行查询并返回,我们提供的需要做的事情就是把的当前行映射成一个JavaBean并返回。整个过程中,使用、和都不需要我们手动管理。

不一定返回JavaBean,实际上它可以返回任何Java对象。例如,使用查询时,可以返回:

如果我们期望返回多行记录,而不是一行,可以用方法:

上述方法传入的参数仍然是SQL、SQL参数以及实例。这里我们直接使用Spring提供的。如果数据库表的结构恰好和JavaBean的属性名称一致,那么就可以直接把一行记录按列名转换为JavaBean。

如果我们执行的不是查询,而是插入、更新和删除操作,那么需要使用方法:

只有一种操作比较特殊,那就是如果某一列是自增列(例如自增主键),通常,我们需要获取插入后的自增值。提供了一个来简化这一操作:

还有许多重载方法,这里我们不一一介绍。需要强调的是,只是对JDBC操作的一个简单封装,它的目的是尽量减少手动编写的代码,对于查询,主要通过实现了JDBC结果集到Java对象的转换。

我们总结一下的用法,那就是:

  • 针对简单查询,优选和,因为只需提供SQL语句、参数和;
  • 针对更新操作,优选,因为只需提供SQL语句和参数;
  • 任何复杂的操作,最终也可以通过实现,因为拿到就可以做任何JDBC操作。

实际上我们使用最多的仍然是各种查询。如果在设计表结构的时候,能够和JavaBean的属性一一对应,那么直接使用就很方便。如果表结构和JavaBean不一致怎么办?那就需要稍微改写一下查询,使结果集的结构和JavaBean保持一致。

例如,表的列名是,而JavaBean属性是,就需要指定别名,改写查询如下:

使用JdbcTemplate。

下载练习

Spring提供了来简化JDBC操作;

使用时,根据需要优先选择高级方法;

任何JDBC操作都可以使用保底的方法。

  • 上一篇: zip解压-压缩
  • 下一篇: 权限administrator
  • 版权声明


    相关文章:

  • zip解压-压缩2024-12-26 15:30:04
  • py pop函数2024-12-26 15:30:04
  • 开窗函数 rows between2024-12-26 15:30:04
  • 灰度发布的目标2024-12-26 15:30:04
  • ce认证公告机构查询2024-12-26 15:30:04
  • 权限administrator2024-12-26 15:30:04
  • java nio网络编程2024-12-26 15:30:04
  • 指针数组与数组指针详解2024-12-26 15:30:04
  • 爬虫工具下载2024-12-26 15:30:04
  • socks5代理怎么填2024-12-26 15:30:04