亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

MyBatis學習筆記(二)快速入門

2019-11-10 17:31:55
字體:
來源:轉載
供稿:網友

轉載自:MyBatis之快速入門


1.MyBatis框架的引入

我們來看看傳統的編程方式中使用jdbc的問題:

1.數據庫連接頻繁的創建和關閉,缺點:浪費數據庫的資源,影響操作效率。解決方法:使用數據庫連接池如c3p0.2.sql語句是硬編碼(不利用系統維護),如果需求變更需要修改sql,這時候就需要修改java代碼,然后需要重新編譯,系統不易維護。解決方法:將sql語句統一配置在文件中。這樣以后修改sql時就不需要修改java代碼了。3.我們通過PReparedStatement對象向占位符設置參數,存在硬編碼(參數位置、參數)問題,系統不易維護。解決方法:將sql中的占位符及對應的參數類型配置在配置文件中,能夠自動輸入的映射。4.遍歷查詢結果集存在硬編碼(列名)。解決方法:自動進行sql查詢結果向java對象的映射(輸出映射)。

2.MyBatis介紹

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

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

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


3.MyBatis架構

這里寫圖片描述 接下來我將通過對一張用戶表進行增、刪、改、查帶你快速入門MyBatis。


4.MyBatis快速入門

4.1準備開發環境

1.創建測試項目,普通java項目或是web項目都可。

2.導入jar包:mybatis-3.1.1.jar(低于這個版本的jar包需要導入很多依賴包)和MySQL-connection-java

3.創建數據庫和相應的表,SQL腳本如下:

create database mybatis;use mybatis;create table user(id int primary key auto_increment,username varchar(50),birthday date,sex varchar(20),address carchar(50));insert into user values(null,'xxw','1996-10-17','male',null);insert into user values(null,'wyr','1997-04-24','female',null);

到此,環境配置就告一段落。

4.2使用MyBatis查詢表中數據(通過id查詢)

1.添加Mybatis的配置文件SqlMapConfig.xml

在src目錄下創建一個SqlMapConfig.xml文件(文件名稱隨便起),內容如下:

這里寫圖片描述 2.定義表所需要的實體類User.java

代碼如下:

