Spring 连接 Db2 数据库的两种方式:JDBC 和 JPA

JDBC 连接 Db2

创建项目

首先,确定您计划使用 IBM Cloud 开发者工具还是 Spring Initializr 创建项目,然后按照各自的说明进行操作。

IBM Cloud 开发者工具

如果您使用 IBM Cloud 开发者工具创建项目,那么使用 dev 插件创建新的 Spring 微服务。

1
ibmcloud dev create
  1. 选择 Backend Service / Web App
  2. 选择 Java - Spring
  3. 选择 Java Microservice with Spring (Microservice)
  4. 指定项目名称(例如 MyDb2JDBCProject)。
  5. 拒绝向应用程序添加服务 (n)。
  6. 选择合适的工具链,如果不确定,请选择 None("No Devops")。
  7. 切换到应用程序目录。
  8. 将 Spring JDBC 启动器添加到 pom.xml 中的 dependencies 元素中:
    1
    2
    3
    4
    <dependency>
       <groupId>org.springframework.bootgroupId>>
       <artifactId>spring-boot-starter-data-jdbcartifactId>
    <dependency>

Spring Initializr

如果您使用 Spring Initializr 创建项目,那么使用浏览器访问 https://start.spring.io

  1. 选择您的 Spring Boot 级别(目前默认版本为 2.0.4)。
  2. 指定项目工件名称(例如,mydb2jdbcproject)。
  3. 添加 Web 依赖项。
  4. 添加 JDBC 依赖项。
  5. 选择 Generate Project,然后下载应用程序包。
  6. 解压程序包。
  7. 切换到解压目录。

将 db2jcc4.jar 添加到项目中

Maven 中不提供 Db2 JDBC Driver (JCC),所以您必须直接从 IBM 下载,并将其添加到本地 maven 仓库。

  1. 从 Db2 JDBC 驱动程序版本和下载中选择并下载合适的驱动程序归档文件。
  2. 解压缩此程序包,并将 db2jcc4.jar 文件保存到项目根目录下的新 lib 目录中。
  3. 在此 lib 目录中,将Jar 作为 Maven 包添加,并根据您下载的程序包相应地更改版本:
    1
    mvn install:install-file -DlocalRepositoryPath=lib -DcreateChecksum=true -Dpackaging=jar -Dfile=./lib/db2jcc4.jar -DgroupId=com.ibm.db2.jcc -DartifactId=db2jcc4 -Dversion=4.24.92
  4. 将 lib 目录作为 Maven 仓库添加到 pom.xml:
    1
    2
    3
    4
    5
    6
    <repositories>
      <repository>
        <id>repoid>
        <url>file://${project.basedir}/liburl>
      repository>
    <repositories>
  5. 将依赖关系添加到 pom.xml 中的 dependencies 元素,并相应地更改版本以实现匹配:
    1
    2
    3
    4
    5
    <dependency>
      <groupId>com.ibm.db2.jccgroupId>
      <artifactId>db2jcc4artifactId>
      <version>4.24.92version>
    <dependency>

创建示例表

对于本快速指南,我们只使用一个数据库和一个表。

使用 Db2 命令提示符连接到 Db2 实例,并发出以下 SQL 语句以创建 things 表并填充一些数据:

1
2
create table things (id int, name varchar(255))
insert into things (id,name) values (1,'fish'),(2,'wibble'),(3,'stiletto')

如果您选择为此表使用不同的名称,就需要记住这个名称,以便稍后创建 JPA 类时使用。

为 Db2 实例配置 Spring 数据

Spring 需要被告知如何与数据库进行通信,与其他 Spring 配置一样,这些信息在 application.properties(或        application.yaml)文件中(位于 src/main/resources/application.properties)。

将以下属性添加到 application.properties 文件:

1
2
3
spring.datasource.url=jdbc:db2://mydb2host:50000/mydb2databasename
spring.datasource.username=mydb2username
spring.datasource.password=mydb2password

记得更改这些值,以便与您的 Db2 实例的位置和凭证相匹配。

