[轉載] 快速學習-Mybatis框架概述

參考鏈接: Java在競爭性編程中的快速I/O

第1章 框架概述?

1.1 什么是框架?

1.1.1 什么是框架?

框架(Framework)是整個或部分系統的可重用設計,表現為一組抽象構件及構件實例間交互的方法;另一種定義認為,框架是可被應用開發者定制的應用骨架。前者是從應用方面而后者是從目的方面給出的定義。?

簡而言之,框架其實就是某種應用的半成品,就是一組組件,供你選用完成你自己的系統。簡單說就是使用別人搭好的舞臺,你來做表演。而且,框架一般是成熟的,不斷升級的軟件。?

1.1.2 框架要解決的問題?

框架要解決的最重要的一個問題是技術整合的問題,在 J2EE 的 框架中,有著各種各樣的技術,不同的軟件企業需要從 J2EE 中選擇不同的技術,這就使得軟件企業最終的應用依賴于這些技術,技術自身的復雜性和技術的風險性將會直接對應用造成沖擊。而應用是軟件企業的核心,是競爭力的關鍵所在,因此應該將應用自身的設計和具體的實現技術解耦。這樣,軟件企業的研發將集中在應用的設計上,而不是具體的技術實現,技術實現是應用的底層支撐,它不應該直接對應用產生影響。?

框架一般處在低層應用平臺(如 J2EE)和高層業務邏輯之間的中間層。?

1.1.3 軟件開發的分層重要性?

框架的重要性在于它實現了部分功能,并且能夠很好的將低層應用平臺和高層業務邏輯進行了緩和。為了實現軟件工程中的“高內聚、低耦合”。把問題劃分開來各個解決,易于控制,易于延展,易于分配資源。我們常見的 MVC 軟件設計思想就是很好的分層思想。? 通過分層更好的實現了各個部分的職責,在每一層將再細化出不同的框架,分別解決各層關注的問題。?

1.1.4 分層開發下的常見框架?

常見的 JavaEE 開發框架: 1、解決數據的持久化問題的框架? ?

1.1.5 MyBatis 框架概述?

mybatis 是一個優秀的基于 java 的持久層框架,它內部封裝了 jdbc,使開發者只需要關注 sql 語句本身, 而不需要花費精力去處理加載驅動、創建連接、創建 statement 等繁雜的過程。?

mybatis 通過 xml 或注解的方式將要執行的各種 statement 配置起來,并通過 java 對象和statement 中sql 的動態參數進行映射生成最終執行的 sql 語句,最后由 mybatis 框架執行 sql 并將結果映射為 java 對象并返回。?

采用 ORM 思想解決了實體和數據庫映射的問題,對 jdbc 進行了封裝,屏蔽了jdbc api 底層訪問細節,使我們不用與 jdbc api 打交道,就可以完成對數據庫的持久化操作。?

為了我們能夠更好掌握框架運行的內部過程,并且有更好的體驗,下面我們將從自定義 Mybatis 框架開始來學習框架。此時我們將會體驗框架從無到有的過程體驗,也能夠很好的綜合前面階段所學的基礎。?

1.2 JDBC 編程的分析?

1.2.1 jdbc 程序的回顧?

