SpringBoot_資料庫連線
看java連線資料庫的發展過程:
1.JDBC直連;
2.資料庫連線池;
3.QueryRunner;
4.JPA框架:MyBatis、Hibernate、Spring data jpa;
5.通用Mapper;
Java資料庫操作系列入門教程:JDBC基本使用、DBCP基本使用、Hibernate/Spring data jpa/MyBatis基本使用
https://blog.csdn.net/fightingXia/article/details/80715281
檢視連線的數量:
https://www.cnblogs.com/liuyuhangCastle/p/9595458.html
概念:
資料來源:datasource的概念、不同連線池對應的datasource類
https://blog.csdn.net/fightingXia/article/details/82555999
連線池:使用資料庫連線池的好處、直接用DriverManager獲取連線的壞處
https://blog.csdn.net/caidie_huang/article/details/52639567
一 使用JDBC連線資料庫
JAVA連線資料庫最基本的方式:直接用JDBC連線,過程包括:註冊驅動、獲取連線、建立statement、執行sql、獲取返回結果集
https://blog.csdn.net/qq_38449518/article/details/80501246
# 一 匯入maven依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
# 二 修改預設配置
無
# 三 建立實體類
public class User {
private Long id;
private String userNaame;
// getter、setter略
}
# 四 Controller、Service、DAO
1.Controller
@Controller
public class MyController {
@Autowired
private MyService myService;
@GetMapping("test/{id}")
@ResponseBody
public String queryNameById(@PathVariable Long id){
try {
return this.myService.queryNameById(id);
} catch (Exception e) {
e.printStackTrace();
return "訪問錯誤";
}
}
}
2.Service
@Service
public class MyService {
@Autowired
private MyDAO myDAO;
public String queryNameById(Long id) throws SQLException, ClassNotFoundException {
return this.myDAO.queryNameById(id);
}
}
3.DAO
@Repository
public class MyDAO {
public String queryNameById(Long id) throws SQLException, ClassNotFoundException {
String driver = "com.mysql.cj.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/newdb?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8";
String username="root";
String password="123456";
Class.forName(driver);
Connection connection= DriverManager.getConnection(url,username,password);
if(!connection.isClosed())
System.out.println("connection success");
Statement statement=connection.createStatement();
String sql="SELECT username FROM user WHERE id="+id;
ResultSet resultSet=statement.executeQuery(sql);
String name=null;
while(resultSet.next()){
name=resultSet.getString("username");
}
resultSet.close();
statement.close();
connection.close();
return name;
}
}
二 使用資料庫連線池
使用資料庫連線池,過程還是和上面直接使用jdbc一樣,仍然需要獲取連線、建立statement、執行sql、獲取返回結果集,區別在於,這裡不是直接由DriverManager建立資料庫連線,而是從連線池中獲取連線,具體的連線建立和排程 由連線池控制。
連線池的使用方式:連線池建立後如何使用?還是用於獲取connection
https://www.cnblogs.com/diandianquanquan/p/10607021.html
使用連線池仍要手動關閉connection:
https://blog.csdn.net/zhangzeyuaaa/article/details/85019872
補充知識:
springboot中如何獲取properties中的配置資訊?
2.1 SpringBoot啟動器自動配置Hikari
由啟動器自動建立HikariDatasource物件注入Spring容器,並自動使用配置。
注意:springboot中啟動器的作用是建立業務情景下通用的Bean物件並註冊到Spring容器。jdbc starter會自動建立hikari資料來源,所以不需要也不能夠再手動註冊HikariDatasource,否則會報錯。只需要修改HikariDatasource的預設配置即可,而且springboot是自動讀取配置檔案的。
自動配置過程:
https://blog.csdn.net/u013089490/article/details/83584716
Hikari配置引數說明:
https://blog.csdn.net/lizhiqiang1217/article/details/90573759
# 一 匯入maven依賴:
SpringBoot2.0以後預設使用Hikari連線池,jdbc啟動器中包含了HikariDatasource的建立
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
# 二 修改預設配置
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/newdb?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
username: root
password: 123456
hikari:
minimum-idle: 5
...
# 三 建立實體類 同上
# 四 Controller、Service、DAO
1.Controller 同上
2.Service 同上
3.DAO
注意:Hikari這裡也可以用HikariDataSource進行依賴注入,但是Druid連線池不能用DruidDataSource
@Repository
public class MyDAO {
@Autowired
DataSource dataSource;
public String queryNameById(Long id) throws SQLException, ClassNotFoundException {
// 輸出dataSource的型別
System.out.println(this.dataSource.getClass());
Connection connection = this.dataSource.getConnection();
... 同上
}
}
2.2 SpringBoot手動配置Hikari
手動配置Hikari的方法:當不使用jdbc starter的情況下,即不自動建立並註冊;
注意:@Configuration表示是配置類,通過在包掃描中設定,可讓Spring掃描到該包,之後才是@Bean表示將方法的返回值建立Bean並且加入Spring容器。@Configuration和@Bean兩個註解要連著用。
手動配置過程:
https://www.cnblogs.com/hongdada/p/9360155.html
配置報錯:“jdbcUrl is required with driverClassName“:
https://blog.csdn.net/newbie_907486852/article/details/81391525
配置報錯:”dataSource or dataSourceClassName or jdbcUrl is required“
https://blog.csdn.net/hadues/article/details/102567458
一:匯入pom依賴
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
二:修改預設配置
注意:手動配置Hikari時,用jdbc-url而不是url,否則會報錯;只有手動配置Hikari才會這樣,手動配置Druid還是用url;
另外,自動配置時連線池的具體配置有hikari字首,而手動配置沒有,這是因為,自動配置時是spring自己識別配置檔案所以要按固定規則配置,而手動配置時,其實加不加字首都可以,這裡只是存放值而已,需要自己再從配置檔案中讀值。
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://localhost:3306/newdb?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
username: root
password: 123456
minimum-idle: 5
...
三:建立並註冊Hikari配置類
注意:這裡註冊的返回值是介面DataSource,而不是實現類HikariDataSource,是多型
@Configuration
public class HikariConfig{
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource dataSource(){
return new HikariDataSource();
}
}
三:建立實體類:同上
四:Controller、Service、DAO
1.Controller 同上
2.Service 同上
3.DAO
@Repository
public class MyDAO {
@Autowired
private DataSource dataSource;
public String queryNameById(Long id) throws SQLException, ClassNotFoundException {
Connection connection = this.dataSource.getConnection();
... 同上
}
}
2.3 SpringBoot啟動器自動配置Druid
Druid自動手動三種配置方式:
https://www.cnblogs.com/yjq520/p/10779356.html
Druid資料來源獲取:
https://blog.csdn.net/zhu0836/article/details/84330666
一 引入maven依賴
不加jdbc啟動器能夠順利執行,可見druid啟動器中應該包含了jdbc配置
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
二:修改預設配置
注意:這裡只是最基本的配置,druid有一個後臺管理頁面,完整配置方法見引用教程
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/newdb?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
username: root
password: 123456
druid:
initial-size: 5
...
三:Controller、Service、DAO
1.Controller 同上
2.Service 同上
3.DAO
注意:這裡有兩種方式進行依賴注入獲取datasource;但是無論如何不能直接獲取DruidDataSource物件,不然會報錯;
兩種方式最後DataSource的型別都是com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper
第一種:和手動配置一樣,直接用DataSource來注入
public class MyDAO {
@Autowired
private DataSource datasource;
public String queryNameById(Long id) throws SQLException, ClassNotFoundException {
Connection connection = this.dataSource.getConnection();
... 同上
}
}
第二種:獲取DruidDataSourceAutoConfigure物件,再由該物件建立javax.sql.DataSource資料來源;
public class MyDAO {
@Autowired
private DruidDataSourceAutoConfigure druidDataSource;
public String queryNameById(Long id) throws SQLException, ClassNotFoundException {
DataSource dataSource = this.druidDataSource.dataSource();
Connection connection = dataSource.getConnection();
... 同上
}
}
2.4 SpringBoot手動配置Druid
Druid手動配置兩種方式:
https://blog.csdn.net/mulinsen77/article/details/87778601
一:引入maven依賴
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
二:配置引數
注意:以下為最基本的配置,Druid完整配置包含三大塊,具體配置見引用教程;
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/newdb?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
username: root
password: 123456
initial-size: 5
...
三:建立Druid配置類
注意:這裡註冊的返回值是DataSource介面,而不是實現類DruidDataSource型別;
@Configuration
public class DruidDBService {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource druidDataSource() {
return new DruidDataSource();
}
}
四:Controller、Service、DAO
1.Controller 同上
2.Service 同上
3.DAO
注意:手動配置時,注意注入值的並用DruidDatasource類來注入值,而是用Datasource介面,
否則會報錯。而注入的值,實際為DruidDataSource物件,從下面的輸出可知。
@Repository
public class MyDAO {
@Autowired
private DataSource dataSource;
public String queryNameById(Long id) throws SQLException, ClassNotFoundException {
// 從輸出可以看到,實際為 class com.alibaba.druid.pool.DruidDataSource
System.out.println(this.dataSource.getClass());
Connection connection = this.dataSource.getConnection();
... 同上
}
}
三 使用QueryRunner
四 使用MyBatis
五 使用通用Mapper
相關文章
- 用Navicat連線資料庫-資料庫連線(MySQL演示)資料庫MySql
- 連線資料庫資料庫
- 資料庫連線池-Druid資料庫連線池原始碼解析資料庫UI原始碼
- mysqli連線資料庫MySql資料庫
- Mongodb資料庫連線MongoDB資料庫
- Android 連線資料庫Android資料庫
- java連線資料庫Java資料庫
- 連線資料庫-mysql資料庫MySql
- jmeter連線資料庫JMeter資料庫
- Mybatis連線資料庫MyBatis資料庫
- JSP連線資料庫JS資料庫
- JDBC連線資料庫JDBC資料庫
- Flask連線資料庫Flask資料庫
- 《四 資料庫連線池原始碼》手寫資料庫連線池資料庫原始碼
- python 連線 mongo 資料庫連線超時PythonGo資料庫
- 資料庫的連線數資料庫
- Python連線SQLite資料庫PythonSQLite資料庫
- C#連線資料庫C#資料庫
- 如何連線MySQL資料庫MySql資料庫
- 使用Sequelize連線資料庫資料庫
- 資料庫連線池原理資料庫
- 使用JPA連線資料庫資料庫
- Datagrip連線Kingbase資料庫資料庫
- Flask資料庫連線池Flask資料庫
- IDEA中資料庫連線Idea資料庫
- jmeter 連線 sqlserver 資料庫JMeterSQLServer資料庫
- python資料庫連線池Python資料庫
- nodejs之資料庫連線NodeJS資料庫
- 使用Python連線資料庫Python資料庫
- django | 連線mysql資料庫DjangoMySql資料庫
- Python連線MySQL資料庫PythonMySql資料庫
- Rust 連線 PostgreSQL 資料庫RustSQL資料庫
- Python 連線 Oracle資料庫PythonOracle資料庫
- PHP 連線access資料庫PHP資料庫
- Mybatis配置資料庫連線MyBatis資料庫
- pycharm連線MySQL資料庫PyCharmMySql資料庫
- Android連線資料庫sqlserverAndroid資料庫SQLServer
- python資料插入連線MySQL資料庫PythonMySql資料庫