创建 JDBC 类

  1. 在项目中,找到 Spring Boot 主应用程序类。
    • 对于通过 Spring Initializr 创建的项目,主应用程序类以创建项目时提供的工件名称来命名。例如,如果通过                com.example 包命名工件 demo,您将在              src/main/java/com/example/DemoApplication.java 目录下找到主类。
    • 对于通过 IBM Cloud 开发者工具创建的项目,主应用程序类始终位于              src/main/java/application/SBApplication.java 目录下。
  2. 在与应用程序类相同的目录下,为 JDBC 类 jdbc 创建一个目录。
  3. 在 jdbc 目录下,创建用于表示表行的类:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class Things {
      private Long id;
      private String name;
      public Things(){
      }
      public Things(long id, String name){
        this.id = id;
        this.name = name;
      }
      @Override
      public String toString() {
        return String.format("Things[id=%d, name='%s']", id, name);
      }
    }

通过 JDBC 向RestController 添加一个简单的数据库查询

对于通过 Spring Initializr 创建的项目,您必须创建自己的 RestController 类。在 jdbc        目录旁创建一个控制器目录,然后在该目录下创建 RestController 类。

对于通过 IBM Cloud 开发者工具创建的项目,在 src/main/java/application/rest/v1/Example.java 中已为您提供        RestController 示例。

RestController 为您的应用程序提供 REST 端点。使用 @Autowired 将仓库存储库注入到 RestController        中,然后添加一个可以返回表中数据的简单端点:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.ArrayList;
import java.util.List;
 
@RestController
public class Example {
 
    @Autowired
    JdbcTemplate jdbcTemplate;
 
    @RequestMapping("test")
    public @ResponseBody ResponseEntity<String> example() {
        List<String> list = new ArrayList<>();
        list.add("Table data...");
        jdbcTemplate.query(
                "SELECT * FROM things", new Object[]{},
                (rs,rowNum) -> new Things(rs.getLong("id"), rs.getString("name")))
                .forEach(thing -> list.add(thing.toString()));
        return new ResponseEntity<String>(list.toString(), HttpStatus.OK);
    }
 
}

您可能需要为之前创建的 Things 类添加导入功能。

运行该示例

您可以像运行任何其他 Spring Boot 应用程序一样运行该示例。

1
mvn spring-boot:run

然后,您可以访问此端点,查看它查询数据库和检索信息的情况。

1
2
$ curl http://localhost:8080/test
[Table data..., Things[id=1, name='fish'], Things[id=2, name='wibble'], Things[id=3, name='stiletto']]

JPA 连接 Db2

创建项目

首先,确定您计划使用 IBM Cloud 开发者工具还是 Spring Initializr 创建项目,然后按照各自的说明进行操作。

IBM Cloud 开发者工具

如果您使用 IBM Cloud 开发者工具创建项目,那么使用 dev 插件创建新的 Spring 微服务。

1
ibmcloud dev create
  1. 选择 Backend Service / Web App
  2. 选择 Java – Spring
  3. 选择 Java Microservice with Spring (Microservice)
  4. 指定项目名称(例如 MyDb2JPAProject)。
  5. 拒绝向应用程序添加服务 (n)。
  6. 选择合适的工具链,如果不确定,选择 None("No Devops")。
  7. 切换到应用程序目录。
  8. 将 Spring JPA 启动器添加到 pom.xml 中的 dependencies 元素中:
    1
    2
    3
    4
    <dependency>
       <groupId>org.springframework.bootgroupId>>
       <artifactId>spring-boot-starter-data-jpaartifactId>
    <dependency>

Spring Initializr

如果您使用 Spring Initializr 创建项目,那么使用浏览器访问 https://start.spring.io

  1. 选择您的 Spring Boot 级别(目前默认版本为 2.0.4)。
  2. 指定项目工件名称(例如 mydb2jpaproject)。
  3. 添加 Web 依赖项。
  4. 添加 JPA 依赖项。
  5. 选择 Generate Project,然后下载应用程序包。
  6. 解压程序包。
  7. 切换到解压目录。

将 db2jcc4.jar 添加到项目中

