SpringBoot连接数据库的方式
1、Spring集成的服务
直接通过注入方式使用,如redis,jdbc等等服务。
spring:
redis:
host: localhost
port: 6379
password: 123456
database: 0
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Autowired
private JdbcTemplate jdbcTemplate;
2、非spring集成(注册Bean服务)
iotdb:
host: 127.0.0.1
port: 8080
username: root
password: 123456
@Data
@Component
@ConfigurationProperties(prefix = "iotdb")
public class ConnUtils{
private String ip;
private String port;
private String username;
private String passwrod;
// 通过Bean注册成长连接,启动项目就连接上
@Bean
public Connection connection(){
Connection connection = new connection(ip,port,username,passwrod);
connection.openConnection();
return connection;
}
}
/**
* 调用方式
**/
public class Test{
@Autowired
private Connection connection;
}
3、非spring集成应用(静态调用)
iotdb:
host: 127.0.0.1
port: 8080
username: root
password: 123456
@Data
@Component
@ConfigurationProperties(prefix = "iotdb")
public class ConnUtils{
private static String ip;
private static String port;
private static String username;
private static String passwrod;
public void setIp(String ip){
ConnUtils.ip = id;
}
public void setPort(String port){
ConnUtils.port = port;
}
public void setUsername(String username){
ConnUtils.username = username;
}
public void setPasswrod(String passwrod){
ConnUtils.passwrod = passwrod;
}
// 短连接,每次需要时就手动调用
public static Connection getConnection(){
Connection connection = new connection(ip,port,username,passwrod);
connection.openConnection();
return connection;
}
}
/**
* 调用方式
**/
public class Test{
public void method(){
Connection connection = ConnUtils.getConnection();
}
}
3、使用原生JDBC连接Mysql
方式一:使用jdk连接
package com.cn.utils;
import java.sql.DriverManager;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
//jdbc工具类
public class JdbcUtil {
//查询多行多列
public static <T> List<T> list(String sql,Class<T> c){
//创建一个集合,存放所有的对象
List<T> tList=new ArrayList<>();
try {
//1、注册驱动-反射去加载jar包中com.mysql.jdbc.Driver这个类中的 DriverManager.registerDriver(new Driver());
Class.forName("com.mysql.jdbc.Driver");
//2、获取连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/summer-camp2023?characterEncoding=utf8", "root", "admin");
//3、定义sql
String sql = "select * from t_test";
//4、需要创建statement
Statement st = conn.createStatement();
//5、statement 执行sql,返回 结果集
ResultSet rs = st.executeQuery(sql);
//结果集rs得到结果集元数据
ResultSetMetaData md=rs.getMetaData();
//获取结果集总列数
var columnCount = md.getColumnCount();
//6、解析rs
while (rs.next()) {//rs.next 读取结果集的光标向下移动一行,光标默认在哪一行,列名所在的那一行
//根据每一行数据,封装成一个实体对象
T t = c.newInstance();
// 1、取出某一行的每个数据,封装到对象t的属性中
for (int i = 1; i <= columnCount; i++) {
//通过列的序号,获取每一列的值
var value = rs.getObject(i);
if (value!=null){
//通过列的序号,获取每一列的列名
var columnName = md.getColumnName(i);
//因为列名和实体类t中的属性名一致,为每一个属性构造一个反射中的set方法
var f = c.getDeclaredField(columnName);
//赋予私有属性的赋值权限
f.setAccessible(true);
//使用反射,把value给到对象t的属性中
f.set(t,value);//理解为:把value赋值给对象t的ColumName,相当于set方法
}
}
//把对象存入集合中
tList.add(t);
}
//7、关闭资源
st.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
return tList;
}
}
方式二:使用com.alibaba.druid依赖
package com.cn.utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.alibaba.druid.util.JdbcUtils;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
//jdbc工具类
public class JdbcUtil {
//查询多行多列
public static <T> List<T> list(String sql,Class<T> c){
//创建一个集合,存放所有的对象
List<T> tList=new ArrayList<>();
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
//1、定义数据源参数
Map<String, Object> map = new HashMap();
map.put("driverClassName", "com.mysql.jdbc.Driver");
map.put("url", "jdbc:mysql://localhost:3306/test?characterEncoding=utf8");
map.put("username", "root");
map.put("password", "123546");
map.put("initialSize", "5");
map.put("maxActive", "20");
map.put("maxWait", "3000");
DataSorce ds = DruidDataSourceFactory.createDataSource(map);
//2、创建连接
conn = ds.getConnection();
//3、定义sql
String sql = "select * from t_test";
//4、创建statement
st = conn.createStatement();
//5、使用 statement 执行sql,返回 结果集
rs = st.executeQuery(sql);
//结果集rs得到结果集元数据
ResultSetMetaData md=rs.getMetaData();
//获取结果集总列数
var columnCount = md.getColumnCount();
//6、解析rs
while (rs.next()) {//rs.next 读取结果集的光标向下移动一行,光标默认在哪一行,列名所在的那一行
//根据每一行数据,封装成一个实体对象
T t = c.newInstance();
// 1、取出某一行的每个数据,封装到对象t的属性中
for (int i = 1; i <= columnCount; i++) {
//通过列的序号,获取每一列的值
var value = rs.getObject(i);
if (value!=null){
//通过列的序号,获取每一列的列名
var columnName = md.getColumnName(i);
//因为列名和实体类t中的属性名一致,为每一个属性构造一个反射中的set方法
var f = c.getDeclaredField(columnName);
//赋予私有属性的赋值权限
f.setAccessible(true);
//使用反射,把value给到对象t的属性中
f.set(t,value);//理解为:把value赋值给对象t的ColumName,相当于set方法
}
}
//把对象存入集合中
tList.add(t);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//7、关闭资源
JdbcUtils.close(rs);
JdbcUtils.close(st);
JdbcUtils.close(conn);
}
return tList;
}
}
SpringBoot连接数据库的方式的更多相关文章
- node-mongodb-native的几种连接数据库的方式
h1,h2,h3,h4,h5,h6,p,blockquote { margin: 0; padding: 0;}body { font-family: "Helvetica Neue&quo ...
- springboot连接数据库报错testWhileIdle is true, validationQuery not set
问题描述: 使用springboot连接数据库,启动的时候报错:testWhileIdle is true, validationQuery not set.但是不影响系统使用,数据库等一切访问正常. ...
- PDO的三种连接数据库的方式
PDO的三种连接数据库的方式 PDO的出现是为了解决PHP与各个数据库的连接处理都有各自的函数的问题,它的高度抽象,使得使用起来极其的方便.由于最常用的搭配就是PHP+Mysql,所以这里就以连接 ...
- 前端基于vue,后台采用springboot+shiro的方式搭建的一个移动端商品展示平台
基于vue实现的移动端商品展示页,可以web-view的方式嵌入到小程序中,布局简约.大气,减少初学者或开发者不必要的工作量.后台维护采用的springboot+shiro的方式,为广大爱好者提供展示 ...
- linux环境下,springboot jar启动方式
linux环境下,springboot jar启动方式 一.前台启动(ctrl+c会关掉进程) java -jar application.jar 二.后台启动(ctrl+c不会关闭) java -j ...
- 实例讲解Springboot以Template方式整合Redis及序列化问题
1 简介 之前讲过如何通过Docker安装Redis,也讲了Springboot以Repository方式整合Redis,建议阅读后再看本文效果更佳: (1) Docker安装Redis并介绍漂亮的可 ...
- 掌握这些springboot的配置方式,让你工作效率翻个倍!
springboot的多种配置方式 java配置主要靠java类和一些注解,比较常用的注解有: @Configuration :声明一个类作为配置类,代替xml文件 @Bean :声明在方法上,将方法 ...
- MYSQL:python 3.x连接数据库的方式
我们想要在我们的mython程序中使用mysql,首先需要安装pymysql模块,安装方式可以使用cmd命令安装, pip3.x install pymysql 首先在我们连接数据库之前先创建一个us ...
- SpringBoot/SpringMVC文件下载方式
本篇文章引用外网博客代码,共描述SpringMVC下三种文件下载方式,本人测试在SpringBoot(2.0以上版本)正常使用. 引用博客,强烈推荐https://www.boraji.com. pa ...
- springboot linux启动方式
手动启动 java -Xms128m -Xmx256m -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8081,suspend=n -j ...
随机推荐
- layui 新增行
layui表格新增行目前只在从内存加载数据的情况下可行! 在多方查找数据与实验后,我发现layui确实只能在直接赋值数据(从内存加载数据)的情况下新增行,即首次渲染表格时使用内存数据给表格的data参 ...
- Android 13 - Media框架(9)- NuPlayer::Decoder
关注公众号免费阅读全文,进入音视频开发技术分享群! 这一节我们将了解 NuPlayer::Decoder,学习如何将 MediaCodec wrap 成一个强大的 Decoder.这一节会提前讲到 M ...
- WPF开发快速入门【0】前言与目录
前言 WPF是一个生不逢时的技术,刚推出的时候由于是XP时代,WPF技术有两个不方便的地方: 1.由于操作系统没有自带Framework,需要另外安装,比较麻烦: 2.程序第一次启动时,由于要加载Fr ...
- nonatomic 带来的线程安全问题
一.结论 一个对象对外暴露的读写属性,如果这个属性在多个线程中访问,一定会出现crash. 因此对外暴露的属性一定要考虑线程安全问题. 二.看下面的代码 下面的代码一定会crash,除非obj是ato ...
- 震惊!docker镜像还有这些知识,你都知道吗?----镜像(一)
镜像操作命令表格 docker image 子命令 docker子命令 功能 docker image build docker build 从Dockerfile开始构建镜像 docker imag ...
- 快速生成树协议(RSTP)基本知识及实验(使用eNSP)
关于生成树协议的知识可参考我的另一个博客:https://www.cnblogs.com/mrlayfolk/p/12242627.html 这篇博文主要介绍快速生成树协议(RSTP)的基本知识.-- ...
- CF1838A-Blackboard-List
题意简述 在黑板上有两个数字,进行如下操作 \(n-2\) 次: 每次在黑板上选择任意两个数,将两个数的差的绝对值写在黑板上. 这样你会得到一个长度为 \(n (3 \le n \le 100)\) ...
- Asp .Net Core 系列:详解鉴权(身份验证)以及实现 Cookie、JWT、自定义三种鉴权 (含源码解析)
什么是鉴权(身份验证)? https://learn.microsoft.com/zh-cn/aspnet/core/security/authentication/?view=aspnetcore- ...
- Prometheus 监控平台组件深度讲解
Prometheus 的重要性和流行度已经无需多言.直入主题,本文对 Prometheus 监控平台的各个组件做深度讲解,希望能帮助读者更好地理解 Prometheus. 监控系统的核心逻辑 对于一套 ...
- JavaScript将类数组转换为数组的三种方法
// 类数组转换为数组 const list = [] // 假定为类数组 const arr1 = Array.from(list); const arr2 = Array.prototype.sp ...