本教程讨论了如何在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
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
内容来源于网络,如有侵权,请联系作者删除!