• SpringBoot 数据访问


    SpringBoot 数据访问

    1. 引入数据源

    SpringBoot要连接数据库进行数据访问需要做以下步骤:(以连接MySQL为例)

    • 引入相关依赖
      • 引入MySQL依赖(注意MySQL版本)
      • 引入JDBC依赖
    • 配置连接的 url、username、password、驱动

    1.1 引入JDBC场景

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-data-jdbcartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    引入依赖后刷新,可以看到:

    在这里插入图片描述

    SpringBoot同时引入了:

    • jdbc
    • HikariDataSource(SpringBoot的默认数据源)
    • spring-tx 事务相关依赖

    但是没有引入相关驱动,这是因为SpringBoot无法确定我们需要连接那种数据库。

    1.2 引入MySQL场景

    <dependency>
    	<groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
        <version>8.0.29version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.3 修改MySQL版本的两种方式

    方式一:

    直接依赖引入具体版本(maven的就近依赖原则)

    <dependency>
    	<groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
        <version>8.0.29version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    方式二:

    重新声明版本(maven的属性的就近优先原则)

    <properties>
        <java.version>1.8java.version>
        <mysql.version>5.1.49mysql.version>
    properties>
    
    • 1
    • 2
    • 3
    • 4

    1.4 修改配置项

    数据源相关的配置前缀是 spring.datasource

    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/springboot_db
        username: root
        password: 123456
        driver-class-name: com.mysql.cj.jdbc.Driver
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    1.5 测试启动

    如果相关依赖都已经导入,并且配置项正确,可以看到SpringBoot正常启动,并且默认的数据源是 HikariDataSource

    在这里插入图片描述

    2. 整合Druid数据源

    官方Github地址

    2.1 自定义方式整合

    在xml中可以进行配置注入,同时也可以使用注解的方式。

    @Configuration
    public class MyDataSourceConfig  {
    
        @ConfigurationProperties("spring.datasource")
        @Bean
        public DataSource druidDataSource() {
    
            DruidDataSource druid = new DruidDataSource();
    
            return druid;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    同时可以修改配置文件修改Druid的配置。

    但是这种方式较为麻烦,不建议使用。

    2.2 通过Stater的方式整合

    <dependency>
        <groupId>com.alibabagroupId>
        <artifactId>druid-spring-boot-starterartifactId>
        <version>1.1.17version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    配置示例:

    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/springboot_db
        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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    3. 整合MyBatis

    MyBatisGitHub仓库

    MyBatis官方文档

    引入依赖:

    <dependency>
        <groupId>org.mybatis.spring.bootgroupId>
        <artifactId>mybatis-spring-boot-starterartifactId>
        <version>2.1.3version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    MybatisProperties

    3.1 MyBatis配置

    SpringBoot整合MyBatis与其它跨屏就爱一样是自动配置。

    • 可以查看MybatisAutoConfiguration
    @org.springframework.context.annotation.Configuration
    @ConditionalOnClass({ SqlSessionFactory.class, SqlSessionFactoryBean.class })
    @ConditionalOnSingleCandidate(DataSource.class)
    @EnableConfigurationProperties(MybatisProperties.class)
    @AutoConfigureAfter({ DataSourceAutoConfiguration.class, MybatisLanguageDriverAutoConfiguration.class })
    public class MybatisAutoConfiguration implements InitializingBean {
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • MybatisProperties中可以看到配置前缀都是以mybatis开头的:
    @ConfigurationProperties(prefix = MybatisProperties.MYBATIS_PREFIX)
    public class MybatisProperties {
    
      public static final String MYBATIS_PREFIX = "mybatis";
    
    • 1
    • 2
    • 3
    • 4
    • 修改配置项
    mybatis:
    #  config-location: classpath:mybatis/config/mybatis-config.xml
      mapper-locations: classpath:mybatis/mapper/*.xml
      configuration:
        map-underscore-to-camel-case: true
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注意:config-location不可以与configuration 一起使用,configuration是用于指定MyBatis配置文件的位置,如果一起使用就会出现冲突导致SpringBoot程序无法启动。

    3.2 整合注解进行配置

    • 使用@MapperScan注解可以指定mapper接口所在的位置
      • 但是注意要标记在配置类上
    @SpringBootApplication
    @MapperScan("com.jc.admin.mapper")
    public class AdminApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(AdminApplication.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • MyBatis提供了一些注解来简化开发,可以在通过注解编写一些简单的SQL语句。例如:
    @Mapper
    public interface UserMapper {
        
        @Insert("insert into t_user (username, password) values(#{username}, #{password})")
        @Options(useGeneratedKeys = true, keyProperty = "id")
        void save(User user);
        
        @Select("select * from t_user where id = #{id}")
        User getUserById(Long id);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    但是要注意,不可以一个方法既标记了上面所示的注解,又在mapper.xml文件中编写了查询配置。

    4. 整合MyBatisPlus

    官方文档

    引入Stater

    <dependency>
        <groupId>com.baomidougroupId>
        <artifactId>mybatis-plus-boot-starterartifactId>
        <version>最新版本version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    配置:

    配置mapper扫描

    @SpringBootApplication
    @MapperScan("com.baomidou.mybatisplus.samples.quickstart.mapper")
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    参考配置类:

    所有配置都是以mybatis-plus开头

    @Data
    @Accessors(chain = true)
    @ConfigurationProperties(prefix = Constants.MYBATIS_PLUS) // mybatis-plus
    public class MybatisPlusProperties {
    
    • 1
    • 2
    • 3
    • 4

    5. 整合Redis

    引入依赖:

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-data-redisartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    SpringBoot默认使用的是lettuce

    <dependency>
      <groupId>io.lettucegroupId>
      <artifactId>lettuce-coreartifactId>
      <version>${lettuce.version}version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    可以切换为Jedis,只需引入依赖:

    <dependency>
        <groupId>redis.clientsgroupId>
        <artifactId>jedisartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    配置示例:

    spring:
      redis:
        url: redis://password@examlp.com:6379
    
    • 1
    • 2
    • 3
  • 相关阅读:
    LeetCode刷题(13)
    Spring02
    java计算机毕业设计快递配送平台源码+系统+mysql数据库+lw文档+部署
    完美洗牌问题
    【错误记录】Android Studio 中 Kotlin 版本报错 ( Module was compiled with an incompatible version of Kotlin. T )
    刷爆力扣之公平的糖果交换
    源码编译安装PHP及搭建论坛
    几种软件系统集成方式详细介绍
    java静态内部类介绍
    跟着实例学Go语言(四)
  • 原文地址:https://blog.csdn.net/qq_51628741/article/details/125873809