Accessing Relational Data using JDBC with Spring

您将使用Spring JdbcTemplate 构建应用,访问数据库中数据。
下面的简单数据访问逻辑,将与下面的管理客户的姓氏和名字。 表示该数据在应用程序级别,创建一个客户 类。
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;}@Overridepublic String toString() {return String.format("Customer[id=%d, firstName='%s', lastName='%s']",id, firstName, lastName);}// getters & setters omitted for brevity
}

Spring提供了模板类 JdbcTemplate 这使得它很容易使用关系数据库SQL和JDBC。 大部分的JDBC代码、配置、异常处理和通用错误检,可以用JdbcTemplate 很好实现,你所要做的就是专注于手头的任务。

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);}@AutowiredJdbcTemplate jdbcTemplate;@Overridepublic 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 namesList<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 listsplitUpNames.forEach(name -> log.info(String.format("Inserting customer record for %s %s", name[0], name[1])));// Uses JdbcTemplate's batchUpdate operation to bulk load datajdbcTemplate.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()));}
}

@SpringBootApplication包括 @Configuration @EnableAutoConfiguration @ComponentScan

SpringApplication.run()用来启动容器应用
spring boot spots H2 ,一个内存中的关系数据库引擎,并自动创建一个连接。 因为我们使用的是 spring jdbc,
spring的自动创建一个JdbcTemplate 。 用 @ autowired JdbcTemplate 注解自动加载它,使其可用。
这Application 类实现spring boot中的 CommandLineRunner ,这意味着它将执行 run() 方法在应用程序加载启动的时候。
对于单一的insert语句, JdbcTemplate的插入 方法是好的。 但对于多个插入,最好使用batchUpdate 
使用 对于参数避免 SQL注入攻击 指示JDBC绑定变量。

使用maven构建项目,下面是maven

<?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.2.5.RELEASE</version></parent><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-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>

The Spring Boot Maven plugin 提供很多方便的特性

  • 它集成的所有jar文件的类路径中,构建一个单一的、可运行的“uber-jar”,这使得它更方便执行和提供服务。

    它搜索 public staticvoid main() 标志作为一个可运行的类方法。

    它提供了一个内置的依赖项解析器,设置版本号相匹配 spring boot依赖性,你可以重写。

spring boot demo(spring jdbc访问数据)相关推荐

  1. java多个数据库数据进行访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码...

    之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...

  2. boot spring 接口接收数据_在 Spring Boot 中使用 Dataway 配置数据查询接口

    Dataway介绍 Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具.使得使用者无需开发任何代码就配置一个满足需求的接口. 整个接口配置.测试.冒烟.发布.一站式都通过 ...

  3. Spring Boot和Spring数据JPA集成

    如今,借助于Spring Boot和spring Data,spring和JPA集成已变得轻而易举. 我要设置一个PostgreSQL服务器 docker pull postgres #run the ...

  4. mysql 多数据源访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码

    之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...

  5. 5.spring boot使用FastJson解析JSON数据

    2019独角兽企业重金招聘Python工程师标准>>> 1.引入FastJson依赖包 <dependency><groupId>com.alibaba< ...

  6. Spring Boot实战解决高并发数据入库: Redis 缓存+MySQL 批量入库

    前言 最近在做阅读类的业务,需要记录用户的PV,UV: 项目状况:前期尝试业务阶段: 特点: 快速实现(不需要做太重,满足初期推广运营即可) 快速投入市场去运营 收集用户的原始数据,三要素: 谁 在什 ...

  7. 在Spring Boot中加载初始化数据

    文章目录 依赖条件 data.sql文件 schema.sql 文件 @sql注解 @SqlConfig 注解 在Spring Boot中加载初始化数据 在Spring Boot中,Spring Bo ...

  8. 基于Spring Boot和Spring Cloud实现微服务架构学习--转

    原文地址:http://blog.csdn.net/enweitech/article/details/52582918 看了几周spring相关框架的书籍和官方demo,是时候开始总结下这中间的学习 ...

  9. 基于Spring Boot和Spring Cloud实现微服务架构学习

    目录 Spring 顶级框架 Spring cloud子项目 WHAT - 什么是微服务 微服务简介 微服务的具体特征 SOA vs Microservice HOW - 怎么具体实践微服务 客户端如 ...

  10. Angular 6集成Spring Boot 2,Spring Security,JWT和CORS

    主要内容:Spring Boot 2的基础应用.CORS配置.Actuator监控:Spring Boot集成springfox-swagger,利用Swagger生成JSON API文档,利用Swa ...

最新文章

  1. C# winform单元格的formatted值的类型错误 DataGridView中CheckBox列运行时候System.FormatException异常
  2. python自动化测试判断方法_python接口自动化测试之根据excel中的期望结果是否存在于请求返回的响应值中来判断用例是否执行成功...
  3. Cassandra 数据分区
  4. Shell 编程快速入门
  5. dji大疆机器人冬令营_2019RoboMaster高中生机器人冬令营火热进行中
  6. 中科大 计算机网络9 互联网历史
  7. HTTP WS 区别
  8. Filecoin将启动第一轮全球社区开发者二次方投票资助计划和线上Hackathon
  9. 并行算法设计与性能优化总结
  10. QQ2011的DD包密码验证报文解密密钥计算困惑之二
  11. Linux设备驱动之字符设备(三)
  12. 常用应届生Java开发笔试面试题(更新中)
  13. CATIA二次开发—探讨CATIA单位问题
  14. win8 查看和更换密钥方法
  15. PINGTELNET
  16. vscode 程序员鼓励师_程序员鼓励师插件Rainbow Fart(彩虹屁)
  17. 如何在plsql中终止存储过程的执行
  18. 0基础快速入门CSS技术栈(6)—图解详细阐述说透CSS的浮动及应用、浮动的扩展及清除浮动和详解快速·1photoshop切图(附详细案例源码解析过程)2021-01-07更新
  19. [图像]中值滤波(Matlab实现)
  20. 网络协议 14 - 流媒体协议

热门文章

  1. 解析:如何在 ASP.NET 中下载文件
  2. [转载] python--isalnum()函数
  3. 大兄dei,早点看清this吧
  4. C Looooops POJ - 2115 (exgcd)
  5. Eclipse下创建Spring MVC web程序--非maven版
  6. 【转】MEF程序设计指南四:使用MEF声明导出(Exports)与导入(Imports)
  7. oracle+110个常用函数
  8. MySQL内存使用-线程独享
  9. Oracle 单实例 迁移到 RAC 实例 -- 使用RMAN 异机恢复
  10. pdf文件的处理(弄成小容量大小的文本文件)