mybaties總結+hibernate總結

一、對原生態jdbc程序中問題總結

1.1 jdbc程序

需求:使用jdbc查詢mysql數據庫中用戶表的記錄

statement:向數據庫中發送一個sql語句

預編譯statement:好處:提高數據庫性能。

   預編譯statement向數據庫中發送一個sql語句,數據庫編譯sql語句,并把編譯的結果保存在數據庫磚的緩存中。下次再發sql時,如果sql相同,則不會再編譯,直接使用緩存中的。

jdbc編程步驟:

1. 加載數據庫驅動

2. 創建并獲取數據庫鏈接

3. 創建jdbc statement對象

4. 設置sql語句

5. 設置sql語句中的參數(使用preparedStatement)

6. 通過statement執行sql并獲取結果

7. 對sql執行結果進行解析處理

8. ?釋放資源(resultSet、preparedstatement、connection)

?

復制代碼
復制代碼
public class JDBCTest {public static void main(String[] args) {Connection connection = null;// 預編譯的Statement,使用預編譯的Statement提高數據庫性能PreparedStatement preparedStatement = null;ResultSet resultSet = null;try {// 加載數據庫驅動Class.forName("com.mysql.jdbc.Driver");// 通過驅動管理類獲取數據庫鏈接connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8","root", "root");// 定義sql語句 ?表示占位符String sql = "select * from t_user where username = ?";//獲取預處理statementpreparedStatement = 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) {e.printStackTrace();}}}}
}
復制代碼
復制代碼

?

1.2問題總結

上面代碼的問題總結:

1.數據庫連接,使用時就創建,不使用就釋放,對數據庫進行頻繁的連接開啟和關閉,造成數據庫資源浪費,影響數據庫性能。

  解決方案:使用數據庫連接池管理數據庫連接。

2.將sql語句硬編碼到Java代碼中,如果sql語句修改,需要重新編譯java代碼,不利于系統維護。

