89.【SpringBoot-02】(一)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 89.【SpringBoot-02】

聊一聊如何构建一个网站

https://www.bjchuhai.com/ 76Z7D

格式化代码块: Ctrl+Alt+L

全局搜索: Shift+Shift

局部搜索:Ctrl+F

  • 模板: (前端的模板)

http://www.cssmoban.com/ 模板之家

1.前端搞定:页面长什么样子:数据

2.设计数据库

3.前端让他能够自动运行,独立化工程

4.数据接口如何对接,json,对象all in one

5.前后端联调测试

后台框架:xadmin http://x.xuebingsi.com/

前端界面:至少自己能够通过前端框架,组合出来一个网站页面

(十四)、.SpringBoot整合数据库操作

1.整合JDBC

(1).SpringData简介

对于数据访问层,无论是 SQL(关系型数据库) 还是 NOSQL(非关系型数据库),Spring Boot 底层都是采用 Spring Data 的方式进行统一处理

Spring Boot 底层都是采用 Spring Data 的方式进行统一处理各种数据库,Spring Data 也是 Spring 中与 Spring BootSpring Cloud 等齐名的知名项目。

Sping Data 官网:https://spring.io/projects/spring-data

(2).整合JDBC

数据库相关的启动器 :可以参考官方文档:

https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/htmlsingle/#using-boot-starter

1.我们创建一个SQL工程项目

2.创建完模板之后 我们在pom.xml中会有以下的依赖

  • 我们要记得更改对应的mysql驱动版本依赖
<dependency>    
    <groupId>org.springframework.boot</groupId>    
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>

3.编写yaml配置文件 连接数据库---application.yaml

  • 全场不需要使用 双引号进行引注
spring:
  datasource:
    # 我们这里用户名和密码都不需要双引号 ,
      username: root
      password: 121788
      url: jdbc:mysql://localhost:3306/mybatis?userUnicode=true&characterEncoding=utf-8
      driver-class-name: com.mysql.jdbc.Driver

4.我们配置完以上基本配置之后,我们进行测试数据

  • 我们要对DataSource进行控制权的反转。 也就是自动装配
  • 调用DataSource的一个getConnection()链接的一个方法 不要在方法里面写形参了
  • 然后我们对数据进行遍历
package com.jsxs;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
@SpringBootTest
class SpringBoot03SqlApplicationTests {
    //  如果我们这里添加 @AutoWried 出现dataSource爆红,那么我们就进行改成Resource
    @Resource
//    这个数据源的主要目的就是为了连接数据库,里面内敛一个getConnection()这个方法。
    private DataSource dataSource;
    @Test
    void contextLoads() throws SQLException {
//        这里查看一下默认的数据源
        System.out.println(dataSource.getClass());
//        链接数据库的操作,切记我们这里不能写形参了。
        Connection connection = dataSource.getConnection();
//        输入sql语句
        String sql="select *from user";
//        我们进行预编译语句
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
//        这里我们调用查询的方法
        ResultSet resultSet = preparedStatement.executeQuery();
//        我们开始对数据进行遍历
        while (resultSet.next()){
            System.out.println(resultSet.getInt(1)+resultSet.getString(2));
        }
        connection.close();
    }
}

5.源码分析:

我们全局搜索 DataSourceProperties.class,我们点开看源码。

利用yaml对DataSource进行赋值的操作。

结果:我们可以看到他默认给我们配置的数据源为 : class com.zaxxer.hikari.HikariDataSource , 我们并没有手动配置

我们来全局搜索一下,找到数据源的所有自动配置都在 :DataSourceAutoConfiguration文件:

@Import(
    {Hikari.class, Tomcat.class, Dbcp2.class, Generic.class, DataSourceJmxConfiguration.class}
)
protected static class PooledDataSourceConfiguration {
    protected PooledDataSourceConfiguration() {
    }
}

这里导入的类都在 DataSourceConfiguration 配置类下,可以看出 Spring Boot 2.2.5 默认使用HikariDataSource 数据源,而以前版本,如 Spring Boot 1.5 默认使用 org.apache.tomcat.jdbc.pool.DataSource 作为数据源

HikariDataSource 号称 Java WEB 当前速度最快的数据源,相比于传统的 C3P0 、DBCP、Tomcat jdbc 等连接池更加优秀

可以使用 spring.datasource.type 指定自定义的数据源类型,值为 要使用的连接池实现的完全限定名

关于数据源我们并不做介绍,有了数据库连接,显然就可以 CRUD 操作数据库了。但是我们需要先了解一个对象 JdbcTemplate

(3).JdbcTemplate ⭐

