SpringBoot数据访问
1.Java_第一季_JAVASE_自增、单例模式、类与实例初始化过程、方法参数传递机制、递归和迭代、成员变量与局部变量2.Java_第一季_SSM_Spring Bean的作用域、Spring事务的传播行为、Spring MVC的执行流程、3.Java_第一季_java高级_Redis持久化、MySql何时建立索引4.java_JUC、volatile5.java_CAS6.java_阻塞队列(FIFO先进先出)7.JUC下countDownLatch、CyclicBarrier、Semaphore以及枚举的常见使用方法8.java_锁9.java_集合不安全10.Spring循环依赖11.AbstractQueuedSynchronizer---AQS12.LockSuport13.java_线程池7大参数_底层运行原理14.java_线程池三个常用方式15.Java_Callable<V>的基本使用16.java_锁_synchronized与Lock的区别17.java_强、软、弱、虚四大引用18.java_OOM19.JAVA-interview20.java_NIO21.java_JVM之GC22.java_JVM23.单例模式设计24.netty服务端、客户端简单搭建25.java使用webSocket与前端通讯26.java串口通讯27.用Java读取文件文字并语音播报28.Proguard-混淆29.Spring Security30.MQ31.spring相关面试题32.执行jar包33.Spring
34.SpringBoot数据访问
35.Java Stream(流)基本使用36.java集合工具类 Collections基本使用37.LocalDateTime、LocalDate、Date、String相互转化38.java8新特性39.java设计模式40.java springboot使用定时器41.MQ根据正常队列、死信队列来实现延迟队列的场景SQL
一、数据源的自动配置 HikariDataSource
1、导入jdbc使用场景
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> </dependency>
为什么导入jdbc场景,官方不导入驱动呢?官方不知道我们要操作什么数据库。
数据库的版本和驱动的版本要对应;
2、导入mysql驱动
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.22</version> </dependency>
若想要修改默认版本
1、直接依赖引入具体的版本(maven的就近原则)
2、重新声明版本
<properties>
<java.version>1.8</java.version>
<mysql.version>5.1.47</mysql.version>
</properties>
若未声明版本、则使用当前项目默认版本
2、分析自动配置
DataSourceAutoConfiguration.class:数据源自动配置
修改数据源相关的配置:spring.datasource
数据库连接池中的自动配置,是自己容器中没有DataSource才自动配置的;
@Configuration(proxyBeanMethods = false) @ConditionalOnClass({DataSource.class,EmbeddedDatabaseType.class}) @ConditionalOnMissingBean(type = {"io.r2dbc.spi.ConnectionFactory"}) @EnableConfigurationProperties({DataSourceProperties.class}) @Import({DataSourcePoolMetadataProvidersConfiguration.class, DataSourceInitializationConfiguration.class}) public class DataSourceAutoConfiguration {
DataSourceTransactionManagerAutoConfiguration.class:事务管理器的自动配置
JdbcTemplateAutoConfiguration.class:jdbcTemolate自动配置,可以对数据库进行curd
这可以修改这个配置项:@ConfigurationProperties(prefix = "spring.jdbc")来修改jdbcTemplate
@Bean @Primary JdbcTemplate jdbcTemplate:容器中有这个组件
@Bean @Primary JdbcTemplate jdbcTemplate(DataSource dataSource, JdbcProperties properties) { JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); Template template = properties.getTemplate(); jdbcTemplate.setFetchSize(template.getFetchSize()); jdbcTemplate.setMaxRows(template.getMaxRows()); if (template.getQueryTimeout() != null) { jdbcTemplate.setQueryTimeout((int)template.getQueryTimeout().getSeconds()); } return jdbcTemplate; }
还有很多自动配置文件、此处不过多描述。。。
3、修改数据源配置项
spring: datasource: url: jdbc:mysql://localhost:3306/spring_boot_data?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8 username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver
//springboot 2.0中需要在url后添加 ?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8来避免报时区错误
测试代码
@Autowired private JdbcTemplate jdbcTemplate; @Test void testJdbcTemplate() { Integer count = jdbcTemplate.queryForObject("select count(*) from user", Integer.class); System.out.println("记录总数:"+count); }
自定义数据源
@Configuration public class MyDataSourceConfig { /** * 配置自定义数据源 * @ConfigurationProperties("spring.datasource"):与配置文件中配置的属性一一对应 */ @Bean @ConfigurationProperties("spring.datasource") public DataSource dataSource() { DruidDataSource druidDataSource = new DruidDataSource(); return druidDataSource; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?