总是要用到数据库的嘛,曾经我一度以为,写代码,编程就是搞数据库增删改查,甚至你设计一个系统,大部分时候在为如何设计关系型数据库努力,究其原因,是因为关系型数据库是逻辑的主要呈现。

这个系列,主要是对 Spring Boot 的数据库操作做一些示例程序展示。包括 mybatis、jpa操作、不同数据库的链接方式、多数据源切换、分库分表、自动编号问题、数据库优化问题。

从本系列开始,都需要用到 mysql 数据库 和其他一些参考的数据库。请准备相关环节。

  • mysql 5.6+
  • jdk1.8+
  • spring boot 2.1.6
  • idea 2018.1

本项目源码下载

1 准备数据库

mysql 5.6+ 数据库

导入数据表 数据表t_user下载

(注意:本人使用了 Navicat PreminumMysql 进行管理)

如果想学习如何在 Centos7 上部署 mysql 可以参考我这篇 阿里云上的Centos 7.6的一次Nginx+Mysql+PHP7.3 部署https://www.cnblogs.com/fishpro/p/10651011.html)

字段 类型 主键 说明
id int 自动编号
user_name varchar(100) 用户名
password varchar(255) 密码
last_login_time date 最近登录时间
sex tinyint 性别 0男 1女 2其他

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0; -- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`last_login_time` datetime DEFAULT NULL,
`sex` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=armscii8; -- ----------------------------
-- Records of t_user
-- ----------------------------
BEGIN;
INSERT INTO `t_user` VALUES (1, 'json', '123', '2019-07-27 16:01:21', 1);
INSERT INTO `t_user` VALUES (2, 'jack jo', '123', '2019-07-24 16:01:37', 1);
INSERT INTO `t_user` VALUES (3, 'manistal', '123', '2019-07-24 16:01:37', 1);
INSERT INTO `t_user` VALUES (4, 'landengdeng', '123', '2019-07-24 16:01:37', 1);
INSERT INTO `t_user` VALUES (5, 'max', '123', '2019-07-24 16:01:37', 1);
COMMIT; SET FOREIGN_KEY_CHECKS = 1;

2 新建 Spring Boot 项目工程

  1. File > New > Project,如下图选择 Spring Initializr 然后点击 【Next】下一步
  2. 填写 GroupId(包名)、Artifact(项目名) 即可。点击 下一步

    groupId=com.fishpro

    artifactId=jdbc
  3. 选择依赖 Spring Web Starter 前面打钩,勾选SQL选项的 JDBC、MySql。
  4. 项目名设置为 spring-boot-study-jdbc.

3 依赖引入 Pom.xml

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

4 Jdbc 配置

application.yml 配置(.properties文件类似)

server:
port: 8086 spring:
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/demo_test?useSSL=false&useUnicode=true&characterEncoding=utf8
username: root
password: 123

5 编写示例代码

增加代码 controller/UserController.java

@RestController
@RequestMapping("/api/user")
public class UserController { @Autowired
private JdbcTemplate jdbcTemplate; /**
* 获取示例数据库 t_user 的全部信息
* @return 返回 json 数据
* */
@GetMapping("/users")
public Object getUsers(){
List<Map<String,Object>> list=jdbcTemplate.queryForList("select * from t_user ");
return list;
} }

6 运行示例

运行 JdbcApplication 后在浏览器输入 http://localhost:8086/api/user/users 输出如下结果:

[{
"id": 1,
"user_name": "json",
"password": "123",
"last_login_time": "2019-07-27T21:01:21.000+0000",
"sex": 1
}, {
"id": 2,
"user_name": "jack jo",
"password": "123",
"last_login_time": "2019-07-24T21:01:37.000+0000",
"sex": 1
}, {
"id": 3,
"user_name": "manistal",
"password": "123",
"last_login_time": "2019-07-24T21:01:37.000+0000",
"sex": 1
}, {
"id": 4,
"user_name": "landengdeng",
"password": "123",
"last_login_time": "2019-07-24T21:01:37.000+0000",
"sex": 1
}, {
"id": 5,
"user_name": "max",
"password": "123",
"last_login_time": "2019-07-24T21:01:37.000+0000",
"sex": 1
}]

7 问题思考

  1. JdbcTemplate 如何动态获取数据库
  2. JdbcTemplate 如何实现 POJO 操作
  3. JdbcTemplate 如何分表分库
  4. JdbcTemplate 如何操作 Oracle 和 MSSQL Server

本项目源码下载

