簡單介紹
在之前的文章中,我們介紹了一下SpringBoot中內(nèi)置的幾種數(shù)據(jù)層的解決方案,在數(shù)據(jù)層由三部分組成,分別是數(shù)據(jù)庫,持久化技術(shù)以及數(shù)據(jù)源,但是我今天寫著寫著,突然就想不起來這三部分到底是干什么的了,所以特意作文回憶一下我們這一路到底是用到現(xiàn)在的數(shù)據(jù)層模式的,以及我們一開始的數(shù)據(jù)模式是什么,主要還是想理一下這個三個組成部分的關(guān)系。
一切的開始
第一次接觸數(shù)據(jù)庫編程,基礎(chǔ)的是MySQL,作為一款市場最廣,最好上手的一款開源數(shù)據(jù)庫,使用MySQL開局確實不錯,但是第一次看到MySQL,他是這個樣子的:
很好,很符合我對程序員的想象,就是一個樸實無華的黑框,沒有任何的花里胡哨的作用,就是單純的執(zhí)行SQL語句,甚至有時候你換個行都會導致語句報錯。
后來接觸到了第一個數(shù)據(jù)可視化軟件,這個因人而異,我第一次接觸是NaiCat,有一些人是SQLyog,但是無論哪一個,猛地從小黑框換成一個可編程的界面多少還是有一點小驚喜的:
到了后來,除了MySQL,開始深入其他的編程語言,我第一個接觸的編程語言是Java,然后在很長的一段時間,我用的都是這個:?直到現(xiàn)在我依然覺得這個很好用,能在代碼和SQL界面之間切換,還是很不錯的。
說回編程
對于SQL的編程,之前學習的SQL語言自然不用多說,這是肯定都會的,然后就是Java連接數(shù)據(jù)庫。既然是Java連接SQL數(shù)據(jù)庫編程,肯定離不開的就是JDBC:
package com.example.springbootsum.pojo;
import java.sql.*;
import java.util.HashMap;
public class JDBC {
public static void main(String[] args) throws Exception {
// 數(shù)據(jù)源
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/jdbc";
String username = "root";
String password = "數(shù)據(jù)庫密碼";
Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement();
// 持久化
String sql = "select * from user";
ResultSet resultSet = statement.executeQuery(sql);
HashMap<Integer,String> user = new HashMap<Integer, String>();
while (resultSet.next()){
user.put(resultSet.getInt("id"), resultSet.getString("name"));
}
System.out.println(user);
}
}
?有點簡陋,但是道理是一樣的。
我們在使用JDBC的時候就說過,首先你的數(shù)據(jù)庫賬號和密碼都在代碼里,不安全。你的SQL也在代碼里,不安全。而且你要說更換自己的SQL就得從代碼里找自己的SQL寫在哪里,如果你要是編碼習慣好點,你把SQL都寫在統(tǒng)一的地方,還好說,你要是跟我一樣寫的像是Shift一樣,自己看了都給自己氣笑了了的程度那我勸你善良。
這是第一階段,這個時候?qū)τ贘ava操作數(shù)據(jù)庫僅僅是做了解,那時候我還是學的JavaWeb,比起數(shù)據(jù)庫,更吸引我的還是炫酷的前端動畫和框架,以及動態(tài)網(wǎng)頁,至于數(shù)據(jù)庫,那都是后話。得到了對于JDBC熟悉了之后,就開始接觸另一個東西叫做JavaEE,然后就開始接觸成熟的框架,那個時候才對數(shù)據(jù)源,持久化技術(shù)這種東西。
我在JDBC的代碼中也表明了數(shù)據(jù)源和持久化技術(shù)的底層代碼都是什么,數(shù)據(jù)源就是數(shù)據(jù)庫連接對象,之前是你把數(shù)據(jù)庫連接信息寫在代碼里自己手動生成數(shù)據(jù)源連接對象,然后操作SQL語句,數(shù)據(jù)源說你寫的代碼不嚴謹,我來幫你吧。
然后數(shù)據(jù)源這個東西就出現(xiàn)了,第一個接觸的數(shù)據(jù)源就是Druid,然后順便也開始使用框架去進行規(guī)范的開發(fā)流程,只不過那時候的框架還是原生的Spring,需要寫的代碼和配置文件還是不少。
從一開始的XML方式開發(fā),到后來的純注解式開發(fā),數(shù)據(jù)源需要寫的基本就只剩下用戶名和密碼以及url,直接就能獲取一個現(xiàn)成的,完整的數(shù)據(jù)庫連接對象,豈不美哉。
那么說回來,數(shù)據(jù)源的標準定義如下:
數(shù)據(jù)源,簡單理解為數(shù)據(jù)源頭,提供了應用程序所需要數(shù)據(jù)的位置。數(shù)據(jù)源保證了應用程序與目標數(shù)據(jù)之間交互的規(guī)范和協(xié)議,它可以是數(shù)據(jù)庫,文件系統(tǒng)等等。其中數(shù)據(jù)源定義了位置信息,用戶驗證信息和交互時所需的一些特性的配置,同時它封裝了如何建立與數(shù)據(jù)源的連接,向外暴露獲取連接的接口。
當然是百度的,這么長一段我可記不住。
我用到現(xiàn)在也還停留在數(shù)據(jù)源就是我給他一組數(shù)據(jù)庫連接信息他給我一個完美的數(shù)據(jù)庫連接對象的程度,我承認,我不是一個好的程序員。
后來一個數(shù)據(jù)源不夠用,當你的服務對外開放之后,你的數(shù)據(jù)庫會被很多人訪問,這時候單個的數(shù)據(jù)源肯定是不夠用的,這時候就出現(xiàn)了數(shù)據(jù)庫連接池,可以一次創(chuàng)建多個數(shù)據(jù)源供人使用,節(jié)省資源,這就是后話了。
持久化技術(shù)
持久化技術(shù)就是在JDBC中的后半部分,也就是我們在Java中執(zhí)行SQL代碼將數(shù)據(jù)寫入數(shù)據(jù)庫中或者說將數(shù)據(jù)庫中的數(shù)據(jù)讀取出來的過程。一開始的持久化技術(shù)非常的繁瑣,你需要自己寫SQL,自己寫結(jié)果集的處理,自己將結(jié)果集的單個字段于Java對象建立連接,那時候做個開發(fā)很難,寫這些SQL展示到自己的網(wǎng)頁里就非常的麻煩,后來開始解除了另一種簡單一些的持久化技術(shù),JdbcTemplate。
這種技術(shù)之前已經(jīng)演示過了,確實是節(jié)省了處理結(jié)果集的步驟,但是依然沒有解決SQL的硬編碼問題,在這個階段開發(fā)舒服了一些,最直觀的就是可以直接將數(shù)據(jù)集與Java對象關(guān)聯(lián)起來。
后來開始接觸Spring框架,然后是MyBatis,這時候的后端開發(fā)就很方便了,可以將SQL語句寫在配置文件中,或者是直接以注釋參數(shù)的方式寫在接口中,然后直接通過方法返回一個對象,在Java里操作對象會方便很多。
后來進化到了MyBatis-Plus,更快更方便的制作數(shù)據(jù)層的持久化,與數(shù)據(jù)庫的交互就更容易了。
關(guān)于持久化技術(shù),他的官方定義是這樣的:
將內(nèi)存中的瞬時數(shù)據(jù)保存到存儲設備中。
這個我努努力能記得住,但是講真的,我用到現(xiàn)在的持久化基礎(chǔ)除了寫道數(shù)據(jù)庫里就是寫在文件里,其他的使用場景,還真的挺少,果然,我是一個FW程序員。文章來源:http://www.zghlxwxcb.cn/news/detail-612086.html
盡管現(xiàn)在的開發(fā)速度越來越快,開發(fā)流程越來越成熟,但是偶爾我還是會寫一些JDBC的東西,去體驗一下最底層,最單純的美好。?文章來源地址http://www.zghlxwxcb.cn/news/detail-612086.html
到了這里,關(guān)于SpringBoot——數(shù)據(jù)層三組件之間的關(guān)系的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!