SpringBoot2核心功能(二)数据访问

本文详细介绍了如何在Spring Boot中配置数据源,包括使用HikariDataSource的自动配置,以及切换到Druid数据源的步骤,包括配置Druid数据源、开启监控功能。此外,还讲解了MyBatis的配置模式和注解模式,以及如何整合MyBatis-Plus进行CRUD操作。最后,简要提及了Redis的基本配置和连接。

目录

一、sql

1.1 数据源的自动配置——HikariDataSource

1.1.1 导入jdbc

1.1.2 分析自动配置

1.1.3 修改配置项

1.1.4 测试

1.2 使用Druid数据源

1.2.1 原因

1.2.2 创建数据源

1.2.3 编写数据源配置类

1.2.4 开启数据源监控功能——StatViewServlet

1.2.5 官方starter,简化上述操作

1.3 整合MyBatis操作

1.3.1 使用配置模式引入mybatis

1.3.2 使用注解模式引入mybatis

1.3.3 引入mybatis的最佳实战

1.4 整合 MyBatis-Plus 完成CRUD

1.4.1 介绍

1.4.2 整合MyBatis-Plus

二、NoSQL

2.1 redis

2.1.1 基本配置

2.1.2 连接redis


​​​​​​​

 

课程链接:​​​​​​​https://www.bilibili.com/video/BV19K4y1L7MT?p=60&spm_id_from=pageDriver

一、sql

 

1.1 数据源的自动配置——HikariDataSource

 

1.1.1 导入jdbc

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

starter-data-jdbc帮我们导入了以下依赖

但是官方没有导入数据驱动,因为官方并不知道我们要使用的数据源是什么。

我们以mysql为例,作为数据源驱动导入,如果不指定版本号,官方默认指定的版本为8.0.22

默认版本:<mysql.version>8.0.22</mysql.version>

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

 

 

 

1.1.2 分析自动配置

DataSourceAutoConfiguration ——数据源的自动配置。帮我们配置好数据源连接池等

  • 1. 如果希望修改数据源相关的配置,修改spring.datasource即可,原因如下图
  • 2. 数据库连接池,如果用户自己容器中没有DataSource,官方会为其进行配置。实现代码:
  •     @Configuration(proxyBeanMethods = false)
        @Conditional(PooledDataSourceCondition.class)
        @ConditionalOnMissingBean({ DataSource.class, XADataSource.class }) //当没有这些组件时
        @Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class,
                DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.OracleUcp.class,
                DataSourceConfiguration.Generic.class, DataSourceJmxConfiguration.class })
        protected static class PooledDataSourceConfiguration
  • 3. 底层配置好的连接池是:HikariDataSource

 

DataSourceAutoConfiguration源码截图:

 

 

DataSourceTransactionManagerAutoConfiguration: 事务管理器的自动配置,帮助我们配置好事务信息

 

 

JdbcTemplateAutoConfigurationJdbcTemplate的自动配置,可以来对数据库进行crud

  • 1.  可以修改这个配置项@ConfigurationProperties(prefix = "spring.jdbc") 来修改JdbcTemplate
  • 2. @Bean@Primary JdbcTemplate;容器中有这个组件

 

 

XADataSourceAutoConfiguration: 分布式事务相关配置

 

 

1.1.3 修改配置项

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db_account
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
  jdbc:
    template:
      query-timeout: 3

 

1.1.4 测试

@Slf4j
@SpringBootTest
class Boot05WebAdminApplicationTests {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Test
    void contextLoads() {

        Long aLong = jdbcTemplate
                .queryForObject("select count(*) from account_tbl", Long.class);
        log.info("记录总数:{}",aLong);
    }

}

 

 

 

1.2 使用Druid数据源

 

1.2.1 原因

Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。

Druid提供了WallFilter,它是基于SQL语义分析来实现防御SQL注入攻击的。

Druid提供了Log4jFilter、CommonsLogFilter和Slf4jFilter进行日志记录

