在Spring Boot应用程序中使用JDBC模板

x33g5p2x  于2022-10-04 转载在 Spring  
字(5.4k)|赞(0)|评价(0)|浏览(354)

本教程讨论了如何在Spring Boot应用程序中使用**JDBC模板。

在这个例子中,我们将使用H2内存数据库,这是一个用于测试的最好选择。首先执行Spring Boot CLI并使用init命令。

$ spring init -d=jdbc,h2 -g=com.example -a=jdbc-app --package-name=com.example -name=jdbc-app -x

这个命令将创建一个简单的应用程序,它依赖于spring-boot-starter-jdbc pom和H2的依赖关系。参见pom.xml文件。

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	
   <modelVersion>4.0.0</modelVersion>
     	
   <groupId>com.example</groupId>
    	
   <artifactId>jdbc-app</artifactId>
    	
   <version>0.0.1-SNAPSHOT</version>
    	
   <packaging>jar</packaging>
     	
   <name>jdbc-app</name>
    	
   <description>Demo project for Spring Boot</description>
     	
   <parent>
       		
      <groupId>org.springframework.boot</groupId>
       		
      <artifactId>spring-boot-starter-parent</artifactId>
       		
      <version>2.1.0.RELEASE</version>
       		
      <relativePath/>
       
      <!-- lookup parent from repository -->
       	
   </parent>
     	
   <properties>
       		
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       		
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
       		
      <java.version>1.8</java.version>
       	
   </properties>
     	
   <dependencies>
       		
      <dependency>
          			
         <groupId>org.springframework.boot</groupId>
          			
         <artifactId>spring-boot-starter-jdbc</artifactId>
          		
      </dependency>
        		
      <dependency>
          			
         <groupId>com.h2database</groupId>
          			
         <artifactId>h2</artifactId>
          			
         <scope>runtime</scope>
          		
      </dependency>
       		
      <dependency>
          			
         <groupId>org.springframework.boot</groupId>
          			
         <artifactId>spring-boot-starter-test</artifactId>
          			
         <scope>test</scope>
          		
      </dependency>
       	
   </dependencies>
     	
   <build>
       		
      <plugins>
          			
         <plugin>
             				
            <groupId>org.springframework.boot</groupId>
             				
            <artifactId>spring-boot-maven-plugin</artifactId>
             			
         </plugin>
          		
      </plugins>
       	
   </build>
      
</project>

你可以看到spring-boot-starter-jdbc pom和H2的依赖关系已经包含在内。接下来,让我们给我们的项目添加一个域类。

package com.example;

public class Person {
  Long id;
  String name;
  String surname;

  public Person(Long id, String name, String surname) {
    super();
    this.id = id;
    this.name = name;
    this.surname = surname;
  }

  public Person() {
    super();
  }

  public Long getId() {
    return id;
  }

  private void setId(Long id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getSurname() {
    return surname;
  }

  public void setSurname(String surname) {
    this.surname = surname;
  }

  @Override
  public String toString() {
    return "Person [id=" + id + ", name=" + name + ", surname=" + surname + "]";
  }
}

正如你所看到的,这是一个普通的Java类,没有Hibernate/JPA注释,因为我们将使用JDBC模板而不是ORM框架。为了使事情顺利进行,我们需要一个服务类来处理执行SQL语句的问题。

package com.example;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

@Service
public class PersonService {
  private static final Logger log = LoggerFactory.getLogger(PersonService.class);
  @Autowired JdbcTemplate jdbcTemplate;

  public void insertData() {
    log.info("Table creation");
    jdbcTemplate.execute("DROP TABLE PERSON IF EXISTS");
    jdbcTemplate.execute("CREATE TABLE PERSON(id SERIAL, name VARCHAR(255), surname VARCHAR(255))");
    log.info("Inserting data");
    jdbcTemplate.execute("INSERT INTO PERSON(name,surname) VALUES('John','Doe')");
    log.info("Inserting data");
    jdbcTemplate.execute("INSERT INTO PERSON(name,surname) VALUES('Gabriel','Fox')");
    log.info("Done.");
  }

  public List<Person> findAll() {
    List<Person> entries = new ArrayList<>();
    jdbcTemplate
        .query(
            "SELECT * FROM PERSON",
            new Object[] {},
            (rs, row) ->
                new Person(rs.getLong("id"), rs.getString("name"), rs.getString("surname")))
        .forEach(entry -> entries.add(entry));
    return entries;
  }
}

让我们看一下它的内容。

  • @JdbcTemplate 。这是一个自动连接的JdbcTemplate类,它将负责执行针对数据库的任务。

  • insertData 。这个方法将首先尝试放弃Person表,如果它存在的话,然后它将创建带有字段的Person表,最后,它将向数据库插入一些数据。

  • findAll 。这个方法将使用jdbcTemplate实例和查询方法(接受SQL语法)来获取所有数据;它将返回一个Person实例的集合。

接下来,修改JdbcAppApplication.java类以使用上述服务。

package com.example;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class JdbcAppApplication implements CommandLineRunner {
  private static final Logger log = LoggerFactory.getLogger(JdbcAppApplication.class);
  @Autowired PersonService service;

  public static void main(String[] args) {
    SpringApplication.run(JdbcAppApplication.class, args);
  }

  @Override
  public void run(String... arg0) throws Exception {
    log.info("Insert Data");
    service.insertData();
    log.info("findAll()");
    service.findAll().forEach(entry -> log.info(entry.toString()));
  }
}

这是将被执行的主类。

  • 它声明了PersonService的自动连接版本,使其在运行方法执行时可用。

  • 它实现了CommandLineRunner接口,当然你也需要实现它的方法,叫做public void run(String... args)。只要记住,这个运行方法将在Spring Boot启动后执行。

要运行该应用程序,请执行以下命令。

$ ./mvnw spring-boot:run

该命令将使用Spring Initializr附带的Maven包装器运行该应用。如果你将Maven作为全局工具,只需运行此命令即可。

$ mvn spring-boot:run

相关文章

微信公众号

最新文章

更多