  解決方案:將sql語句配置在xml配置文件中,即使sql變化,不需要對Java代碼進行重新編譯。

?

?

2.MyBatis框架

2.1MyBatis是什么?

MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,并且改名為MyBatis,實質上Mybatis對ibatis進行一些改進。

MyBatis是一個優秀的持久層框架,它對jdbc的操作數據庫的過程進行封裝,使開發者只需要關注 SQL 本身,而不需要花費精力去處理例如注冊驅動、創建connection、創建statement、手動設置參數、結果集檢索等jdbc繁雜的過程代碼。

Mybatis通過xml或注解的方式將要執行的各種statement(statement、preparedStatemnt、CallableStatement)配置起來,并通過java對象和statement中的sql進行映射生成最終執行的sql語句,最后由mybatis框架執行sql并將結果映射成java對象并返回。

轉載于:https://www.cnblogs.com/ycmxm/p/7161246.html

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

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

相關文章

客戶旅程_我如何充分利用freeCodeCamp的旅程

客戶旅程by Catherine Vassant (aka Codingk8)由凱瑟琳瓦森(Catherine Vassant)(又名Codingk8) 我如何充分利用freeCodeCamp的旅程 (How I made the most out of my freeCodeCamp journey) 我的路線圖? ?超越課程范圍的reeCodeCamp (My road map ?? to freeCode…

Python14 函數

函數 面向對象編程: 類----class 面向過程編程:過程---def 函數式編程:函數---def def test(x):描述x 1return x#def是定義函數的關鍵字#test是函數名稱#(x)是參數#x1是 函數體,是一段邏輯代碼#return 定義…

學習sql注入:猜測數據庫_面向數據科學家SQL:學習簡單方法

學習sql注入:猜測數據庫We don’t pick a hammer and look for nails — that would be an unusual way of solving problems. The usual way of doing business is to identify the problem first, then look for appropriate tools.我們不用錘子找釘子,那是解決問…

android 百度地圖3.0,android 百度地圖3.0

一:為地圖設置事件注意新版本中要有一個getMapmMapView.getMap().setOnMapStatusChangeListener(listener);OnMapStatusChangeListener listener newOnMapStatusChangeListener() {/*** 手勢操作地圖,設置地圖狀態等操作導致地圖狀態開始改變。* param s…

(摘錄)sockaddr與sockaddr_in,sockaddr_un結構體詳細講解

struct sockaddr { unsigned short sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 bytes of protocol address */ }; sa_family是地址家族,一般都是“AF_xxx”的形式。好像通常大多用的是都是AF_INET。 sa_data是14字節協議…

數據挖掘—K-中心點聚類算法(Java實現)

K-中心點聚類算法 (1)任意選擇k個對象作為初始的簇中心點 (2)指派每個剩余對象給離他最近的中心點所表示的簇 (3)選擇一個未被選擇的中心點直到所有的中心點都被選擇過 (4)選擇一個…

使用akka構建高并發程序_如何使用Akka Cluster創建簡單的應用程序

使用akka構建高并發程序If you read my previous story about Scalachain, you probably noticed that it is far from being a distributed system. It lacks all the features to properly work with other nodes. Add to it that a blockchain composed by a single node is…

pandas之數值計算與統計

數值計算與統計 對于DataFrame來說,求和、最大、最小、平均等統計方法,默認是按列進行統計,即axis 0,如果添加參數axis 1則會按照行進行統計。 如果存在空值,在統計時默認會忽略空值,如果添加參數skipna …

python自動化數據報告_如何:使用Python將實時數據自動化到您的網站

python自動化數據報告This tutorial will be helpful for people who have a website that hosts live data on a cloud service but are unsure how to completely automate the updating of the live data so the website becomes hassle free. For example: I host a websit…

一顆站在技術邊緣的土豆

2012年開始上專業課,2013年打了一年游戲,年底專業課忘光了,但是蒙混過關沒掛科,2014年7月份畢業,對這個社會充滿向往。2014年9月份——方正代理商做網絡安全公司。2015年3月份跳槽到一家vmware代理商公司。2016年6月&a…

leetcode 839. 相似字符串組(并查集)

如果交換字符串 X 中的兩個不同位置的字母,使得它和字符串 Y 相等,那么稱 X 和 Y 兩個字符串相似。如果這兩個字符串本身是相等的,那它們也是相似的。 例如,“tars” 和 “rats” 是相似的 (交換 0 與 2 的位置); “r…

android intent參數是上次的結果,【Android】7.0 Intent向下一個活動傳遞數據、返回數據給上一個活動...

1.0 可以利用Intent吧數據傳遞給上一個活動,新建一個叫“hellotest01”的項目。新建活動FirstActivity,勾選“Generate Layout File”和“Launcher Activity”。image修改AndroidMainifest.xml中的內容:android:name".FirstActivity&quo…

實習一年算工作一年嗎?_經過一年的努力,我如何找到軟件工程工作

實習一年算工作一年嗎?by Andrew Ngo通過安德魯恩戈 經過一年的努力,我如何找到軟件工程工作 (How I landed a software engineering job after a year of hard work) Many of us think the path to becoming a software engineer requires years of education an…

學習深度學習需要哪些知識_您想了解的有關深度學習的所有知識

學習深度學習需要哪些知識有關深層學習的FAU講義 (FAU LECTURE NOTES ON DEEP LEARNING) Corona was a huge challenge for many of us and affected our lives in a variety of ways. I have been teaching a class on Deep Learning at Friedrich-Alexander-University Erlan…

參加開發競賽遇到的問題【總結】

等比賽完就寫。 轉載于:https://www.cnblogs.com/jiangyuanjia/p/11261978.html

html5--3.16 button元素

html5--3.16 button元素 學習要點 掌握button元素的使用button元素 用來建立一個按鈕從功能上來說,與input元素建立的按鈕相同button元素是雙標簽,其內部可以配置圖片與文字,進行更復雜的樣式設計不僅可以在表單中使用,還可以在其…

如何注冊鴻蒙id,鴻蒙系統真機調試證書 和 設備ID獲取

鴻蒙系統真機調試創建項目創建項目創建應用創建鴻蒙應用(注意,測試階段需要發郵件申請即可)關聯應用項目進入關聯 添加引用準備調試使用的 p12 和證書請求 csr使用以下命令// 別名"test"可以修改,但必須前后一致,密碼請自行修改key…

Java—實現 IOC 功能的簡單 Spring 框架

編寫一個實現 IOC 功能的簡單 Spring 框架,包含對象注冊、對象管理、及暴 露給外部獲取對象的功能,并編寫測試程序。擴展注冊器的方式,要求采用 XML 和 txt 文件。 源代碼 package myspring;import java.lang.reflect.Method; import java.…

讀zepto核心源碼學習JS筆記(3)--zepto.init()

上篇已經講解了zepto.init()的幾種情況,這篇就繼續記錄這幾種情況下的具體分析. 1. 首先是第一種情況,selector為空 既然是反向分析,那我們先看看這句話的代碼; if (!selector) return zepto.Z() 這里的返回值為zepto.Z();那我們繼續往上找zepto.Z()函數 zepto.Z function(dom…

css flexbox模型_Flexbox和CSS Grid之間的主要區別

css flexbox模型by Shaira Williams由莎拉威廉姆斯(Shaira Williams) Flexbox和CSS Grid之間的主要區別 (The main differences between Flexbox and CSS Grid) Dimensions define the primary demarcation between Flexbox and CSS Grid. Flexbox was designed specifically …