Druid提供了多种监测连接泄漏的手段

连接Oracle数据库,打开PSCache,在其他的数据库连接池都会存在内存占用过多的问题,Druid是唯一解决这个问题的连接池。

 

 

1.2.2 创建数据源

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

 

 

1.2.3 编写数据源配置类

@ConfigurationProperties("spring.datasource) ——与yaml中datasource中配置的数据源信息进行绑定,这样数据源的配置信息可以实现不在代码中写死

@Configuration
public class MyDataSourceConfig {

    //默认的自动配置是判断容器中没有才会配c@ConditionalonMissin
    //与yaml中datasource中配置的数据源信息进行绑定,
    //这样数据源的配置信息可以实现不在代码中写死
    @ConfigurationProperties("spring.datasource") 
    @Bean
    public DataSource dataSource( ){
        DruidDataSource druidDataSource = new DruidDataSource();
        return druidDataSource;
    }
}
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db_account
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

 

 

1.2.4 开启数据源监控功能——StatViewServlet

StatViewServlet的用途包括:

  • 提供监控信息展示的html页面
  • 提供监控信息的JSON API

 

使用示例

@Configuration
public class MyDataSourceConfig {

    //默认的自动配置是判断容器中没有才会配c@ConditionalonMissin
    //与yaml中datasource中配置的数据源信息进行绑定,
    //这样数据源的配置信息可以实现不在代码中写死
    @ConfigurationProperties("spring.datasource") 
    @Bean
    public DataSource dataSource() throws SQLException{
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setFilters("stat"); //开启数据库性能监控
        return druidDataSource;
    }

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

 

系统中所有filter:

别名Filter类名
defaultcom.alibaba.druid.filter.stat.StatFilter
statcom.alibaba.druid.filter.stat.StatFilter
mergeStatcom.alibaba.druid.filter.stat.MergeStatFilter
encodingcom.alibaba.druid.filter.encoding.EncodingConvertFilter
log4jcom.alibaba.druid.filter.logging.Log4jFilter
log4j2com.alibaba.druid.filter.logging.Log4j2Filter
slf4jcom.alibaba.druid.filter.logging.Slf4jLogFilter
commonloggingcom.alibaba.druid.filter.logging.CommonsLog

 

 

 

1.2.5 官方starter,简化上述操作

引入druid-starter

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid-spring-boot-starter</artifactId>
     <version>1.1.17</version>
</dependency>

 

 

配置示例

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db_account
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

    druid:
      aop-patterns: com.atguigu.admin.*  #监控SpringBean
      filters: stat,wall     # 底层开启功能,stat(sql监控),wall(防火墙)

      stat-view-servlet:   # 配置监控页功能
        enabled: true
        login-username: admin
        login-password: admin
        resetEnable: false

      web-stat-filter:  # 监控web
        enabled: true
        urlPattern: /*
        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'


      filter:
        stat:    # 对上面filters里面的stat的详细配置
          slow-sql-millis: 1000
          logSlowSql: true
          enabled: true
        wall:
          enabled: true
          config:
            drop-table-allow: false

 

 

SpringBoot配置示例

https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

 

配置项列表https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8

 

 

 

1.3 整合MyBatis操作

 

1.3.1 使用配置模式引入mybatis

引入步骤:

  • 导入mybatis官方starter
  • 编写mapper接口。标准@Mapper注解
  • 编写sql映射文件并绑定mapper接口
  • 在application.yaml中指定Mapper配置文件的位置,以及指定全局配置文件的信息 (建议;配置在mybatis.configuration

 

 

第一步:引入依赖

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

该starter引入的依赖如下:

 

mybatis的jar包一加载,就会引入MybatisAutoConfiguration等相关配置

​​​​​​​

分析下MybatisAutoConfiguration:

 

 

第二步:指定配置文件以及全局映射文件

mybatis使用时,需要进行相关的配置(可以不写全局;配置文件,所有全局配置文件的配置都放在configuration配置项中即可)。如下:

# 配置mybatis规则
mybatis:
#  config-location: classpath:mybatis/mybatis-config.xml   #全局配置文件位置
  mapper-locations: classpath:mybatis/mapper/*.xml         #sql映射文件位置
  configuration:
    map-underscore-to-camel-case: true
   

下面是一个全局配置文件的例子。如果不写全局配置文件,相关的配置信息需要在yaml配置文件的mybatis.configuration标签下进行配置即可。

< ?xml version="1.0" encoding="UTF-8" ?>
< !DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http: //mybatis.org/dtd/ mybatis-3-config.dtd">
<configuration>
    <settings>
        <!-- 开启驼峰命名,用于数据库字段与实体字段间产生映射关系  -->
        <setting name= "mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

相应的数据库xml文件内容示例:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.admin.mapper.AccountMapper">
    <select id="getAcct" resultType="com.atguigu.admin.bean.Account">
        select * from  account_tbl where  id=#{id}
    </select>
</mapper>

 

 

1.3.2 使用注解模式引入mybatis

@Mapper
public interface CityMapper {

    @Select("select * from city where id=#{id}")
    public City getById(Long id);

}

 

 

 

1.3.3 引入mybatis的最佳实战

  • 引入mybatis-starter
  • 配置application.yaml中,指定mapper-location位置即可
  • 编写Mapper接口并标注@Mapper注解
  • 简单方法直接注解方式
  • 复杂方法编写mapper.xml进行绑定映射
  • @MapperScan("com.atguigu.admin.mapper") 简化,其他的接口就可以不用标注@Mapper注解

 

 

 

 

1.4 整合 MyBatis-Plus 完成CRUD

 

1.4.1 介绍

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

mybatis plus 官网

建议安装 MybatisX 插件

 

 

1.4.2 整合MyBatis-Plus

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.1</version>
</dependency>

该依赖帮外卖引入了mybatis包以及jdbc包

 

该依赖为我们引入了如下配置(详见截图):

  • MybatisPlusAutoConfiguration 配置类,MybatisPlusProperties 配置项绑定。mybatis-plus:xxx 就是对mybatis-plus的定制
  • SqlSessionFactory 已自动配置好。底层是容器中默认的数据源
  • mapperLocations 自动配置好。默认值为 classpath*:/mapper/**/*.xml;任意包的类路径下的所有mapper文件夹下任意路径下的所有xml都是sql映射文件。  建议以后sql映射文件,放在 mapper下
  • 容器中也自动配置好了 SqlSessionTemplate
  • @Mapper 标注的接口也会被自动扫描;建议直接 @MapperScan("com.atguigu.admin.mapper") 批量扫描就行

 

 

 

 

二、NoSQL

 

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings)散列(hashes)列表(lists)集合(sets)有序集合(sorted sets) 与范围查询, bitmapshyperloglogs地理空间(geospatial) 索引半径查询。

Redis 内置了 复制(replication)LUA脚本(Lua scripting)LRU驱动事件(LRU eviction)事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

 

 

2.1 redis

 

2.1.1 基本配置

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

该依赖为我们引入了以下依赖:

通过源码可以看一下官方为我们引入的redis相关配置:

  • RedisAutoConfiguration 自动配置类。RedisProperties 属性类 --> spring.redis.xxx是对redis的配置
  • 连接工厂是准备好的。LettuceConnectionConfiguration、JedisConnectionConfiguration
  • 自动注入了RedisTemplate<Object, Object> : xxxTemplate;
  • 自动注入了StringRedisTemplate;k:v都是String
  • key:value
  • 底层只要我们使用 StringRedisTemplate、RedisTemplate就可以操作redis

 

 

 

2.1.2 连接redis

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

<!--        导入jedis-->
<dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
</dependency>
spring:
  redis:
      host: 
      port: 6379
      password:  
      client-type: jedis
      jedis:
        pool:
          max-active: 10

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值