Spring Boot JDBC 使用教程的更多相关文章

  1. Spring Boot Mybatis 使用教程

    Mybatis 在当下互联网开发环境,十分重要.本章主要讲述 Mybatis 如何使用. 从本系列开始,都需要用到 mysql 数据库 和其他一些参考的数据库.请准备相关环节.本章需要以下环境支撑: ...

  2. Spring Boot JPA 使用教程

    JPA 是 Spring Boot 官方推荐的数据库访问组件,其充分体现了面向对象编程思想,有点像 asp.net 的 EFCore.JPA 也是众多 ORM 的抽象. 从本系列开始,都需要用到 my ...

  3. (转) Spring Boot JDBC 连接数据库

    文本将对在Spring Boot构建的Web应用中,基于MYSQL数据库的几种数据库连接方式进行介绍. 包括JDBC.JPA.MyBatis.多数据源和事务. 1 JDBC 连接数据库 1.1 属性配 ...

  4. Spring Boot JDBC 连接数据库

    文本将对在Spring Boot构建的Web应用中,基于MYSQL数据库的几种数据库连接方式进行介绍. 包括JDBC.JPA.MyBatis.多数据源和事务. JDBC 连接数据库 1.属性配置文件( ...

  5. Spring Boot 2.x教程-Thymeleaf 原理是什么

    layout: post title: Spring Boot 2.x教程-Thymeleaf 原理是什么 categories: SpringBoot description: Spring Boo ...

  6. Spring Boot 2 快速教程:WebFlux 集成 Mongodb(四)

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第104篇原创 文章工程:* JDK 1.8* M ...

  7. Spring Boot 2.0 教程 | AOP 切面统一打印请求日志

    欢迎关注微信公众号: 小哈学Java 文章首发于个人网站 https://www.exception.site/springboot/spring-boot-aop-web-request 本节中,您 ...

  8. Shiro+JWT+Spring Boot Restful简易教程

    序言 我也是半路出家的人,如果大家有什么好的意见或批评,请务必issue下. 项目地址:https://github.com/Smith-Cruise/Spring-Boot-Shiro . 如果想要 ...

  9. spring boot mybatis 整合教程

    本项目使用的环境: 开发工具:Intellij IDEA 2017.1.3 springboot: 1.5.6 jdk:1.8.0_161 maven:3.3.9 额外功能 PageHelper 分页 ...

随机推荐

  1. wireshark抓pc上的包

    简介:wirkshark是全世界最广泛的网络封包分析软件之一. 软件用途: 网络管理员:我用它检测网络问题, 网络安全工程师:我用它检查资讯安全相关问题, 开发者:我用它为新的通讯协定除错, 普通使用 ...

  2. Java爬虫学习(1)之爬取新浪微博博文

    本次学习采用了webmagic框架,完成的是一个简单的小demo package com.mieba.spiader; import us.codecraft.webmagic.Page; impor ...

  3. Python | 字符串拆分和拼接及常用操作

    一.字符串拆分 str = "hola ha1 ha2 china ha3 " # partition 从左侧找到第一个目标,切割成三组数据的[元组] str1 = str.par ...

  4. dremio的学习点滴

    在连接数据源后,进行数据源反射的创建,dremio会在本地创建一个类似于副本的文件,具体目录未知,当下次去执行sql时,则会启动加速器进行查询速度的优化. 反射策略: full update:数据源全 ...

  5. MySQL移动数据库位置

    http://zlyang.blog.51cto.com/1196234/1726029 需求:MySQL数据库文件原位置:/var/lib/mysql 要移动至:/data/mysql 1.首先在/ ...

  6. RTMP服务器搭建(nginx+rtmp)

    参考文章:https://obsproject.com/forum/resources/how-to-set-up-your-own-private-rtmp-server-using-nginx.5 ...

  7. linux下实现keepalived+nginx高可用

    1 nginx负载均衡高可用 1.1 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务, ...

  8. ACM-ICPC实验室20.2.21测试-图论(二)

    A.患者的编号 给出一个有向图,要求你输出字典序最小的拓扑排序. 常规拓扑排序是做不了的,正解是反向建图,同时用大根堆的优先队列维护,保证每次优先访问编号大的结点,再反向输出~ #include< ...

  9. BK-信息查找、摘取

    先了解下压缩文件中的内容: 实现功能: 1.根据"e1.xlsx"表中的dealerName.bu(可能没有).时间,匹配"待挖取信息表.xlsx"中对应的相关 ...

  10. MySQL 整型

    MySQL中我们建表的时候,类型可以用bigint(20), 这是什么意思呢? 首先我们看bigint, MySQL的整型类型有这样几种: 类型      占用字节 tinyint        1 ...