【SpringBoot】数据访问

1. 数据源的自动配置

1、导入 JDBC 场景

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

在这里插入图片描述

2、分析自动配置类

  • DataSourceAutoConfiguration:数据源的自动配置
    • 修改数据源相关的配置:spring.datasource
    • 数据库连接池的配置,是自己容器中没有 DataSource 才自动配置的
    • 底层配置好的连接池是:HikariDataSource
  • DataSourceTransactionManagerAutoConfiguration:事务管理器的自动配置
  • JdbcTemplateAutoConfigurationJdbcTemplate 的自动配置,可以对数据库进行 CRUD
    • 可以修改配置项 spring.jdbc 来修改 JdbcTemplate
  • JndiDataSourceAutoConfiguration:jndi 的自动配置
  • XADataSourceAutoConfiguration:分布式事务相关的

3、修改配置项

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/jdbc
    username: root
    password: root
    type: com.zaxxer.hikari.HikariDataSource     # 默认就是这个数据源
    driver-class-name: com.mysql.cj.jdbc.Driver  # 驱动
  jdbc:
    template:
      query-timeout: 3                           # 单位:秒

4、测试

@SpringBootTest
class SpringbootWebAdminApplicationTests {
    @Autowired
    JdbcTemplate jdbcTemplate;

    @Test
    void contextLoads() {
        Long aLong = jdbcTemplate.queryForObject("select count(*) from users", Long.class);
        System.out.println(aLong);
    }
}

2. 使用 Druid 数据源

1、druid 官方 github 地址

整合第三方技术的两种方式

  • 自定义
  • 找 starter

2、自定义方式

  • 引入依赖

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.17</version>
    </dependency>
    
  • 编写配置类

    @Configuration
    public class DruidConfig {
    
        @Bean
        @ConfigurationProperties("spring.datasource") // 和配置文件中的属性绑定,避免重复写 setXXX()
        public DataSource dataSource(){
            DruidDataSource druidDataSource = new DruidDataSource();
    
            return druidDataSource;
        }
    }
    
  • 测试

    @SpringBootTest
    @Slf4j
    class SpringbootWebAdminApplicationTests {
    
        @Autowired
        DataSource dataSource;
    
        @Test
        void contextLoads() {
            log.info("数据源类型:{}",dataSource.getClass());
        }
    
    }
    
  • 结果

    数据源类型:class com.alibaba.druid.pool.DruidDataSource
    

官方文档还介绍了其它功能如何配置

3、使用官方 starter 方式

  • 引入依赖

    <dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>druid-spring-boot-starter</artifactId>
       <version>1.1.17</version>
    </dependency>
    
  • 分析自动配置

    扩展配置项:spring.datasource.druid

    • DruidSpringAopConfiguration:监控 Spring Bean

      配置项:spring.datasource.druid.aop-patterns

    • DruidStatViewServletConfiguration:监控页的配置

      配置项:spring.datasource.druid.stat-view-servlet,默认开启

    • DruidWebStatFilterConfiguration:web 监控配置

      配置项:spring.datasource.druid.web-stat-filter,默认开启

    • DruidFilterConfiguration:所有 Druid 自己 filter 的配置

      private static final String FILTER_STAT_PREFIX = "spring.datasource.druid.filter.stat";
      private static final String FILTER_CONFIG_PREFIX = "spring.datasource.druid.filter.config";
      private static final String FILTER_ENCODING_PREFIX = "spring.datasource.druid.filter.encoding";
      private static final String FILTER_SLF4J_PREFIX = "spring.datasource.druid.filter.slf4j";
      private static final String FILTER_LOG4J_PREFIX = "spring.datasource.druid.filter.log4j";
      private static final String FILTER_LOG4J2_PREFIX = "spring.datasource.druid.filter.log4j2";
      private static final String FILTER_COMMONS_LOG_PREFIX = "spring.datasource.druid.filter.commons-log";
      private static final String FILTER_WALL_PREFIX = "spring.datasource.druid.filter.wall";
      
  • 配置示例

    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/jdbc
        username: root
        password: root
        type: com.zaxxer.hikari.HikariDataSource     # 默认就是这个数据源
        driver-class-name: com.mysql.cj.jdbc.Driver  # 驱动
    
        druid:
          aop-patterns: com.ice.admin.*              # 监控 Spring Bean
          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

3. 整合 MyBatis

引入依赖:

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

在这里插入图片描述

  • 全局配置文件

  • SqlSessionFactory: 自动配置好了

  • SqlSession:自动配置了 SqlSessionTemplate 组合了 SqlSession

  • @Import(AutoConfiguredMapperScannerRegistrar.class)

  • Mapper: 只要我们写的操作 MyBatis 的接口标注了 @Mapper 就会被自动扫描进

@EnableConfigurationProperties(MybatisProperties.class) // MyBatis 配置项绑定类
@AutoConfigureAfter({ DataSourceAutoConfiguration.class, MybatisLanguageDriverAutoConfiguration.class })
public class MybatisAutoConfiguration{}
@ConfigurationProperties(prefix = "mybatis")
public class MybatisProperties{}

可以修改配置文件中 mybatis 开始的所有

【MyBatis 配置】

# 配置mybatis规则
mybatis:
  config-location: classpath:mybatis/mybatis-config.xml  # 全局配置文件位置
  mapper-locations: classpath:mybatis/mapper/*.xml       # sql映射文件位置

【Mapper.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.ice.admin.bean.User">
        select * from  users where  id=#{id}
    </select>
</mapper>

我们也可以不写全局配置文件,直接在用 SpringBoot 配置文件中配置

@ConfigurationProperties(prefix = MybatisProperties.MYBATIS_PREFIX)
public class MybatisProperties {
    public static final String MYBATIS_PREFIX = "mybatis";
    // ...
    @NestedConfigurationProperty
    private Configuration configuration;
    // ....
}

可以看到,MyBatis 的配置都在 mybatis.configuration.xxx,可以直接去 org.apache.ibatis.session.Configuration.java 中寻找属性名,在配置文件里设置覆盖.

# 配置mybatis规则
mybatis:
  # 此时就不需要编写全局配置文件,也就不用配置 config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml
  configuration:
    map-underscore-to-camel-case: true

简单的可以注解实现,复杂 SQL 用 mapper.xml

如果嫌每个接口标注 @Mapper 注解麻烦,可以在主启动类上标注 @MapperScan("com.ice.admin.mapper")

4. 整合 MyBatis-Plus

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

mybatis plus 官网

建议安装 MybatisX 插件

引入依赖:

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

自动配置:

  • MybatisPlusAutoConfiguration 配置类,MybatisPlusProperties 配置项绑定.

    mybatis-plus:xxx 就是对 mybatis-plus 的定制

  • SqlSessionFactory 自动配置好,底层是容器中默认的数据源

  • mapperLocations 自动配置好的,有默认值 classpath*:/mapper/**/*.xml,任意包的类路径下的所有 mapper 文件夹下任意路径下的所有 xml 都是 sql 映射文件

    建议以后 sql 映射文件,放在 mapper

  • 容器中也自动配置好了 SqlSessionTemplate

  • @Mapper 标注的接口也会被自动扫描,建议直接 @MapperScan("com.atguigu.admin.mapper") 批量扫描就行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值