public static void main(String[] args) {

? ? ? ? Connection connection = null;

? ? ? ? PreparedStatement preparedStatement = null;

? ? ? ? ResultSet resultSet = null;

? ? ? ? try {

? ? ? ? ? ? //加載數據庫驅動

? ? ? ? ? ? Class.forName("com.mysql.jdbc.Driver");

? ? ? ? ? ? //通過驅動管理類獲取數據庫鏈接

? ? ? ? ? ? connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "ro ot", "root");

? ? ? ? ? ? //定義 sql 語句 ?表示占位符

? ? ? ? ? ? //獲取預處理 statement

? ? ? ? ? ? preparedStatement = connection.prepareStatement(sql);

? ? ? ? ? ? //設置參數,第一個參數為 sql 語句中參數的序號(從 1 開始),第二個參數為設置的

?

? ? ? ? ? ? preparedStatement.setString(1, "王五");

? ? ? ? ? ? //向數據庫發出 sql 執行查詢,查詢出結果集

? ? ? ? ? ? resultSet = preparedStatement.executeQuery();

? ? ? ? ? ? //遍歷查詢結果集

? ? ? ? ? ? while (resultSet.next()) {

? ? ? ? ? ? ? ? System.out.println(resultSet.getString("id") + "

? ? ? ? ? ? ? ? ? ? ? ? "+resultSet.getString("username"));

?

? ? ? ? ? ? }

? ? ? ? } catch (Exception e) {

? ? ? ? ? ? e.printStackTrace();

? ? ? ? } finally {

? ? ? ? ? ? //釋放資源

? ? ? ? ? ? if (resultSet != null) {

? ? ? ? ? ? ? ? try {

? ? ? ? ? ? ? ? ? ? resultSet.close();

? ? ? ? ? ? ? ? } catch (SQLException e) {

? ? ? ? ? ? ? ? ? ? e.printStackTrace();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? if (preparedStatement != null) {

? ? ? ? ? ? ? ? try {

? ? ? ? ? ? ? ? ? ? preparedStatement.close();

? ? ? ? ? ? ? ? } catch (SQLException e) {

? ? ? ? ? ? ? ? ? ? e.printStackTrace();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? if (connection != null) {

? ? ? ? ? ? ? ? try {

? ? ? ? ? ? ? ? ? ? connection.close();

? ? ? ? ? ? ? ? } catch (SQLException e) {

? ? ? ? ? ? ? ? ? ? // TODO Auto-generated catch block e.printStackTrace();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? }

?

上邊使用 jdbc 的原始方法(未經封裝)實現了查詢數據庫表記錄的操作。?

1.2.2 jdbc 問題分析?

1、數據庫鏈接創建、釋放頻繁造成系統資源浪費從而影響系統性能,如果使用數據庫鏈接池可解決此問題。 2、Sql 語句在代碼中硬編碼,造成代碼不易維護,實際應用 sql 變化的可能較大,sql 變動需要改變 java代碼。 3、使用 preparedStatement 向占有位符號傳參數存在硬編碼,因為 sql 語句的 where 條件不一定,可能多也可能少,修改 sql 還要修改代碼,系統不易維護。 4、對結果集解析存在硬編碼(查詢列名),sql 變化導致解析代碼變化,系統不易維護,如果能將數據庫記錄封裝成 pojo 對象解析比較方便。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540205.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540205.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540205.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

3、MySQL的數據類型介紹

上一章節內容主要介紹了一些MySQL中對表和庫的增刪改查操作,對于上一章中對與表中字段的一些定義進行說明,本章主要介紹關于數據庫類型的一些定義。一、概述:MySQL數據庫中的數據大致可以分為以下幾類,從而實現數據庫在操作的時候…

[轉載] 必須要會回答的Java面試題(字符串篇)

參考鏈接: 比較Java中的兩個字符串String 最近很多學習java的小白問我字串相關的問題,覺得很有必要整理下,以方便初學者理解字符串以及應對今后面試中考官的提問。 如果你是有幾年Java開發經驗,可以根據目錄選擇性的閱讀以下內…

[轉載] java如何實現一個字符串的反轉和替換

參考鏈接&#xff1a; 反轉Java中的字符串String 一、java字符串的反轉 1.利用java字符串的拼接實現字符串的反轉&#xff0c;代碼如下&#xff1a; public static String reverse(String s){ int lens.length(); String str""; for (int i 0; i < len; i) { …

java 中的instanceof

java 中的instanceof 運算符是用來在運行時指出對象是否是特定類的一個實例。instanceof通過返回一個布爾值來指出&#xff0c;這個對象是否是這個特定類或者是它的子類的一個實例。 用法&#xff1a;result object instanceof class參數&#xff1a;Result&#xff1a;布爾類…

[轉載] 將一個整數型字符串轉換為一個整數

參考鏈接&#xff1a; Java中整數到字符串轉換的不同方法 package com.utl.string; /* * 將一組整數字符串轉換為整數 * 例&#xff1a;"234"轉換為整數型234 * 分析&#xff1a;涉及到許多問題&#xff0c;例如非法輸入&#xff0c;有正負號&#xff0c;是否為空字…

升級PowerShell至4.0版本

為了更好的使用Cmder v1.2&#xff0c;不得不升級PowerShell為4.0。 不知道Cmder的&#xff0c;可以點擊這里&#xff1a;https://github.com/cmderdev/cmder 和 逆天神器 cmder。 Powershell是運行在Windows機器上實現系統和應用程序管理自動化的命令行腳本環境。 需要.NET環境…

[轉載] 字符串太長 pep8_Python f字符串– PEP 498 –文字字符串插值

參考鏈接&#xff1a; 從Java中的字符串中刪除前導零 字符串太長 pep8 Python f-strings or formatted strings are the new way to format strings. This feature was introduced in Python 3.6 under PEP-498. It’s also called literal string interpolation. Python f字符…

備忘(持續更新。。。)

1、在springmvc這個框架里面&#xff0c;創建新的業務邏輯層&#xff0c;dao、service層至少需要一個接口&#xff0c;項目才能跑起來 2、獲取當前用戶桌面路徑 File desktopDir FileSystemView.getFileSystemView() .getHomeDirectory();String desktopPath desktopDir.getA…

[轉載] 字符串操作截取后面的字符串_對字符串的5個必知的熊貓操作

參考鏈接&#xff1a; 修剪Java中的字符串(刪除前導和尾隨空格) 字符串操作截取后面的字符串 We have to represent every bit of data in numerical values to be processed and analyzed by machine learning and deep learning models. However, strings do not usually co…

更改域控制器的計算機名

林功能級別必須為Windows Server 2003及以上 1. netdom computername Server08-1.contoso.com /add:08Server1.contoso.com 2. netdom computername Server08-1.contoso.com /makeprimary:08Server1.contoso.com 3. Restart your computer 4. netdom computername 08Server1.co…

[轉載] Google Java代碼規范

參考鏈接&#xff1a; 使用Java計算文本文件txt中的行數/單詞數/字符數和段落數 原文地址&#xff1a;https://google.github.io/styleguide/javaguide.html GIthub上GoogleCode風格的配置文件&#xff08;支持Eclipse IDE和IntelliJ IDE&#xff09;&#xff1a;https://git…

SQL PASS西雅圖之行——簽證篇

本人有幸通過IT168&itpub的站慶活動http://www.itpub.net/thread-1716961-1-1.html&#xff0c;并應微軟邀請參加了在西雅圖舉辦的The Conference for SQL Server Professionals&#xff08;簡稱SQL-PASS&#xff09;。 SQL-PASS會議計劃于2012年11月6日-9日舉行&#xff0…

[轉載] java8 lambda表達式 List轉為Map

參考鏈接&#xff1a; 使用Lambda表達式檢查字符串在Java中是否僅包含字母 public static void main(String[] args) { List<User> userList new ArrayList<User>(); User user0 new User("han1", "男1", 20); User user1 new User("…

11.python并發入門(part5 event對象)

一、引入event。 每個線程&#xff0c;都是一個獨立運行的個體&#xff0c;并且每個線程的運行狀態是無法預測的。 如果一個程序中有很多個線程&#xff0c;程序的其他線程需要判斷某個線程的運行狀態&#xff0c;來確定自己下一步要執行哪些操作。 threading模塊中的event對象…

[轉載] Java 將字符串首字母轉為大寫 - 利用ASCII碼偏移

參考鏈接&#xff1a; 使用ASCII值檢查Java中的字符串是否僅包含字母 將字符串name 轉化為首字母大寫。普遍的做法是用subString()取第一個字母轉成大寫再與之后的拼接&#xff1a; str str.substring(0, 1).toUpperCase() str.substring(1); 看到一種效率更高的做法&…

俞永福卸任阿里大文娛董事長,改任 eWTP 投資組長

兩天前&#xff08;11月13日&#xff09;&#xff0c;阿里文娛董事長俞永福離職的消息&#xff0c;在互聯網圈炸了鍋。但很快&#xff0c;俞本人就在微博做了澄清&#xff0c;并稱“永遠幸福&#xff0c;我不會離開”。然而就在今天&#xff08;11月15日&#xff09;&#xff0…

[轉載] java提取字符串中的字母數字

參考鏈接&#xff1a; 使用Regex檢查字符串在Java中是否僅包含字母 String str "adsf adS DFASFSADF阿德斯防守對方asdfsadf37《&#xff1f;&#xff1a;&#xff1f;%#&#xffe5;%#&#xffe5;%#$%#$%^><?1234"; str str.replaceAll("[^a-zA-…

snort的詳細配置

前一段一直在做snort入侵檢測系統的安裝以及配置&#xff0c;看了很多的網上資料&#xff0c;也算是總結了下前輩的經驗吧。需要的軟件包&#xff1a;1、httpd-2.2.6.tar.gz2、mysql-5.1.22-rc-linux-i686-icc-glibc23.tar.gz3、php-5.2.4.tar.bz24、acid-0.9.6b23.tar.gz5、ad…

[轉載] Java:獲取數組中的子數組的多種方法

參考鏈接&#xff1a; Java中的數組Array 我的個人博客&#xff1a;zhang0peter的個人博客 Java&#xff1a;從一個數組中創建子數組 使用Arrays.copyOfRange函數 Arrays.copyOfRange支持&#xff1a;boolean[]&#xff0c; byte[] &#xff0c;char[]&#xff0c;double…

[轉載] Java中Array(數組)轉List(集合類)的幾種方法

參考鏈接&#xff1a; Java中的數組類Array 1、循環。新建List類&#xff0c;循環填充。 2、利用Arrays類的靜態方法asList()。 Arrays.asList(T[])返回Arrays類的一個內部內List(T)&#xff0c;此類繼承自AbstractList&#xff0c;不可增刪。若想要一個可以增刪的List類&am…