SpringBoot实战(四)之使用JDBC和Spring访问数据库

这里演示的是h2databse示例,所以简单的介绍普及下h2database相关知识

H2数据库是一个开源的关系型数据库。

H2是一个嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2提供了一个十分方便的web控制台用于操作和管理数据库内容。它还提供兼容模式,可以兼容一些主流的数据库,因此采用H2作为开发期的数据库非常方便。

H2数据库特点

  1. 短小精干。
  2. Java编写,可使用GCJ和IKVM.NET编译。
  3. 同时支持网络版和嵌入式版本,另外还提供了内存版。
  4. 有比较好的兼容性,支持相当标准的sql标准,支持集群。
  5. 提供JDBCODBC访问接口,提供了非常友好的基于web的数据库管理界面

这里说下JdbcTemplate,之所以会出现JdbcTemplate,我个人加上我自己的一些想法,传统的JDBC的高耦合性和许多重复性增删改查,使得JDBC的升级版诞生,这一点与MyBatis Plus有共同的特点。而JDBCTemplate正是看到这一点后,对于JDBC进行升级。

关于JDBCTemplate示例,大家可以参考这位朋友写的示例:https://www.cnblogs.com/janes/p/6971839.html

下面引用下他的关于JdbcTemplate的介绍:

JdbcTemplate是最基本的Spring JDBC模板,这个模板支持简单的JDBC数据库访问功能以及基于索引参数的查询。

Spring数据访问模板:在数据库操作过程中,有很大一部分重复工作,比如事务控制、管理资源以及处理异常等,Spring的模板类处理这些固定部分。同时,应用程序相关的数据访问在回调的实现中处理,包括语句、绑定参数以及整理结果等。这样一来,我们只需关心自己的数据访问逻辑即可。

Spring的JDBC框架承担了资源管理和异常处理的工作,从而简化了JDBC代码,我们只需要编写从数据库读写数据的必需代码就万事大吉了。

一、导入依赖

<?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>org.springframework</groupId>
    <artifactId>gs-relational-data-access</artifactId>
    <version>0.1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.8.RELEASE</version>
    </parent>

    <properties>
        <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>

二、编写实体

Customer.java

package hello;

public class Customer {
    private long id;
    private String firstName, lastName;

    public Customer(long id, String firstName, String lastName) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    @Override
    public String toString() {
        return String.format(
                "Customer[id=%d, firstName=‘%s‘, lastName=‘%s‘]",
                id, firstName, lastName);
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

}

三、编写启动类

package hello;

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;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

@SpringBootApplication
public class Application implements CommandLineRunner {

