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

这个系列,主要是对 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. pycharm通过unittest框架批量执行Python脚本用例

    1.如下图点击进入配置页 2.新增一个配置,“2”标签选择要执行的脚本的目录或者脚本文件,“3”标签选择要执行的脚本的目录

  2. [lua]紫猫lua教程-命令宝典-L1-03-01. 闭包

    L1[闭包]01. 函数的传递赋值 没什么说的 1.函数作为变量来看 可以轻松的声明 相互赋值 2.函数变量本质是 一个内存指针 所以函数变量的相互赋值不是传递的函数本身 而是指向这个函数的内存地址 ...

  3. 【C语言】复合函数求值

    例子:求复合函数F(G(X)),其中F(x)=|x-3|+|x+1|,函数G(x)=x^2-3x. 分析:从复合函数的结构可以看出,F函数的自变量为G函数的绝对值,可以将F函数和G函数作为独立的函数实 ...

  4. 为什么Oracle等数据库软件可以同时创建多个连接

    首先我们要明确的是一个IP跟一个端口确定的是一个进程的地址,也就是我们运行了一个Oracle的数据库,这时候就已经确定的了. oracle监听器也是一个TCP/IP网络中的进程,默认的端口号是1521 ...

  5. django入门(一)

    小白一枚,老是感觉自己学了点什么东西马上就忘了,所以打算写点下来,以后可以看看,也希望能给以后点进来的人有一些帮助 本文是django的入门,现在在学,有错误之处还希望能包涵和指出,谢谢! 首先先下载 ...

  6. 国内某Python大神自创完整版,系统性学习Python

    很多小伙伴纠结于这个一百天的时间,我觉得完全没有必要,也违背了我最初放这个大纲上来的初衷,我是觉得这个学习大纲还不错,自学按照这个来也能相对系统的学习知识,而不是零散细碎的知识最后无法整合,每个人的基 ...

  7. 基于icmp的tracert路由追踪程序

    https://blog.csdn.net/u013271921/article/details/45488173 #include<winsock2.h> //#include<i ...

  8. bugku 变量1

    变量1 题目信息 flag In the variable ! <?php error_reporting(0); include "flag1.php"; highligh ...

  9. Codeforces Round #614 (Div. 2)E(思维,构造,DP)

    构造边权,从0开始给边赋值,初始选取一条边权为0,每次赋值的贡献为这一条链两侧的结点(包含链的端点)个数之积,下一次赋值以当前链其一端点续一条边,边权为上次赋的值+1.先DFS找到点的组合这条链两侧结 ...

  10. php 移动操作数组函数

    下面的几个主要是移动数组指针和压入弹出数组元素的和个函数. 函数 功能 array_shift 弹出数组中的第一个元素 array_unshift 在数组的开始处压入元素 array_push 向数组 ...