SpringBoot内置数据源的持久化与解决方案

 更新时间:2022年07月18日 09:23:43   作者:不会压弯的小飞侠  
数据源的配置 我们先基于SpringBoot默认的HikariDataSource数据源,导入JDBC场景,看看SpringBoot帮我们自动配置了什么,下面我们来了解SpringBoot内置数据源持久化

数据层解决方案

  • SQL
  • NoSQL

与SQL有关的解决方案

现有数据层解决方案技术选型

  • Druid + MyBatis-Plus + MySQL
  • 数据源:DruidDataSource
  • 持久化技术:MyBatis-Plus / MyBatis
  • 数据库:MySQL

SpringBoot提供了3种内嵌的数据源对象供开发者选择

  • HikariCP
  • Tomcat提供DataSource
  • Commons DBCP

🔥平常做项目时我所需要的maven坐标

数据源

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

持久化技术

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

数据库

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

🔥 springboot中的数据源

若不提供数据源(例如删除上面的Druid的坐标,就默认使用这三种中的一种(HikariCP默认)

  • HikariCP:默认内置数据源对象
  • Tomcat提供DataSource: HikariCP不可用的情况下,且在web环境中,将使用tomcat服务器配置的数据源对象
  • Commons DBCP: Hikari不可用,tomcat数据源也不可用,将使用dbcp数据源

🔥 删掉durid的maven坐标,将数据源换成HikariCP

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC
    hikari:
      driver-class-name=com: com.mysql.cj.jdbc.Driver
      username: root
      password: root

内置持久化解决方案

🔥 导入坐标

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

🔥编写测试类:

package com.jkj;
import com.jkj.dao.BookDao;
import com.jkj.domian.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
@SpringBootTest
class Springboot09SqlApplicationTests {
	/*@Autowired
	private BookDao bookDao;*/
	/*@Test
	void contextLoads() {
		*//*bookDao.selectById(2);*//*
	}*/
	@Autowired
	private JdbcTemplate jdbcTemplate;
	@Test
	void JDBCTEST() {
//        jdbcTemplate.update();//增删改
//        jdbcTemplate.query(); //查询
//        jdbcTemplate.queryForObject();//查询单个对象
/*     一般不使用这种格式
        String sql ="select * from tbl_book";
        List<Map<String,Object>> maps = jdbcTemplate.queryForList(sql);
        System.out.println(maps);*/
		RowMapper<Book> rm = new RowMapper<Book>() {
			@Override
			public Book mapRow(ResultSet resultSet, int i) throws SQLException {
//              ResultSet resultSet 其实就是结果集
				Book temp = new Book();
				temp.setId(resultSet.getInt("id"));
				temp.setName(resultSet.getString("name"));
				temp.setType(resultSet.getString("type"));
				temp.setDescription(resultSet.getString("description"));
				return temp;
			}
		};
		String sql = "select * from tbl_book  ";
		List<Book> list = jdbcTemplate.query(sql, rm);
		System.out.println(list);
	}
}

🔥JdbcTemplate的其它配置

spring:
jdbc:
template:
query-timeout: -1   #查询超时时间
max-rows: 500       #最大行数
fetch-size: -1      #缓存行数

Springboot内置数据库

🔥 SpringBoot提供了3种内嵌数据库供开发者选择,提高开发测试效率

  • H2
  • HSQL
  • Derby

🔥 导入依赖;

       <dependency>
			<groupId>com.h2database</groupId>
			<artifactId>h2</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

🔥 配置H2管理控制台参数

server:
  port: 80
spring:
  h2:
    console:
      path: /h2
      enabled: true

运行项目,在网页进行访问,连接之后,发现连接异常,因为首次使用的原因,只需要在配置文件中配置相应的数据源就ok了,重新启动成功后,这些配置可以删除,也可以留着。

server:
  port: 80
spring:
  h2:
    console:
      path: /h2
      enabled: true

  datasource:
    url: jdbc:h2:~/test
    hikari:
      driver-class-name=com: org.h2.Driver
      username: sa
      password: 123456

🔥运行项目

🔥 输入密码登录

🔥添加一个表

🔥添加数据后,查询表信息

🔥 测试

@Test
	void testJdbcTemplateSave(@Autowired JdbcTemplate jdbcTemplate){
		String sql="insert into tbl_book values(3,'斗罗大陆','科幻','左手蓝银草右手昊天锤')";
		jdbcTemplate.update(sql);
	}

⭐⭐⭐注意: H2内置数据库这仅仅用于开发阶段,线上项目请务必关闭控制台功能

到此这篇关于SpringBoot内置数据源的持久化与解决方案的文章就介绍到这了,更多相关SpringBoot内置数据源内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MyBatis的collection和association的使用解读

    MyBatis的collection和association的使用解读

    这篇文章主要介绍了MyBatis的collection和association的使用解读
    2023-12-12
  • Java注解详解之@Override注解

    Java注解详解之@Override注解

    这篇文章主要给大家介绍了关于Java注解之@Override注解的相关资料,@Override是Java中的一个注解,表示一个方法是重写(Override)了父类中的方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • spring boot openfeign从此和httpClient说再见详析

    spring boot openfeign从此和httpClient说再见详析

    这篇文章主要给大家介绍了关于spring boot openfeign从此和httpClient说再见的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2018-06-06
  • 详解MyBatis开发Dao层的两种方式(Mapper动态代理方式)

    详解MyBatis开发Dao层的两种方式(Mapper动态代理方式)

    这篇文章主要介绍了详解MyBatis开发Dao层的两种方式(Mapper动态代理方式),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Java将字符串转化为数组的两种方法

    Java将字符串转化为数组的两种方法

    Java中的String类是一种特殊的字符串,它可以被用于处理字符串,Java中的String类也可以将字符串转换为数组,下面这篇文章主要给大家介绍了关于Java将字符串转化为数组的两种方法,需要的朋友可以参考下
    2023-05-05
  • java基于包结构的请求路由实现实例分享

    java基于包结构的请求路由实现实例分享

    基于包结构的请求路由简单实现实例分享,大家参考使用吧
    2013-12-12
  • OpenFeign服务接口调用的过程详解

    OpenFeign服务接口调用的过程详解

    Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单。它的使用方法是定义一个服务接口然后在上面添加注解,这篇文章主要介绍了OpenFeign服务接口调用,需要的朋友可以参考下
    2022-10-10
  • spring和quartz整合,并简单调用(实例讲解)

    spring和quartz整合,并简单调用(实例讲解)

    下面小编就为大家带来一篇spring和quartz整合,并简单调用(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Java线程间协作wait、notify和notifyAll详解

    Java线程间协作wait、notify和notifyAll详解

    这篇文章主要介绍了Java线程间协作wait、notify和notifyAll详解,在 Java 中可以用 wait、notify 和 notifyAll 来实现线程间的通信,尽管关于wait和notify的概念很基础,它们也都是Object类的函数,但用它们来写代码却并不简单,,需要的朋友可以参考下
    2023-10-10
  • Java进阶之Object类及常用方法详解

    Java进阶之Object类及常用方法详解

    Object 类是 Java 默认提供的一个类,是所有 Java 类的祖先类,每个类都使用 Object 作为父类。本文就来和大家聊聊Object类的常用方法,希望对大家有所帮助
    2023-01-01

最新评论