02-SpringBoot工程中JDBC应用实践,2024年最新MySQL高可用之主备同步

org.springframework.boot

spring-boot-maven-plugin

添加项目依赖


  1. mysql数据库驱动依赖。

mysql

mysql-connector-java

runtime

  1. spring对象jdbc支持(此时会默认帮我们下载HiKariCP连接池)。

org.springframework.boot

spring-boot-starter-jdbc

配置HikariCP连接池


打开application.properties配置文件,添加如下内容(必写)。

spring.datasource.url=jdbc:mysql:///db-system?serverTimezone=GMT%2B8&characterEncoding=utf8

spring.datasource.username=root

spring.datasource.password=root

hikariCP 其它额外配置(可选),代码如下(具体配置不清晰的可自行百度):

spring.datasource.type=com.zaxxer.hikari.HikariDataSource

spring.datasource.hikari.minimum-idle=5

spring.datasource.hikari.maximum-pool-size=15

spring.datasource.hikari.auto-commit=true

spring.datasource.hikari.idle-timeout=30000

spring.datasource.hikari.pool-name=DatebookHikariCP

spring.datasource.hikari.max-lifetime=1800000

spring.datasource.hikari.connection-timeout=30000

spring.datasource.hikari.connection-test-query=SELECT 1

创建项目启动类


package com.cy;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

public class JdbcApplication {//Application.class

public static void main(String[] args) {//Main Thread

SpringApplication.run(JdbcApplication .class, args);

}

}

HikariCP 连接池测试


第一步:在项目中添加单元测试类及测试方法,代码如下:

package com.cy.pj.common.datasource;

import java.sql.SQLException;

import javax.sql.DataSource;

import org.junit.jupiter.api.Test;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest

public class DataSourceTests {

@Autowired

private DataSource dataSource;

@Test

public void testConnection() throws Exception{

System.out.println(dataSource.getConnection());

}

}

在当前测试类中我们需要:

  • 掌握单元测试类、测试方法编写规范。

  • 理解DataSource的设计规范及规范的实现。

  • 分析在测试类中dataSource属性指向的对象是谁?

  • 分析在测试类中DataSource的实现类对象由谁创建和管理?

  • 思考基于DataSource接口获取连接的基本过程是怎样的?

第二步:API调用过程分析,如图所示:

在这里插入图片描述

测试BUG分析


  • 类编译错误,DataSource为javax.sql包中的类型,如图所示:

在这里插入图片描述

  • 连接错误:数据库连接不上,如图所示:

在这里插入图片描述

JDBC基本操作实践

====================================================================

业务分析


基于HikariCP,借助JDBC技术访问公告表中的数据。

业务原型设计


公告列表页面,如图所示:

在这里插入图片描述

代码设计及实现


基于JDBC技术操作表中数据,并进行单元测试。

第一步:定义单元测试类,关键代码如下:

package com.cy.pj.sys.dao;

import org.junit.jupiter.api.Test;

import javax.sql.DataSource;

import java.sql.*;

/**

  • 通过此单元测试类获取数据源对象,并且通过数据对象获取数据库连接

  • @SpringBootTest 注解描述的类

  • 为springboot中的单元测试类

  • 说明:

  • 1)springboot中的单元测试类必须放在启动类所在包

  • 或子包中

  • 2)springboot中的单元测试类必须使用@SpringBootTest注解描述

*/

@SpringBootTest

public class JdbcTests {//is a Object

@Autowired

private DataSource dataSource;//HikariDataSource (类)

}

第二步:在单元测试类中添加向表中写入数据的方法,关键代码如下:

@Test

void testSaveNotice01()throws SQLException{

//1.建立连接 (负责与数据库进行通讯)

Connection conn= dataSource.getConnection();

//2.创建statement(sql传送器->负责与将sql发送到数据库端)

String sql="insert into sys_notices " +

" (title,content,type,status,createdTime,createdUser,modifiedTime,modifiedUser) " +

" values (‘维护通知’,‘2020-02-02 19:00 系统维护’,‘1’,‘0’,now(),‘tony’,now(),‘tony’) ";

//这种方式Statement的创建,适合sql中不需要动态传入值的方式。

Statement stmt=conn.createStatement();

//3.发送sql

stmt.execute(sql);

//4.处理结果

//5.释放资源(后续释放资源要写到finally代码块中)

stmt.close();

conn.close();//将连接返回池中

}

第三步:在类中定义向表中写入数据的另一种方式,关键代码如下:

@Test

