Рассмотрим, как с помощью Spring Boot, можно обращаться к БД, используя шаблоны JDBC. Рассмотрим pom файл:
<?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>spring-boot-jdbc-template</groupId> <artifactId>jdbc-template</artifactId> <version>1.0</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.3.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <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> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>Сущность для манипуляции:
package com.entity; import java.text.SimpleDateFormat; import java.util.Date; public class Journal { private Long id; private String title; private Date created; private String summary; private SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy"); public Journal(Long id, String title, String summary, Date date){ this.id = id; this.title = title; this.summary = summary; this.created = date; } Journal(){} public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public Date getCreated() { return created; } public void setCreated(Date created) { this.created = created; } public String getSummary() { return summary; } public void setSummary(String summary) { this.summary = summary; } public String getCreatedAsShort(){ return format.format(created); } public String toString(){ StringBuilder value = new StringBuilder("* JournalEntry("); value.append("Id: "); value.append(id); value.append(",Title: "); value.append(title); value.append(",Summary: "); value.append(summary); value.append(",Created: "); value.append(getCreatedAsShort()); value.append(")"); return value.toString(); } }Далее создадим сервис. У него будет две функции: добавление новой записи в БД и получение всех записей.
package com.service; import com.entity.Journal; 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; import java.util.ArrayList; import java.util.Date; import java.util.List; @Service public class JournalService { private static final Logger log = LoggerFactory.getLogger(JournalService.class); @Autowired private JdbcTemplate jdbcTemplate; public void insertData(){ log.info("> Table creation"); jdbcTemplate.execute("DROP TABLE JOURNAL IF EXISTS"); jdbcTemplate.execute("CREATE TABLE JOURNAL(id SERIAL, title VARCHAR(255), summary VARCHAR(255), created TIMESTAMP)"); log.info("> Inserting data..."); jdbcTemplate.execute("INSERT INTO JOURNAL(title,summary,created) VALUES('Get to know Spring Boot','Today I will learn Spring Boot'," + "'2016-01-01 00:00:00.00')"); jdbcTemplate.execute("INSERT INTO JOURNAL(title,summary,created) VALUES('Simple Spring Boot Project','I will do my first Spring Boot" + "project','2016-01-02 00:00:00.00')"); jdbcTemplate.execute("INSERT INTO JOURNAL(title,summary,created) VALUES('Spring Boot Reading','Read more about Spring Boot'," + "'2016-02-01 00:00:00.00')"); jdbcTemplate.execute("INSERT INTO JOURNAL(title,summary,created) VALUES('Spring Boot in the Cloud','Learn Spring Boot using Cloud" + "Foundry','2016-01-01 00:00:00.00')"); log.info("> Done."); } public List<Journal> findAll(){ List<Journal> entries = new ArrayList<>(); jdbcTemplate.query("SELECT * FROM JOURNAL", new Object[]{}, (rs,row) -> new Journal(rs.getLong("id"), rs.getString("title"), rs.getString("summary"), new Date(rs.getTimestamp("created").getTime()))) .forEach(entries::add); return entries; } }
- JdbcTemplate - автосвязанный класс, который отвечает за выполнение запросов для БД.
- insertDate - первым делом, метод пытается удалить таблицу JOURNAL, если она есть, далее создает таблицу занова и добавляет в нее записи
- findAll - получает,с помощью RowMapper, все записи из таблицы JOURNAL.
И класс запуска приложения:
package com; import com.service.JournalService; 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 Application implements CommandLineRunner { private static final Logger log = LoggerFactory.getLogger(Application.class); @Autowired private JournalService service; public static void main(String[] arg){ SpringApplication.run(Application.class, arg); } @Override public void run(String... strings) throws Exception { log.info("@@ Inserting Data...."); service.insertData(); log.info("@@ findAll() call..."); service.findAll().forEach(entry -> log.info(entry.toString())); } }Данный класс имплементирует интерфейс CommandLineRunner, для этого необходимо переопределить метод run, он выполнится после старта приложения.