SpringBoot源代码理解数据库操作(总体第八篇)

操作数据库

一 、关系型数据库

(一)整合Druid整理

1、数据源自动配置原理

(1)导入相关依赖

  • 导入我们的依赖
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

在这里插入图片描述
导入了如下的一个数据源(数据库连接池)

<dependency>
      <groupId>com.zaxxer</groupId>
      <artifactId>HikariCP</artifactId>
      <version>4.0.3</version>
      <scope>compile</scope>
    </dependency>

在这里插入图片描述

  • 我们发现并没有导入驱动包,为什么呢
    其实就是官方不知道你接下来操作什么数据库。

  • 导入mysql的的驱动。

<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

(2)这再次复习一下我们为什么不用导入版本

  • 首先看看我们的项目结构
    在这里插入图片描述
<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 其实原理还是比较好理解的,我们的pom就是对我们的项目依赖版本管理,首先父项目的最高依赖里面就进行了版本仲裁,后续你就不用再配置,但是你也可以重新设置。你可以在如下的两个位置进行配置
    在这里插入图片描述
    在这里插入图片描述

(3)来看看我们的自动配置,配置了哪些

在这里插入图片描述
在这里插入图片描述

  • 来看看导入了jdbc的配置
    在这里插入图片描述

    • DataSourceAutoConfiguration对数据源进行配置
      在这里插入图片描述
      如果要进行配置,那就在配置文件就可以,这里开启了配值。
      数据库连接池的配置
      在这里插入图片描述
      底层配置好的数据库连接池是Hikari
      在这里插入图片描述
      并且对其进行配置
      在这里插入图片描述
    • DataSourceTransactionManagerAutoConfiguration:对事物管理器进行配置
    • JdbcTemplateAutoConfiguration:可以对数据库进行操作。可以通过spring.jdbc对配置文件进行配置。
    • JndiDataSourceAutoConfiguration:JNDI的自动配置。
    • XADataSourceAutoConfiguration:分布式事物。
  • 可以查询试一试
    在这里插入图片描述
    在这里插入图片描述

2、自定义整合Druid数据源

  • 我们整合其他的框架的,我们SpringBoot有两种方式:自定义和找starter,先看看自定义方式。
  • 官网:地址

(1)导入依赖

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.21</version>
        </dependency>

(2)编写配置类

在这里插入图片描述
我们这里可以这样写死,但是不建议这样做,因为我们之前在配置文件里面配置了,通过如下方式更快。
在这里插入图片描述
说明我们配置生效
在这里插入图片描述

(3)配置监控页面

//之前经过源代码发现,它会先检查,如果你没有配置,它才会配置

@Configuration
public class MysqlConfig {

    @ConfigurationProperties("spring.datasource")
    @Bean
    public DataSource dataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        return druidDataSource;
    }

    /**
     * 配置监控页
     * @return
     */
    @Bean
    public ServletRegistrationBean servletRegistrationBean() {
        StatViewServlet statViewServlet = new StatViewServlet();
        return new ServletRegistrationBean<StatViewServlet>(statViewServlet,"/druid/*");
    }
}

  • 监控后要具体请求都要监控的话,那还得配置一下
    在这里插入图片描述
    在这里插入图片描述

(4)其他配置

都可以去配置
在这里插入图片描述

3、导入starter操作Druid数据源

(1)使用过时注解

在这里插入图片描述
这样导入之后我们之前写的就没用了。

(2)导入依赖

在这里插入图片描述
在这里插入图片描述

(3)看一下Druid自动配置的原理

  • 在这个位置
    在这里插入图片描述
    在这里插入图片描述

  • 在底层加载spring默认提供的之前就加载
    在这里插入图片描述
    AutoConfigureBefore在我们的spring官方配置的之前,就会先加载我们阿里巴巴的,然后会替代spring自动配置的。

  • 导入这些内容:这里就通过AOP配置监控页面。
    在这里插入图片描述
    在这里插入图片描述
    监控springbean的配置项:spring.datasource.druid.aop-patterns
    在这里插入图片描述
    监控页的配置项:spring.datasource.druid.stat-view-servlet.enabled
    在这里插入图片描述
    web监控配置:spring.datasource.druid.web-stat-filter.enabled
    在这里插入图片描述
    底层又这么一些组件,所有的自己的filter的配置。

  • 分析总结:经过上面的分析发现,我们不用再配置什么,然后直接在配置文件写相印的配置,然后在加载的时候就可以了。

(4)进行配置

在这里插入图片描述
之后如果详细配置就可以参考https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98与我们的DruidDataSourceAutoConfigure类进行配置即可。

(二)整合Mybatis整理

1、配置方式使用mybatis

(1)导入依赖

<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>

在这里插入图片描述

(2)看看原理

老模式配置模式,使用mybatis是全局配置文件

  • sqlSessionFactory

  • sqlSession进行操作

  • Mapper

  • 看看原理
    在这里插入图片描述
    在这里插入图片描述

    • 所有的配置项都在这里:EnableConfigurationProperties,在这MybatisProperties。
      在这里插入图片描述
    • 配置好了:sqlsessionfactory
      在这里插入图片描述
    • 配置sqlsessionTemplate(相当于sqlsession)
      在这里插入图片描述
    • 导入了这个(以前有这个,我们会设置包的导入)
      在这里插入图片描述
    • mapper:只要我们使用了@Mapper注解,就会被自动扫描进来。

(3)进行配置