    private static final Logger log = LoggerFactory.getLogger(Application.class);

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

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Override
    public void run(String... strings) throws Exception {

        log.info("Creating tables");

        jdbcTemplate.execute("DROP TABLE customers IF EXISTS");
        jdbcTemplate.execute("CREATE TABLE customers(" +
                "id SERIAL, first_name VARCHAR(255), last_name VARCHAR(255))");

        // Split up the array of whole names into an array of first/last names
        List<Object[]> splitUpNames = Arrays.asList("John Woo", "Jeff Dean", "Josh Bloch", "Josh Long").stream()
                .map(name -> name.split(" "))
                .collect(Collectors.toList());

        // Use a Java 8 stream to print out each tuple of the list
        splitUpNames.forEach(name -> log.info(String.format("Inserting customer record for %s %s", name[0], name[1])));

        // Uses JdbcTemplate‘s batchUpdate operation to bulk load data
        jdbcTemplate.batchUpdate("INSERT INTO customers(first_name, last_name) VALUES (?,?)", splitUpNames);

        log.info("Querying for customer records where first_name = ‘Josh‘:");
        jdbcTemplate.query(
                "SELECT id, first_name, last_name FROM customers WHERE first_name = ?", new Object[] { "Josh" },
                (rs, rowNum) -> new Customer(rs.getLong("id"), rs.getString("first_name"), rs.getString("last_name"))
        ).forEach(customer -> log.info(customer.toString()));
    }
}

最终结果是:

main()方法使用Spring Boot的SpringApplication.run()方法来启动应用程序。您是否注意到没有一行XML?也没有web.xml文件。此Web应用程序是100%纯Java,您无需处理配置任何管道或基础结构。

Spring Boot支持H2,一种内存中的关系数据库引擎,并自动创建连接。因为我们使用的是spring-jdbc,Spring Boot会自动创建一个JdbcTemplate。该@Autowired JdbcTemplate字段自动加载它并使其可用。

这个Application类实现了Spring Boot CommandLineRunner,这意味着它将run()在加载应用程序上下文后执行该方法。

首先,使用JdbcTemplate’s `execute方法安装一些DDL 。

其次,您获取字符串列表并使用Java 8流,将它们拆分为Java数组中的firstname / lastname对。

然后使用JdbcTemplate’s `batchUpdate方法在新创建的表中安装一些记录。方法调用的第一个参数是查询字符串,最后一个参数(Objects 的数组)包含要替换为“?”字符的查询的变量。

补充说明:

Java 8 lambdas很好地映射到单个方法接口,如Spring的RowMapper。如果您使用的是Java 7或更早版本,则可以轻松插入匿名接口实现,并具有与lambda expresion正文所包含的相同的方法体,并且它可以毫不费力地使用Spring。

原文地址:https://www.cnblogs.com/youcong/p/9385710.html

时间: 2024-08-29 17:35:07

SpringBoot实战(四)之使用JDBC和Spring访问数据库的相关文章

[SpingBoot guides系列翻译]通过JDBC和Spring访问关系数据库

原文 参考链接 hikaricp Spring Boot JDBC Starter Spring Boot Starter Parent h2 database introduction Autowired 目的 通过JDBC和Spring去访问关系型数据库. 你将构建的项目 你将构建一个通过Sping的JdbcTemplate 去访问关系型数据库的项目. 你需要的 大约15min 喜欢的编辑器或IDE jdk1.8+ Gradle4+ 或 Maven3.2+ 如何完成 跟着教程演示使用Mave

Spring访问数据库(oracle)配置

陈科肇:http://blog.csdn.net/u013474104/article/details/44279309 ================ 1.spring 对数据库访问的支持 当我们开发持久层的时候,我们面临着多种选择,比如使用JDBC.Hibernate.java持久化API或其它持久化框架.幸好的是spring能够支持所有这些持久化机制. DAO(data access boject)数据访问对象,这个名字就很形象描述了DAO在应用程序中所扮演的角色.DAO提供了数据的读取

Spring入门到精通&lt;三&gt;Spring访问数据库

Spring在数据访问方面提供了模板化和Dao支持类的提供,方便操作数据库. 一.Spring JDBC 1.配置数据源 DataSource 不管选择哪一种Spring Dao的支持方式,你都需要配置一个数据源的引用.配置方式有三种: ①.使用JNDI查找数据源: ②.使用数据源连接池:(dbcp c3p0 druid)  <!-- 配置数据源 -->      <bean id="dataSource" class="org.apache.commons

使用JDBC如何提高访问数据库的性能?

1. 使用数据连接池(Connection Pool), 避免使用DriverManager.getConnection. 2. 合理的配置数据连接池参数,设置数据连接池的初始大小,最大连接数,连接超时时间等. 3. 选择合适的事务等级,按照不同的数据库操作类型选择不同的事务等级. 4. 及时关闭Connection,不关闭的话会严重影响系统的性能,甚至造成系统罢工. 5. 优化Statement 1) 选择合适的Statement, 根据不同的数据库操作选择Statement, Prepare

apollo客户端springboot实战(四)

1. apollo客户端springboot实战(四) 1.1. 前言 ??经过前几张入门学习,基本已经完成了apollo环境的搭建和简单客户端例子,但我们现在流行的通常是springboot的客户端,所以这章还是来学习下springboot客户端如何和apollo整合 ??接下来我来改造我自己的项目,我本来的项目接入的是spring config配置管理中心,读的git上的配置,它没有管理界面,功能也比较单一,所以我打算替换成apollo 1.2. 配置改动 添加配置类,这个@EnableAp

SpringBoot实战

SpringBoot精要 SpringBoot的四个核心 1.自动配置:针对很多Spring应用程序常见的应用功能,SpringBoot能自动提供相关配置. 在任何Spring应用程序的源代码中,都可以找到java配置或XML配置,他们为应用程序开启了特定的特性和功能. 2.起步依赖:告诉SpringBoot需要什么功能,他就能引入需要的库. SpringBoot起步依赖基本都以spring-boot-starter打头,随后是直接代表其功能的名字,比如web.test. 3.命令行界面:这是S

SpringBoot实战总汇--详解

简介 Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 J2EE)的 轻量级代替品.无需开发重量级的 Enterprise JavaBean(EJB),Spring 为企业级 Java 开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java 对象(Plain Old Java Object,POJO)实现了 EJB 的功能. springboot起步 1.添加依赖 在pom.xml中添加依赖 <parent> <g

SpringBoot入门四,添加MyBatis支持

项目基本配置参考SpringBoot入门一,使用myEclipse新建一个SpringBoot项目,使用myEclipse新建一个SpringBoot项目即可.现在来给项目添加一个MyBatis支持,添加方式非常简单,仅需两步即可,具体内容如下: 1. pom.xml添加以下配置信息 数据源采用最新的hikari,据说性能相当牛X,想了解的可以去百度一下 <!-- 引入默认连接池,SpringBoot2.x采用hikari连接池 --> <dependency> <group

Spring(四)Spring与数据库编程

Spring最重要的功能毫无疑问就是操作数据.数据库的百年城是互联网编程的基础,Spring为开发者提供了JDBC模板模式,那就是它自身的JdbcTemplate.Spring还提供了TransactionTemplate支持事务的模板.Spring并没有支持MyBatis,好在MyBatis社区开发了接入Spring的开发包,该包也提供了SqlSessionTemplate给开发者使用,该包还可以屏蔽SqlSessionTemplate这样的功能性代码,可以在编程中擦除SqlSessionTe