Maven 中不提供 Db2 JDBC Driver (JCC),所以您必须直接从 IBM 下载,并将其添加到本地 maven 仓库。

  1. 从 Db2 JDBC 驱动程序版本和下载中选择并下载适合您的驱动程序包。
  2. 解压此程序包,并将 db2jcc4.jar 文件保存到项目根目录下的一个新的 lib 目录中。
  3. 在此 lib 目录中,将Jar 作为 Maven 包添加,并根据您下载的程序包相应地更改版本:
    1
    mvn install:install-file -DlocalRepositoryPath=lib -DcreateChecksum=true -Dpackaging=jar -Dfile=./lib/db2jcc4.jar -DgroupId=com.ibm.db2.jcc -DartifactId=db2jcc4 -Dversion=4.24.92
  4. 将 lib 目录作为 Maven 仓库添加到 pom.xml:
    1
    2
    3
    4
    5
    6
    <repositories>
      <repository>
        <id>repoid>
        <url>file://${project.basedir}/liburl>
      repository>
    <repositories>
  5. 将依赖添加到 pom.xml 中的 dependency 元素,并相应地更改版本以实现匹配:
    1
    2
    3
    4
    5
    <dependency>
      <groupId>com.ibm.db2.jccgroupId>
      <artifactId>db2jcc4artifactId>
      <version>4.24.92version>
    <dependency>

创建示例表

对于本快速指南,我们只使用一个数据库和一个表。

使用 Db2 命令提示符连接到 Db2 实例,并发出以下 SQL 语句创建 things 表并填充一些数据:

1
2
create table things (id int, name varchar(255))
insert into things (id,name) values (1,'fish'),(2,'wibble'),(3,'stiletto')

如果您为此表使用不同的名称,就需要记住这个名称,以便稍后创建 JPA 类时使用。

为 Db2 实例配置 Spring 数据

Spring 需要被告知如何与数据库进行通信,与其他 Spring 配置一样,这些信息在 application.properties(或        application.yaml)文件中(位于 src/main/resources/application.properties)。

将以下属性添加到 application.properties 文件:

1
2
3
spring.datasource.url=jdbc:db2://mydb2host:50000/mydb2databasename
spring.datasource.username=mydb2username
spring.datasource.password=mydb2password

记得更改这些值,以便与您的 Db2 实例的位置和凭证相匹配。

创建 JPA 类

  1. 在项目中,找到 Spring Boot 主应用程序类。
    • 对于通过 Spring Initializr 创建的项目,主应用程序类以创建项目时提供的工件名称来命名。例如,如果通过                com.example 包命名工件 demo,您将在              src/main/java/com/example/DemoApplication.java 目录下找到主类。
    • 对于通过 IBM Cloud 开发者工具创建的项目,主应用程序类始终位于              src/main/java/application/SBApplication.java 目录下。
  2. 在与应用程序类相同的目录下,为 JPA 类 jpa 创建一个目录。
  3. 在 jpa 目录下,创建表示表行的类。该类应该与您之前创建的表使用相同的名称。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import javax.persistence.Entity;
    import javax.persistence.Id;
     
    @Entity
    public class Things {
      @Id
      private Long id;
      private String name;
      public Things(){
      }
      @Override
      public String toString() {
        return String.format("Things[id=%d, name='%s']", id, name);
      }
    }
  4. 在与该类相同的目录下,创建用于访问数据的 Repository 类。接口用您刚才创建的类的类型。
    1
    2
    3
    4
    5
    6
    7
    8
    import java.util.List;
    import org.springframework.data.repository.CrudRepository;
     
    public interface Repository extends CrudRepository<Things, Long>
    {
      List<Things> findByName(String name);
      Iterable<Things> findAll();
    }

将 JPA 类的简单调用添加到 RestController

对于通过 Spring Initializr 创建的项目,您必须创建自己的 RestController 类。在 jpa        目录旁创建一个控制器目录,然后在该目录下创建 RestController 类。

对于通过 IBM Cloud 开发者工具创建的项目,在 src/main/java/application/rest/v1/Example.java 中已为您提供          RestController 示例。

RestController 为您的应用程序提供 REST 端点。使用 @Autowired 将仓库注入到 RestController        中,然后添加一个可以返回表中数据的简单端点:

展开阅读全文

本文系作者在时代Java发表,未经许可,不得转载。

如有侵权,请联系nowjava@qq.com删除。

编辑于

关注时代Java

关注时代Java