1、有了数据源(com.zaxxer.hikari.HikariDataSource),然后可以拿到数据库连接(java.sql.Connection),有了连接,就可以使用原生的 JDBC 语句来操作数据库;

2、即使不使用第三方第数据库操作框架,如 MyBatis等,Spring 本身也对原生的JDBC 做了轻量级的封装,即JdbcTemplate

3、数据库操作的所有 CRUD 方法都在 JdbcTemplate 中。

4、Spring Boot 不仅提供了默认的数据源,同时默认已经配置好了 JdbcTemplate 放在了容器中,程序员只需自己注入即可使用

5、JdbcTemplate 的自动配置是依赖 org.springframework.boot.autoconfigure.jdbc 包下的 JdbcTemplateConfiguration 类

JdbcTemplate类主要提供以下几类方法:

  • execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
  • update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;
  • batchUpdate方法用于执行批处理相关语句;
  • query方法及queryForXXX方法:用于执行查询相关语句;
  • call方法:用于执行存储过程、函数相关语句。
    1.查询数据库的全部信息

我们这里要使用List<>集合内嵌Map集合,因为Map集合的形参必须是两个。所以我们通过内嵌Map集合我们就可以实现对数据库的信息(包括字段名和信息)

我们如果想使用ResultFul风格, (1).需要在请求的路径上加 {xxx} 。(2).需要在形参上添加注解@PathVariable(“xxx”)。

JdbcTempladet类的update()方法形参有很多种, (sql,objects).我们可以使用这样的方法对数据进行动态的处理

package com.jsxs.controller;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@RestController
public class JDBCTemplate {
    @Resource
    private JdbcTemplate jdbcTemplate;
    //  查询
    @RequestMapping("/userList")
    public List<Map<String, Object>> Jdbc() {
//        查询数据库的所有信息
//        没有实体类,数据库中的属性怎么获取?    Map<属性名,值>,    List<Object>只能有一个属性形参
//        为什么要这样做? 因为我们传输的是JSON值,要求我们这样做。
        List<Map<String, Object>> list_maps = jdbcTemplate.queryForList("select *from user");
        return list_maps;
    }
    //  增加
    @RequestMapping("/addUser")
    public String addUser() {
        String sql = "insert into user values(8,'嘿嘿','123444')";
        int update = jdbcTemplate.update(sql);
        if (update > 0) {
            return "update success";
        } else {
            return "Update on!";
        }
    }
    //    删除
    @RequestMapping("/deleteUser")
    public String deleteUser() {
        String sql = "delete from user where id=8";
        int update = jdbcTemplate.update(sql);
        if (update > 0) {
            return "delete success!";
        } else {
            return "delete no!";
        }
    }
    //    更改
//    利用ResultFul风格的条件
//     (1). 我们在路径添加的时候,我们需要花括号 {}
//       (2).  我们需要注解  @PathVariable("id")
//          (3). update(): 后面有很多形参,我们可以添加数组,实现 ? 来实现对数据的更改。
    @RequestMapping("/updateUser/{id}")
    public String updateUser(@PathVariable("id") int id) {
        String sql = "update user set name=?,pwd=? where id=" + id;
//        我们这里对Object设置成数组、
        Object[] objects = new Object[2];
        objects[0] = "1111111";
        objects[1] = "1111111";
//       我们这里多添加一个参数,第一个是sql语句。第二个是objects数组;
        int update = jdbcTemplate.update(sql, objects);
        if (update > 0) {
            return "update success!";
        } else {
            return "update no!";
        }
    }
}



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
druid Java 数据库连接
89.【SpringBoot-02】(九)
89.【SpringBoot-02】
79 0
|
Java 应用服务中间件 容器
|
4月前
|
XML Java 数据格式
SpringBoot详解
SpringBoot详解
41 0
|
6月前
|
JSON Java 数据安全/隐私保护
Springboot 之 HandlerMethodReturnValueHandler 运用
Springboot 之 HandlerMethodReturnValueHandler 运用
143 0
|
监控 Dubbo Java
|
前端开发 Java 容器
87.【SpringBoot-01】(十)
87.【SpringBoot-01】
35 0
|
监控 druid Java
89.【SpringBoot-02】(二)
89.【SpringBoot-02】
62 0
|
Java
87.【SpringBoot-01】(九)
87.【SpringBoot-01】
71 0
|
XML Java 数据格式
87.【SpringBoot-01】(二)
87.【SpringBoot-01】
56 0
|
安全 前端开发 数据安全/隐私保护
89.【SpringBoot-02】(十)
89.【SpringBoot-02】
41 0