public class User{ private int id; private String username; private Date birthday; private String sex; private String address; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Date getBirthday(){ return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress(){ return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "domain.User{" + "id=" + id + ", username='" + username + '/'' + ", birthday=" + birthday + ", sex='" + sex + '/'' + ", address='" + address + '/'' + '}'; } }

3.定義操作user表的sql映射文件User.xml 這里我們沒將文件命名為userMapper.xml,后面我們會改。

User.xml文件內容如下:

這里寫圖片描述

在User.xml中寫SQL語句,在參數處使用占位符#{},應該注意的是大括號{}中傳入的數據應該與User.java中的屬性對應,文件中各個屬性的解釋見圖中注釋處。

4.在SqlMapConfig文件中注冊User.xml文件 在SqlMapConfig.xml中添加一個字段,并在里面傳入User.xml文件路徑。

這里寫圖片描述

整體結構如下:

這里寫圖片描述

5.接下來我們便可以借助上面MyBatis架構圖來編寫測試類了

這里寫圖片描述

注意,我是借助junit.jar包來編寫的測試類。輸出結果如下:

這里寫圖片描述

上面我們是通過id來對表進行查詢,接下來我要講講如何通過姓名來模糊查詢表。

4.3使用MyBatis根據用戶名模糊查詢用戶信息

1.需要在User.xml文件中添加如下字段:

這里寫圖片描述

此時,我們在傳入參數的地方不再使用占位符#{}而是使用${},二者區別如下:

#{}:1.表示一個占位符,向占位符輸入參數,mybatis自動進行java類型和jdbc類型的轉換。2.程序員不需要考慮參數的類型,比如:傳入字符串,mybatis最終拼接好的sql就是參數兩邊加單引號。3.#{}接收pojo(Plain Old Java Object Java數據對象)數據,可以使用OGNL(就是el表達式)解析出pojo的屬性值。${}:1.表示sql的拼接,通過接收參數,將參數的內容不加任何修飾拼接在sql中。2.{}也可以接收pojo數據,可以使用OGNL解析出pojo的屬性值。3.缺點:不能防止sql注入。

2.測試類代碼如下:

這里寫圖片描述

注意,此時我們通過name查詢出來的語句為多條,故此時我們應該選擇調用sqlsession對象的selectList()方法返回多條記錄,輸出我們查詢到的第一條記錄即可。若使用selectOne()方法,當返回的記錄為多條時就會發生異常。

這樣我們便完成了查詢時將sql結果輸出映射到Java對象中。那如何將Java對象輸入映射到sql語句中,接下來我們就來講通過MyBatis實現增、刪、改數據庫。

4.4使用MyBatis向表中插入一條記錄

1.在User.xml中添加如下字段:

這里寫圖片描述

貌似關鍵字為value和values都可以…

2.編寫測試類:

這里寫圖片描述

此時查看數據庫:

這里寫圖片描述

發現數據已被插入。

擴展:主鍵返回:

在測試類中,我們沒有給User對象的id屬性設置值,所以我們在測試類中嘗試輸出User對象的id時會輸出id=0,但是該對象通過輸入映射在數據庫中是有對應的id值的(因為我們為該字段設置了自增長屬性)。那么我們想輸出該對象在記錄中的id時,又該怎么做呢?只需在User.xml文件中的< insert>標簽中添加< selectKey>標簽即可,屬性解釋見圖:

這里寫圖片描述

此時我們在測試類中便可輸出該User對象插入在表中的記錄id值了。

這里我們由于在建表時設置了id字段為自增長,采用自增長的形式生成主鍵,所以我們在傳入User對象的id屬性時可以將該屬性設置為null。那么當我們使用uuid生成主鍵時又該怎么做呢?

只需在User.xml中添加如下字段: 這里寫圖片描述

屬性值”before”的意思表示在執行插入操作時,會先調用uuid()函數生成uuid得到主鍵,然后將主鍵設置到User對象中,再將User對象插入到數據庫。所以此時我們在測試類中也可以不對User的id屬性進行設置值。

4.5使用MyBatis實現刪除表中數據

接下來的操作就很輕松了,因為跟上述操作差不多。

1.在User.xml文件中添加如下字段:

這里寫圖片描述

2.編寫測試類:

這里寫圖片描述

運行程序后便可發現數據庫中的該數據已被刪除。

4.6使用MyBatis實現更新表中數據

1.在User.xml文件中添加如下字段:

這里寫圖片描述

2.編寫測試類:

這里寫圖片描述

運行程序后便可發現數據庫中的該數據已被更新。


5.MyBatis開發流程小結

寫過上述代碼,我們便可以對MyBatis的開發流程進行一下總結了,流程如下:

1.編寫SqlMapConfig.xml2.編寫mapper.xml(每個字段定義一個statement)3.編程通過配置文件創建SqlSessionFactory4.通過SqlSessionFactory獲取SqlSession對象。5.通過SqlSession操作數據庫。(如果執行添加、更新、刪除需要調用SqlSession.commit())6.SqlSesion使用完成要關閉。

關于MyBatis配置的一些優化及高級知識請見我后面的文章。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美有码在线观看| 日韩av电影在线免费播放| 精品久久久久久| 亚洲一区美女视频在线观看免费| 久久精品国亚洲| 国产亚洲欧美视频| 欧美精品一二区| 岛国视频午夜一区免费在线观看| 在线播放精品一区二区三区| 亚洲第一精品夜夜躁人人躁| 亚洲电影中文字幕| 国产精品999999| 久久视频这里只有精品| 最好看的2019年中文视频| 欧美高清第一页| 欧美裸体男粗大视频在线观看| 日本精品久久中文字幕佐佐木| 久久九九免费视频| 欧美成人一区在线| 亚洲激情自拍图| 亚洲欧美国产制服动漫| 国产成人在线视频| 国产精品成人v| 日韩av综合网站| 亚洲高清一二三区| 久久国产色av| 欧美在线激情网| 国产在线98福利播放视频| 国产91免费观看| 亚洲午夜激情免费视频| 欧美性xxxxhd| 国产精品尤物福利片在线观看| 亚洲欧洲第一视频| 国产成人av网| 91精品综合久久久久久五月天| 国产欧美一区二区三区在线看| 欧美极品少妇xxxxⅹ喷水| 精品视频www| 亚洲精品福利资源站| 欧美日韩中文字幕| 国产精品久久久久av| 国产美女搞久久| 日韩在线观看免费| 不卡av日日日| 欧美性猛交xxxx乱大交| 亚洲欧美日韩直播| 欧美精品免费在线观看| 日韩精品电影网| 91精品免费看| 日本高清视频一区| 91av成人在线| 久久久亚洲天堂| 国产成人精品优优av| 精品五月天久久| 91色视频在线观看| 国产精品www网站| 日韩中文字幕网址| 亚洲美女性生活视频| 在线看片第一页欧美| 这里只有精品视频在线| 少妇精69xxtheporn| 欧美一级大片在线免费观看| 精品国产老师黑色丝袜高跟鞋| 久久久久久这里只有精品| 粉嫩av一区二区三区免费野| 国产精品丝袜视频| 欧美日韩国产成人在线| 日本午夜在线亚洲.国产| 亚洲一级一级97网| 国产精品主播视频| 国产精品久久久久久久美男| 国产精品普通话| 亚洲九九九在线观看| 精品少妇v888av| 欧美亚洲另类制服自拍| 亚洲精品一区二区三区婷婷月| 亚洲一级黄色av| 午夜美女久久久久爽久久| 精品国产乱码久久久久久虫虫漫画| 国产精品视频导航| 亚洲精品成人免费| 欧美精品手机在线| 欧美一级大胆视频| 日韩视频欧美视频| 在线观看久久av| 亚洲美女自拍视频| 国产成人精品久久久| 91精品免费视频| 日韩精品在线影院| 欧美大码xxxx| 日韩成人av在线播放| 欧美日韩高清在线观看| 综合136福利视频在线| 亚洲缚视频在线观看| 亚洲黄色在线观看| 97碰碰碰免费色视频| 亚洲综合最新在线| 国产精品国产三级国产专播精品人| 成人免费观看49www在线观看| 夜夜嗨av一区二区三区免费区| 久久99亚洲热视| 亚洲午夜国产成人av电影男同| 欧美寡妇偷汉性猛交| 性欧美激情精品| 91伊人影院在线播放| 亚洲a成v人在线观看| 国产精品美女www爽爽爽视频| 亚洲老头老太hd| 国产亚洲精品综合一区91| 色综合久久久久久中文网| 法国裸体一区二区| 久久成人精品一区二区三区| 日韩高清电影好看的电视剧电影| 欧美午夜激情小视频| 中文字幕在线看视频国产欧美在线看完整| 奇门遁甲1982国语版免费观看高清| 国产一区二区三区网站| 日韩精品中文字幕在线播放| 日本精品视频网站| 国产日韩在线视频| 在线亚洲国产精品网| 国产精品日韩在线播放| 国内成人精品视频| 欧美大片免费观看在线观看网站推荐| 91社影院在线观看| 国产成人在线一区二区| 国产成人亚洲综合91| 亚洲激情自拍图| 成人亲热视频网站| 久久免费国产精品1| 黑人巨大精品欧美一区免费视频| 国产第一区电影| 久久久精品视频成人| 日韩av手机在线观看| 欧美激情精品久久久久久大尺度| 欧美资源在线观看| 国产精品永久免费观看| 久久久久久久91| 97超碰国产精品女人人人爽| 久久国产精品影片| 一区二区在线视频播放| 91国在线精品国内播放| 国产91色在线免费| 成人福利网站在线观看11| 国产精品视频精品| 4438全国亚洲精品在线观看视频| 亚洲综合色激情五月| 亚洲xxxx视频| 欧美日韩成人精品| 日韩国产欧美区| 国产成人综合精品在线| 精品久久久久久亚洲国产300| 亚洲欧美一区二区三区四区| 日韩av在线网址| 亚洲成人免费在线视频| 精品久久久久久久久久久| 色综合久久88| 欧美国产日韩一区| 亚洲japanese制服美女| 在线播放国产一区二区三区| 国产精品三级美女白浆呻吟| 国产精品久久久久久久久久久新郎| 精品久久久久久亚洲精品| 92版电视剧仙鹤神针在线观看|