JAVA快餐 2 SpringBoot的MySql链接及原始的jdbc查询

作者: gavin 分类: Java,Java 快餐 发布时间: 2020-10-30 11:39

java应用的数据库接口的层次图如下

image

JDBC

Java应用通过JDBC接口访问数据库,JDBC(Java DataBase Connectivity/Java数据库连接)为各种数据库,如mysql、oracle等,提供一个统一的接口,应用程序通过JDBC执行各种SQL操作,如select、insert等等。在本文中,我们会通过JDBC访问数据库,验证数据库是否正常连接。

JPA

JPA(Java Persistence API/Java持久层接口),是ORM(Object Relational Mapping/对象关系映射)的一个标准,ORM的作用是在数据库表与Java对象之间建立映射,理论上来说有ORM就无需直接通过SQL操作数据库了,通过Java对象即可,这样会方便很多,Hibernate是实现JPA标准的一个有名例子。JPA建立在JDBC之上,也是通过JDBC访问数据库。

Mybatis

ORM有一些缺点,如过于笨重,比如在多表联合查询时相当繁琐,但直接使用原始的JDBC操作数据库过于低效,mybatis是现在互联网项目使用比较多的一个Java持久层库。虽然mybatis经常被和Hibernate比较,但mybatis不是JPA的一个实现,mybatis可以理解为加强版的SQL,实现了诸如动态SQL、结果集映射等,高效又不失灵活,个人倾向使用mybatis。同样的,mybatis建立在JDBC之上,通过JDBC访问数据库。后面的教程将对mybatis做详细介绍。

准备数据

在这之前,确保已经正确安装Mysql,推荐目前主流版本5.7,同时安装官方图形客户端workbench。

sql语句

可以在mysql命令行客户端直接执行sql语句,创建数据库和插入数据

创建数据库

CREATE DATABASE qikegu_demo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

创建表的sql语句:

CREATE TABLE `qikegu_demo`.`user` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `nickname` VARCHAR(50) NULL COMMENT '昵称',
  `mobile` VARCHAR(20) NULL COMMENT '手机号',
  `password` CHAR(60) NULL COMMENT '密码hash值',
  `role` VARCHAR(100) NULL DEFAULT 'user' COMMENT '角色,角色名以逗号分隔',
  PRIMARY KEY (`id`),
  UNIQUE INDEX `mobile_UNIQUE` (`mobile` ASC))
COMMENT = '用户表';

插入数据的sql语句:

INSERT INTO `qikegu_demo`.`user` (`nickname`, `mobile`, `password`) VALUES ('abc1', '13512345678', '123');
INSERT INTO `qikegu_demo`.`user` (`nickname`, `mobile`, `password`) VALUES ('abc2', '13512345677', '123');

新建好的SpringBoot项目pom.xml中配置依赖包

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

配置数据源

打开文件:application.properties,该文件在 src -> main -> resources 目录,配置数据库连接:

# 服务器端口,如果不配置默认是8080端口
server.port=8096 

# 数据库设置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/qikegu_demo?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=你的数据库密码

解释一下spring.datasource.url的配置, 主要下面几个部分:

  • localhost – 主机地址
  • 3306 – 数据库端口
  • qikegu_demo – 数据库名称

问号之后是一些其他的参数设置,如编码、时区设置这些…

spring boot现在的默认连接池是Hikari,是号称性能最好的连接池,如后续要调优连接池参数,可参考官网文档,现在都使用默认值即可。

访问数据库

添加代码验证数据库是否正常连接,添加文件:HelloController.java

image

HelloController.java的代码

package com.qikegu.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @RequestMapping(value="/hello", method=RequestMethod.GET)
    public String index() {

        String sql = "SELECT mobile FROM user WHERE id = ?";

        // 通过jdbcTemplate查询数据库
        String mobile = (String)jdbcTemplate.queryForObject(
                sql, new Object[] { 1 }, String.class);

        return "Hello " + mobile;
    }
}

我们使用spring的JdbcTemplate(这正是我们在前面引入spring jdbc依赖的原因),比使用原始的jdbc接口方便。

运行

运行程序(如何运行参照: spring boot hello world (restful接口)例子),使用浏览器访问,输出从数据库中读取的用户手机号

image

总结

本文介绍了spring boot连接mysql的过程,使用JdbcTemplate访问数据库,验证数据库连接成功。

完整代码

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注