• [SpringBoot 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+

    如何完成

    跟着教程演示使用Maven的方式。


    通过Maven构建

    如果不熟悉最基本的Maven用法,看这里

    创建结构结构

    mkdir -p src/main/java/hello

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

    build的时候用到了spring-boot-maven-plugin插件。他提供了很多便捷的特性。

    • 把用到的所有依赖打包成一个整体,这样方便服务的执行以及分发。
    • public static void main()标记成可执行类。
    • 提供了内置的依赖解析器用于设置相符的Spring Boot依赖的版本号。

    再介绍一下上面的几个依赖引用

    • Spring Boot Starter Parent:提供Maven项目的依赖和插件管理功能。
    • Spring Boot Starter JDBC:Spring里面基于HikariCP的JDBC库。
    • h2:内存数据库,用于测试和开发。

    创建一个Customer 对象

    创建一个Customer对象,包含firstname 和 lastname来表示应用层的数据对象。

    src/main/java/hello/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);
        }
    }
    

    存取数据

    Spring提供了JdbcTemplate来简化JDBC相关的sql关系数据操作。大部分的JDBC代码可能会陷入资源获取,链接管理,异常处理,一般的错误检查等和我们代码要实现的主要功能没有关系的问题中。JdbcTemplate帮我们处理,你需要做的就是关注你的逻辑代码。下面开始写Application.java。

    src/main/java/hello/Application.java

    package hello;
    
    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    
    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;
    
    @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... args) throws Exception {
            log.info("创建表");
    
            jdbcTemplate.execute("drop table customer if exists");
            jdbcTemplate.execute("create table customer(id serial, first_name varchar(255), last_name varchar(255))");
    
            List<Object[]> splitUpNames = Arrays.asList("John Woo", "Jeff Dean", "Josh Bloch", "Josh Long").stream()
                    .map(name -> name.split(" "))
                    .collect(Collectors.toList());
    
            splitUpNames.forEach(name -> log.info(String.format("插入表数据,first_name %s last_name %s", name[0], name[1])));
            jdbcTemplate.batchUpdate("insert into customer (first_name, last_name) values (?,?)", splitUpNames);
    
            log.info("查询customer,first_name='Josh'");
    
            jdbcTemplate.query("select * from customer 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());
                    });
            ;
        }
    
    }
    

    启动

    有几点注意一下:

    1. @SpringBootApplication注解,相当于启用了几个注解
      1. @Configuration,表示这个类定义的是应用程序上下文。
      2. @EnableAutoConfiguration,表示Spring会通过class path,bean设置,属性设置来添加bean。
      3. @ComponentScan查找当前hello包中包含的component,configuration,service。
    2. @Autowired注解,可以用在构造器,字段,setter方法,config方法中,配置了之后Spring会自动装配。需要的时候也就是会帮你获取。
    3. Application 类实现了了Spring Boot的CommandLineRunner接口,这意味着它的run()方法会在程序装载的时候自动执行。
    4. 这个的java的lambda表达式用起来感觉挺好的。找时间好好学学。
    5. 调用JdbcTemplate的时候使用来避免sql注入攻击。

    编译生成可执行jar

    代码写好之后就能运行打包了。

    运行:mvn spring-boot:run

    打包: mvn clean package

    然后 java -jar target/gs-relational-data-access-0.1.0.jar就能跑起来了。

  • 相关阅读:
    pandas 移动列的方法
    D-Link 路由器新漏洞,黑客可远程执行任意命令
    世界第一黑客:未来云安全的威胁
    黑客针对参与Covid-19疫苗分发的公司
    iPhone为盲人自动识别并标记按钮和UI功能
    小心!基于UEFI引导的病毒,重装系统也清除不了
    美国禁用面部识别技术,到底是什么原因?
    Apple的双向无线充电器现已上市,预计最快在本周发货
    警惕黑客通过打印机侵入你的系统
    为什么未来没有密码?黑客还能破解吗?网友:同样危险
  • 原文地址:https://www.cnblogs.com/sheldon-lou/p/10758476.html
Copyright © 2020-2023  润新知