https://mybatis.net.cn/getting-started.html

  • 在导入依赖的前提下配置一个全局文件
    在这里插入图片描述
    在这里插入图片描述
    我们不用配置具体内容,因为SpringBoot已经给我们配置了。
    在这里插入图片描述
    在这里插入图片描述

  • 经过上面的配置后文件映射(具体过程就两个

    • 准备好mapper接口方法
      在这里插入图片描述
      这个接口里面的方法,就会被在service层进行调用。
    • 然后准备好SQL语句
      在这里插入图片描述
      在这里插入图片描述
      补充映射文件
      在这里插入图片描述
  • 其实就是执行全局配置文件地址和映射文件地址:

mybatis.config-location=classpath:mybatis/mybatis-conf.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
  • 可以设置的项
    在这里插入图片描述
    在这里插入图片描述

(4)使用总结

  • 导入mybatis依赖
  • 编写mapper接口
  • 编写SQL映射文件
  • 在application.yaml执行mapper配置文件地址。

2、注解方式实现mybatis

(1)使用注解

  • 首先创建你的表和对应的实体类。

  • 然后就是些mapper接口方法。
    在这里插入图片描述
    这里我们就不再使用映射文件了,而是使用纯出街的方式实现的。(同样的也是还是insert啊,update 等字段的)

  • 然后后续的就是默认的service层调用我们的mapper层。

另外我们也可以两个混着使用,当你某一个方法的SQL语句非常大的时候,那就可以使用混着使用,单独写一个映射文件。

(2)mapper注解的使用

  • 我们可以在每一个写的SQL查询接口上上@Mapper注解
  • 我们也只用@MapperScan(“指定你mapper文件地址”)在启动类上加

(三)整合Mybatis-plus

https://baomidou.com/pages/24112f/#%E7%89%B9%E6%80%A7

1、使用插件

在这里插入图片描述
这个可以实现XML的跳转,旁边会给你有小鸟。还有生成代码。语法提示等。
在这里插入图片描述

2、例子演示

(1)创建表

  • 创建表
    在这里插入图片描述
    在这里插入图片描述

(2)创建model

在这里插入图片描述

<dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3</version>
        </dependency>
    </dependencies>
  • 配置yaml
server:
  port: 8005
  
spring:
  datasource:
    url: jdbc://localhost:3306/blog
    username: root
    password: 111
    driver-class-name: com.mysql.cj.jdbc.Driver

(3)业务逻辑

  • 再次配置启动类
    在这里插入图片描述
  • 编写Mapper接口和实体类
    在这里插入图片描述
    在这里插入图片描述
  • 编写select方法
    在这里插入图片描述
    它给配置好了,我的测试报错,但是按着步骤来是没什么问题的,我一会恰饭回来再看看。

3、分析一下自动配置

同样的也是来到这里。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 而且它直接给你配置好了mapperlocations的路径,默认就是classpath:/mapper/**/*.xml文件,之后就建议放在这个路径。
  • 其他都给你配置好了,你顾着写你的业务逻辑即可。

二、非关系型数据库

1、操作非关系型数据库Redis

(1)导依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

在这里插入图片描述

(2)看看自动配置了哪些

在这里插入图片描述

  • 这个就是处理客户端的
    在这里插入图片描述

  • 属性配置
    在这里插入图片描述
    在这里插入图片描述

  • 导入了这么两个
    在这里插入图片描述
    在这里插入图片描述
    准备好了链接工厂。

  • 操作redis的template
    在这里插入图片描述
    上面个是操作的Object的,下面个操作String的。我们只要操作这个两个即可。

2、整合redis

在这里插入图片描述
如果没有设置密码就不用设置。localhost可以填你自己的服务器地址。

  • 启动测试
    在这里插入图片描述
    它的底层是采用的Lettuce。当然你也可以切换为Jedis操作Redis。导入Jedis的依赖
    在这里插入图片描述
  • 这里回顾我们的Filter与Interceptor
    Filter是Servlet定义的原则组件,好处,脱离了spring应用也可以正常使用。
    Interceptor是spring的接口,可以使用spring的自动装配功能。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux上使用Java上传文件到Windows,可以通过使用Java的Socket编程来实现。以下是一种可能的实现方式: 首先,需要在Windows计算机上运行一个接收文件的服务器程序,可以使用Java的ServerSocket类来实现。服务器程序需要监听一个指定的端口,等待Linux计算机发送文件。 接下来,在Linux计算机上编写Java的客户端程序,使用Socket类来与Windows服务器进行通信。客户端程序需要连接到Windows服务器的IP地址和端口号。 在客户端程序中,需要选择要上传的文件,并将文件读取为字节流。可以使用Java的File和FileInputStream类来实现。然后,将字节流通过Socket的输出流发送到服务器。 在服务器程序中,需要使用Java的Socket类接受客户端发送的字节流,并将其写入文件。可以使用Java的File和FileOutputStream类来实现。 同时,在客户端和服务器程序中,需要通过Socket的输入输出流进行数据的读取和写入操作,保证文件能够正确发送和接收。 最后,当文件上传完成后,服务器可以添加相应的逻辑来处理接收到的文件,比如保存到指定目录,生成相应的文件名等。 需要注意的是,上传文件的过程中需要确保Linux计算机和Windows服务器之间的网络连接正常,并且用户具有足够的权限来进行文件的读写操作。另外,还需要考虑文件上传的安全性和异常处理等问题。以上是一个简单的基于Socket的文件上传方式,具体的实现可以根据具体需求进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值