Spring Boot 2系列教程6-Spring Boot JDBC

现在开始链接数据库吧. 那肯定先介绍jdbc连接数据库的方式了, 异途同归. 最为核心.

主要说JDBC. 但是又基于Spring. 所以一定要说说 Spring JDBC Template

如果要说到Spring JDBC Template 需要用到就是 spring-boot-starter-jdbc 这个starter

然后这个starter从springboot2.x 开始就改变了连接池.

连接池改用的是: HikariCP 默认的情况下是这样, 不过可以通过properties修改.

切换回来. 继续我们刚刚操作.

依赖jdbc的starter.

加入之后, 我们先看一下他的关联依赖有哪些.

HikariCP:是一个高性能JDBC连接池

连接池是什么?

说白了就是一个池子, 给你洗澡用的. 你洗澡的干净与否, 是否快速就看池子里面的水是否干净和料足. 咳咳, 举例举例.

如果没有数据库连接池的情况下是这样的:

有了连接池之后是这样式的.

区别是什么呢?

没有连接池的时候, 有几个用户就创建几个连接. 因为一台机器的连接数是有限的, 并发并不是特别的高. 而且还容易造成死机的情况.

但是有了连接池, 我就可以先创建几个连接, 谁来了就用. 我还可以设定最大连接数和最小连接数, 用来防止出现用户同一时间访问过多的问题.

然后使用了spring-jdbc的依赖. 并加入对应的事务依赖 spring-tx

如果想连接数据库, 最主要的是什么? 我要连谁. 怎么连.

关键点: 连一个MySQL数据库. 这里就需要安装MySQL数据库了. 可查看其它的安装进行mysql的安装. 后续会整理出来一份自己编写的教程. 因为时间挤挤总会有的.

我们加入MySQL 依赖. 当前的parent版本为: 8.0.13

加入如下配置:

这句话代表着, 我们现在要连接一个数据库.

url: 代表连接的地址. 告诉系统使用jdbc的连接方式连接mysql数据库, localhost是要连接的ip地址. locahost代表本机. test代表要操作的数据库.

username: 数据库的用户名

password: 数据库的密码

此时, 数据库已经可以连接了.

开始准备使用. 创建dao的package

并加入: 接口 HomeDao.java 和 实现类 HomeDaoImpl.java

HomeDao.java代码如下:

HomeDaoImpl.java代码如下:

这里多了2个注解. 一个是@Repository 和 @Autowired

@Repository 可以简单的理解为, 自动加载该类到Spring容器中.

@Autowired 注入注解. 意思在项目中注入该对象到jdbcTemplate中.

JdbcTemplate: JdbcTemplate是JDBC核心包中的中心类. 它可以帮你处理创建和释放打开的连接, 不会因为忘记关闭连接而出现问题.

说白了, 就是帮你处理那些琐碎的不需要你来处理的问题. 这个也是SpringBoot为什么现在这么火的原因.

接下来创建一个表. 来做我们接下来的演示.

CREATETABLE`user`(

`id`bigint(20)NOTNULLAUTO_INCREMENT,

`createdate`datetimeDEFAULTNULL,

`name`varchar(255)DEFAULTNULL,

`did`bigint(20)DEFAULTNULL,

PRIMARYKEY(`id`)

)ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=utf8

上面的功能是查询功能, 这里我们可以把查询到的数据进行封装. 封装到对应的实体类里面. 这里我们就要看一下.

我们接下来创建一个User的Pojo类 .

User.java代码如下:

并在HomeDao中加入接口函数.

并实现所有的类在HomeDaoImpl

我们先实现第一个根据用户主键查找对应的数据, 我们在项目开发过程中, 真是的案例会把id 进行加密或者混淆, 然后放到session或者对应的cookie中. 用来缓存当前用户信息. 所以, 这个方法, 查找用户信息的方法, 是所有系统都必须配备的操作.

我们service中, 加入接口:

并实现对应的类 HomeServiceImpl

我们也是实现对应的根据id查找对应的数据. 然后, 就可以在HomeController中使用了.

这里的4是我们数据库中的数据, 我们使用数据库工具, 查找如下:

所以知道有个主键为4, 查找对应的值, 并加入该参数中. 进行查找数据. 并把数据放入到页面中.

然后查看效果:

数据查询成功, 当然, 这是从前端到后台的查询方式, 还有其他的不用写页面也能测试出来我们的方法和接口调用的数据是否正确, 这个后续会有教程进行讲解, 现在先实现这个方式.

后台管理中, 总会出现查询所有已经注册用户的情况. 所以, 我们就需要查询一组数据, 并且封装到User实体类中. 接下来实现集合查询.

接下来为了篇幅, 会省略掉之前出现的代码. 只显示调整的代码.

调整HomeDaoImpl.java的代码,调整如下

上面是为了更加方便的编写程序, 所以实现了RowMapper接口. 这样不用在具体的业务里面调用重复的代码. 可以写到对应的dao中内部类中实现 .

数据库中的数据如下:

编写HomeServiceImpl.java的代码, 调整如下:

这里代码就比较简单.

在控制器HomeController.java 的 public String home(Model model) 中加入如下代码:

index.html加入 :

查看效果:

一般一个业务层的代码, 查询分为3种情况, 一种就是单表查询, 一种是多表查询, 还有一个是报表查询.

单表查询:

根据主键查数据 举例 根据用户id查询用户数据

根据关键字查数据 举例 根据用户名查询数据

多表查询

根据主键查数据并关联外键或者主键 根据用户id查询并检索权限信息

根据关键字查询数据, 并关联外键或者主键 根据用户名查询并检索权限信息

报表查询

根据数据进行汇总求和 举例: 某个时间段一共多少用户注册了

update

接下来做update的操作, update包含, update, insert, delete (修改, 插入, 删除).

先看修改怎么操作: 调整HomeDaoImpl.java

调整 HomeServiceImpl.java

调整Controller

执行http://localhost:8080/home

查看数据库, 发现数据已经调整

数据已经修改完成.

删除数据还是使用update方法. 具体如下:

修改HomeDaoImpl.java

修改HomeServiceImpl.java

修改HomeController.java

运行页面http://localhost:8080/home

重新检索数据id为4的数据已经被删除. 但是在实际的开发中, 可能真删除数据的公司应该存在吧.

现在有查询, 修改和删除. 还有一个新增, 我们的增删改查就完成了.

如何新增的. 查看修改的代码.

在HomeDao.java接口中加入save(User user);方法.

并实现HomeDaoImpl.java

在HomeService.java中加入

在HomeServiceImpl.java

在HomeController.java

执行http://localhost:8080/home

查询结果, 发现已经数据已经保存到数据库中.

在jdbc中除了query.... 和 queryFor... 已经update之外, 还有 execute 主要执行一些DDL语句. 例如 create table创建表结构或者调用一个存储过程.

举例说明

具体的可以查看源码. 写总是一个坚持和尝试升华的过程. 慢慢总会好的. 你说呢?

github地址送上:

https://github.com/xymiao/book-springboot2jingsui

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181213G18CA300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券