void testSaveNotice02()throws SQLException{

//1.建立连接 (负责与数据库进行通讯)

Connection conn= dataSource.getConnection();

//2.创建statement(sql传送器->负责与将sql发送到数据库端)

String sql="insert into sys_notices " +

" (title,content,type,status,createdTime,createdUser,modifiedTime,modifiedUser) " +

" values (?,?,?,?,?,?,?,?) ";//?表示占位符

PreparedStatement stmt=conn.prepareStatement(sql);//预编译方式创建Statement对象

//3.发送sql

//3.1为sql中的?号赋值

stmt.setString(1,“升级通知”);

stmt.setString(2,“2021年3月18号 系统升级”);

stmt.setString(3,“1”);

stmt.setString(4,“0”);

stmt.setTimestamp(5,new Timestamp(System.currentTimeMillis()));

stmt.setString(6,“jason”);

stmt.setTimestamp(7,new Timestamp(System.currentTimeMillis()));

stmt.setString(8,“tony”);

//3.2 发送sql

stmt.execute();

//4.处理结果

//5.释放资源(后续释放资源要写到finally代码块中)

stmt.close();

conn.close();//将连接返回池中

}

}

第四步,添加查询通知的单元测试方法,关键代码如下:

@Test

void testSelectNotices01()throws SQLException{

//1.建立连接

Connection conn=dataSource.getConnection();

//2.创建Statement

String sql=“select id,title,content,status,type,createdTime from sys_notices where id>=?”;

PreparedStatement pstmt=conn.prepareStatement(sql);

//3.发送sql(发送到数据库)

pstmt.setInt(1,2);

boolean flag=pstmt.execute();

//4.处理结果

ResultSet rs=null;

if(flag){//true表示查询,有结果集

//获取结果集(二维表结构)

rs=pstmt.getResultSet();

List<Map<String,Object>> list=new ArrayList<>();

while(rs.next()){//一行记录应为一个map对象 (行映射)

//构建map,用于存储当前行记录

Map<String,Object> map=new HashMap();

//将取出类的数据存储到map (key为字段名,值为字段value)

map.put(“id”,rs.getInt(“id”));

map.put(“title”,rs.getString(“title”));

map.put(“content”,rs.getString(“content”));

map.put(“status”,rs.getString(“status”));

map.put(“type”,rs.getString(“type”));

map.put(“createdTime”,rs.getTimestamp(“createdTime”));

//…

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

完结

Redis基于内存,常用作于缓存的一种技术,并且Redis存储的方式是以key-value的形式。Redis是如今互联网技术架构中,使用最广泛的缓存,在工作中常常会使用到。Redis也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一,因此作为Java开发者,Redis是我们必须要掌握的。

Redis 是 NoSQL 数据库领域的佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis源码日志笔记》将会是你的最佳选择。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

**

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-OCWGQaKa-1712670916224)]

完结

Redis基于内存,常用作于缓存的一种技术,并且Redis存储的方式是以key-value的形式。Redis是如今互联网技术架构中,使用最广泛的缓存,在工作中常常会使用到。Redis也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一,因此作为Java开发者,Redis是我们必须要掌握的。

Redis 是 NoSQL 数据库领域的佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis源码日志笔记》将会是你的最佳选择。

[外链图片转存中…(img-x5YTwCGf-1712670916225)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-wU0SZOdL-1712670916225)]

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将一个druid-springboot-starter的springboot项目转换成使用shardingjdbcspringboot项目的步骤如下: 1. 在pom.xml文件增加sharding-jdbc-spring-boot-starter和mysql-connector-java的依赖。 ```xml <dependency> <groupId>io.shardingjdbc</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>${shardingjdbc.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> ``` 2. 在application.yml或application.properties配置sharding-jdbc的数据源和分库分表规则。 ```yaml spring: shardingsphere: datasource: names: ds0, ds1 # 数据源名称 ds0: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db0?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: root ds1: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: root sharding: tables: t_order: actual-data-nodes: ds$->{0..1}.t_order_$->{0..1} table-strategy: inline: sharding-column: order_id algorithm-expression: t_order_$->{order_id % 2} key-generator: type: SNOWFLAKE column: order_id binding-tables: t_order default-database-strategy: inline: sharding-column: user_id algorithm-expression: ds$->{user_id % 2} default-table-strategy: none: ``` 3. 在代码使用sharding-jdbc的数据源访问数据库。 ```java @Autowired private JdbcTemplate jdbcTemplate; public void query() { String sql = "select * from t_order where user_id = ?"; List<Map<String, Object>> resultList = jdbcTemplate.queryForList(sql, 10); System.out.println(resultList); } ``` 通过以上步骤,就可以将一个druid-springboot-starter的springboot项目转换成使用shardingjdbcspringboot项目了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值