如何切換鼠標(如何切換鼠標模式)
853
2022-05-29
一、持久化機制
持久化(persistence): 把數據保存到可掉電式存儲設備中以供之后使用。大多數情況下,特別是企業級應用,數據持久化意味著將內存中的數據保存到硬盤上加以”固化”,而持久化的實現過程大多通過各種關系數據庫來完成。就是將內存中的數據存儲在關系型數據庫中,當然也可以存儲在磁盤文件、XML數據文件中。 而在 Java中,數據庫存取技術只能通過 JDBC 來訪問數據庫。
JDBC 訪問數據庫的形式主要有兩種:
直接使用 JDBC 的 API 去訪問數據庫服務器 (MySQL/Oracle)。
間接地使用 JDBC 的 API 去訪問數據庫服務器,使用第三方O/R Mapping工具,如 Hibernate, MyBatis 等。(底層依然是 JDBC ,JDBC 是 Java 訪問數據庫的基石,其他技術都是對 JDBC 的封裝)
二、JDBC概述
JDBC (Java DataBase Connectivity)是一個獨立于特定數據庫管理系統、通用的SQL數據庫存取和操作的公共接口(一組API),定義了用來訪問數據庫的標準Java類庫,(java.sql,javax.sql)使用這些類庫可以以一種標準的方法、方便地訪問數據庫資源。
JDBC為訪問不同的數據庫提供了一種統一的途徑,為開發者屏蔽了一些細節問題。
JDBC 的目標是使 Java 程序員使用 JDBC 可以連接任何提供了 JDBC 實現 (驅動程序) 的數據庫系統,這
樣就使得程序員無需對特定的數據庫系統的特點有過多的了解,從而大大簡化和加快了開發過程。
簡單來說,JDBC 本身是 Java 連接數據庫的一個標準,是進行數據庫連接的抽象層,由 Java編寫的一組類和接口組成,接口的實現由各個數據庫廠商來完成。
JDBC編寫的步驟如下:
ODBC(Open Database Connectivity,開放式數據庫連接),是微軟在Windows平臺下推出的。使用者在程序中只需要調用ODBC API,由 ODBC 驅動程序將調用轉換成為對特定的數據庫的調用請求。
三、獲取數據庫連接
3.1、加載注冊驅動
java.sql.Driver 接口是所有 JDBC 驅動程序需要實現的接口。這個接口是提供給數據庫廠商使用的,不同數據庫廠商提供不同的實現。在程序中不需要直接去訪問實現了 Driver 接口的類,而是由驅動程序管理器類(java.sql.DriverManager)去調用這些Driver實現。
Oracle的驅動:oracle.jdbc.driver.OracleDriver
mySql的驅動: com.mysql.jdbc.Driver
加載驅動:加載 JDBC 驅動需調用 Class 類的靜態方法 forName(),向其傳遞要加載的 JDBC 驅動的類名
Class.forName(“com.mysql.jdbc.Driver”);
3.2、注冊驅動的原理
注冊驅動:DriverManager 類是驅動程序管理器類,負責管理驅動程序
使用DriverManager.registerDriver(com.mysql.jdbc.Driver)來注冊驅動
通常不用顯式調用 DriverManager 類的 registerDriver() 方法來注冊驅動程序類的實例,因為 Driver 接口的驅動程序類都包含了靜態代碼塊,在這個靜態代碼塊中,會調用 DriverManager.registerDriver() 方法來注冊自身的一個實例。下圖是MySQL的Driver實現類的源碼:
他通常有以下兩個步驟:
1. 把 com.mysql.jdbc.Driver 這一份字節碼加載進 JVM。 2. 字節碼被加載進JVM,就會執行其靜態代碼塊.而其底層的靜態代碼塊在完成注冊驅動工作,將驅動注 冊到DriverManger 中。
3.3、獲取連接對象
我們一般使用 DriverManager 的 getConnection 方法創建 Connection 對象
Connection conn = DriverManager.getConnection(url,username,password); // url=jdbc:mysql://localhost:3306/jdbcdemo // 如果連接的是本機的 MySQL,并且端口是默認的 3306 ,則可以簡寫: // url=jdbc:mysql:///jdbcdemo // username:當前訪問數據庫的用戶名 // password:當前訪問數據庫的密碼
3.3.1、URL詳解
JDBC URL 用于標識一個被注冊的驅動程序,驅動程序管理器通過這個 URL 選擇正確的驅動程序,從而建立到數據庫的連接。
JDBC URL的標準由三部分組成(協議:子協議:子名稱),各部分間用冒號分隔。
協議:JDBC URL中的協議總是jdbc(固定寫法)。
子協議:子協議用于標識一個數據庫驅動程序。
子名稱:一種標識數據庫的方法。子名稱可以依不同的子協議而變化,用子名稱的目的是為了定位數據庫提供足夠的信息。包含主機名(對應服務端的ip地址),端口號,數據庫名。
url的常見寫法:
jdbc:mysql://主機名稱:mysql服務端口號/數據庫名稱?參數=值&參數=值
jdbc:mysql://localhost:3306/atguigu
jdbc:mysql://localhost:3306/atguigu**?useUnicode=true&characterEncoding=utf8**(如果JDBC程序與服務器端的字符集不一致,會導致亂碼,那么可以通過參數指定服務器端的字符集)
jdbc:mysql://localhost:3306/atguigu?user=root&password=123456
3.4、數據庫連接方法
3.4.1、方式一
我們可以通過直接獲取注冊驅動,將數據庫信息寫在代碼中,這個的問題也是很明顯的,那就是一個硬編碼問題,當我們需要修改數據庫的時候,需要直接修改Java源代碼。
@Test public void testConnection4() { try { //1.數據庫連接的4個基本要素: String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "admin"; String driverName = "com.mysql.jdbc.Driver"; //2.加載驅動 (①實例化Driver ②注冊驅動) Class.forName(driverName); //3.獲取連接 Connection conn = DriverManager.getConnection(url, user, password); System.out.println(conn); } catch (Exception e) { e.printStackTrace(); } }
3.4.2、方式二
我們為了解決方式一硬編碼的問題,需要將驅動信息放入配置文件,然后通過讀取的方式來進行賦值。
@Test public void testConnection5() throws Exception { //1.加載配置文件 InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties"); Properties pros = new Properties(); pros.load(is); //2.讀取配置信息 String user = pros.getProperty("user"); String password = pros.getProperty("password"); String url = pros.getProperty("url"); String driverClass = pros.getProperty("driverClass"); //3.加載驅動 Class.forName(driverClass); //4.獲取連接 Connection conn = DriverManager.getConnection(url,user,password); System.out.println(conn); }
使用配置文件的好處:
實現了代碼和數據的分離,如果需要修改配置信息,直接在配置文件中修改,不需要深入代碼。
如果修改了配置信息,省去重新編譯的過程。
四、DAO思想
4.1、沒有DAO
在沒有 DAO 的時候,我們的代碼存在大量的重復。
4.2、DAO介紹
DAO(Data Access Object) 數據訪問對象是一個面向對象的數據庫接口. 顧名思義就是與數據庫打交道,夾在業務邏輯與數據庫資源中間,將所有對數據源的訪問操作抽象封裝在一個公共 API 中。程序書寫就是建立一個接口,接口中定義了此應用程序中將會用到的所有事務方法。DAO 中的主要操作: 增刪改查(CRUD)。
通過以上圖,DAO 作為組件,那其主要的是方法的設計,方法設計需要注意什么呢?
在保存功能中,調用者需要傳遞多個參數進來,然后把這些數據保存到數據庫中。
在查詢功能中,結果集的每行數據有多個列的值,然后把這些數據返回給調用者。
在開發過程中,如果遇到需要傳遞的數據有多個的時候,通常需要使用 JavaBean 對其進行封裝
4.3、DAO規范
DAO本質就是一個可以重復使用的組件。他包括了兩個規范:
分包規范(域名倒寫.項目模塊名.組件)
cn.util; //存放工具類 cn.domain; //裝pss模塊的domain類,模型對象.(Student) cn.dao; //裝pss模塊的dao接口.調用者將需要保存的數據封裝到一個對象中,然后傳遞進來 cn.dao.impl; //裝dao接口的實現類. cn.test; //暫時存儲DAO的測試類,以后的測試類不應該放這里.
命名規范
DAO 接口 : 表示對某個模型的 CRUD 操作做規范,以 I 開頭,interface。例如: IStudentDAO
DAO 實現類: 表示對某個 DAO 接口的實現,例如:EmployeeDAOImpl
DAO 測試類: 測試 DAO 組件中的所有方法,例如:EmployeeDAOTest
調用建議:面向接口編程
傳統的做法 : EmployeeDAOImpl dao = new EmployeeDAOImpl();
面向接口編程 : IEmployeeDAO dao = new EmployeeDAOImpl();
JDBC 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。