Mybatis 的使用(集成Spring山卦、SpringBoot)

Mybatis 的使用(集成Spring梅猿、SpringBoot)

昨天在學習項目工程時發(fā)現(xiàn)項目對mybatis用的還是挺多的氓辣,之前也是有用過,覺得還是自己做下筆記記錄一下袱蚓。Mybatis是一個數(shù)據訪問層框架钞啸,和大多數(shù)同類框架一樣,Mybatis節(jié)省了開發(fā)人員使用jdbc底層操作數(shù)據庫很大一部分代碼喇潘,使用mybatis体斩,開發(fā)人員只需要將sql寫在配置文件中,并聲明該sql返回值和java類型的映射即可颖低。當然mybatis還支持針對接口編程絮吵,如果你把mybatis和spring兩者做一個集成,你將發(fā)現(xiàn)你無須為接口聲明實現(xiàn)類就可以操作數(shù)據庫忱屑,而你需要做的函卒,只是在xml文件中做相關聲明告訴mybatis即可奖年,mybatis底層會幫我們處理和數(shù)據庫的鏈接等操作。

下面我不會講解mybatis的相關理論知識,因為官網其實說的很明白了绘沉,而我需要做的,只是從3個應用方式層面展開講解疚颊,這3個層面分別是編程方式使用mybatis,基于注解使用mybatis,spring集成mybatis霜瘪,所有工程均采用maven進行構建。

為了方便演示食店,在此我貼出相關數(shù)據庫腳本和一些公共的組件如(mapper接口):

create database test;CREATE TABLE `test`.`student` ( `id` INT NOT NULL AUTO_INCREMENT, `NAME` VARCHAR(45) NULL, `AGE` INT NULL, `ADDRESS` VARCHAR(45) NULL, PRIMARY KEY (`id`), UNIQUE INDEX `id_UNIQUE` (`id` ASC));

StudentMapper.java接口

package com.wokao666.mappers;import java.util.List;import java.util.Map;import com.wokao666.entity.Student;/** * * The class StudentMapper. * * Description:學生mapper * * @author: huangjiawei * @since: 2018年6月7日 * @version: $Revision$ $Date$ $LastChangedBy$ * */public interface StudentMapper { public Student getById(Map param); public List listStudents();}

實體類Student.java

package com.wokao666.entity;/** * * The class Student. * * Description:學生實體類 * * @author: huangjiawei * @since: 2018年6月7日 * @version: $Revision$ $Date$ $LastChangedBy$ * */public class Student { private int id; public int getId() { return id; } public void setId(int id) { this.id = id; } private String name; private String address; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public int getAge() { return age; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", address=" + address + ", age=" + age + "]"; } public void setAge(int age) { this.age = age; } public Student(int id, String name, String address, int age) { super(); this.id = id; this.name = name; this.address = address; this.age = age; } public Student() { }}

StudentMapper.xml

select * from Student where id = #{id}; select * from Student;

mybatis-config.xml

一渣淤、使用mybatis編程方式操作數(shù)據庫

在mybatis中赏寇,程序的構建式通過一個叫SqlSessionFactory開始的,SqlSessionFactory可以通過SqlSessionFactoryBuilder進行構建价认,SqlSessionFactoryBuilder支持從一個配置文件流中進行構建嗅定。

pom.xml

4.0.0 mybatisTest mybatisTest 0.0.1-SNAPSHOT jar mybatisTest 1.8 org.mybatis mybatis 3.4.6 mysql mysql-connector-java 8.0.11

Test.java

package com.wokao666.test;import java.io.IOException;import java.io.InputStream;import java.util.Arrays;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import com.wokao666.entity.Student;import com.wokao666.mappers.StudentMapper;/** * * The class Test. * * Description:編程方式使用mybatis * * @author: huangjiawei * @since: 2018年6月8日 * @version: $Revision$ $Date$ $LastChangedBy$ * */public class Test {public static void main(String[] args) throws IOException { //讀取我們的配置文件 InputStream input = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(input); // 打開一個會話session SqlSession session = factory.openSession(); // 構建查詢參數(shù) Map paramMap = new HashMap(); paramMap.put("id", 2); //測試使用id獲取一條記錄 Student stu = session.selectOne("getById", paramMap); System.err.println(stu.toString()); // 測試使用命名空間查詢一條記錄(接口) StudentMapper mapper = session.getMapper(StudentMapper.class); System.err.println(mapper.getById(paramMap)); // 測試獲取一個列表 List stuList = session.selectList("listStudents"); System.err.println(Arrays.toString(stuList.toArray())); }}

程序輸出

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.Fri Jun 08 14:50:11 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.Student [id=2, name=Mike, address=浙江省, age=24]Student [id=2, name=Mike, address=浙江省, age=24][Student [id=1, name=HUANGJIAWEI, address=廣東省, age=23], Student [id=2, name=Mike, address=浙江省, age=24]]

二、基于注解的mybatis

這篇博客只是演示了對于簡單sql的使用用踩,像那些復雜的sql(如關聯(lián)查詢join)等渠退,官網有做相關講解,后續(xù)小編也可能會進行總結脐彩。因為我們都知道碎乃,mybatis推薦我們將sql語句寫到各種mapper.xml中,當我們的業(yè)務非常龐大時惠奸,系統(tǒng)中無疑就會有很多我們新建的各種xml文件梅誓,當然我們更希望xml文件越少越好,因此佛南,mybatis支持開發(fā)者使用基于接口和注解的方式使用mybatis,對于一些簡單的sql而言梗掰,我們沒有必要將它寫在xml文件中,相反我們更加推薦將簡單的sql寫在注解中嗅回,而復雜的sql交給xml文件管理及穗。

下面我將演示兩種基于注解使用mybatis的方式,一種是改寫第一種基于編程的方式绵载,第二種將使用spring-boot來集成mybatis埂陆,當然,第二種方式會更加地實用尘分,更加貼近我們的真實開發(fā)猜惋,或者說跟多開發(fā)者本來就是這么用的,哈哈培愁!

1著摔、基于編程方式的注解使用

在StudentMapper.java接口中增加一個新方法,如下:

package com.wokao666.mappers;import java.util.List;import java.util.Map;import org.apache.ibatis.annotations.Select;import com.wokao666.entity.Student;/** * * The class StudentMapper. * * Description:學生mapper * * @author: huangjiawei * @since: 2018年6月7日 * @version: $Revision$ $Date$ $LastChangedBy$ * */public interface StudentMapper { // 此處將sql寫在接口的注解上定续,簡單粗暴 @Select("select * from Student where id=1") public Student get(); public Student getById(Map param); public List listStudents();}

然后在第一小結的Test.java最后加上這一行代碼即可谍咆。

System.err.println(mapper.get());

2、基于spring-boot使用mybatis

代碼下載地址: github.com/SmallerCode…

工程結構圖如下:

該工程分為三層私股,即controller摹察、service和dao層,即傳統(tǒng)的mvc模型倡鲸。

導入工程之后啟動MybatisDemoApplication.java類供嚎,然后瀏覽器輸入http://localhost:7000/get.json?id=1即可!

三、集成Spring

任何時候克滴,當我們在應用代碼層面對數(shù)據庫進行操作時逼争,我們首先要做的,那么就是配置一個合適的數(shù)據源劝赔,數(shù)據源可以很簡單的配置jdbc的url誓焦、driver、username着帽、password等參數(shù)杂伟,當然更高級的做法是我們可以采用像c3p0、druid這樣的數(shù)據庫連接池來管理我們的數(shù)據源仍翰,在此處赫粥,小編采用阿里巴巴提供的連接池druid。

Spring集成mybatis最關鍵的就是加入一個依賴包歉备,即:

org.mybatis mybatis-spring 1.3.1

最后總結下傅是,mybatis就是一個數(shù)據訪問框架,大體上其特性就是盡可能減少寫底層jdbc鏈接的代碼蕾羊,同時,對于數(shù)據庫實體和java對象之間的映射帽驯,mybatis也幫我們完成了龟再。當然,如果你想深入學習mybatis尼变,我建議你去mybatis官網系統(tǒng)學習利凑,mybatis功能很強大的,如果你的sql中需要進行條件判斷嫌术,mybatis運行你在mapper文件的sql中使用諸如標簽進行判斷哀澈,

如果想學習Java工程化、高性能及分布式度气、深入淺出割按。微服務、Spring磷籍,MyBatis适荣,Netty源碼分析的朋友可以加我的Java進階群:617434785,群里有阿里大牛直播講解技術院领,以及Java大型互聯(lián)網技術的視頻免費分享給大家弛矛。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市比然,隨后出現(xiàn)的幾起案子丈氓,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件万俗,死亡現(xiàn)場離奇詭異湾笛,居然都是意外死亡,警方通過查閱死者的電腦和手機该编,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門迄本,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人课竣,你說我怎么就攤上這事嘉赎。” “怎么了于樟?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵公条,是天一觀的道長。 經常有香客問我迂曲,道長靶橱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任路捧,我火速辦了婚禮关霸,結果婚禮上,老公的妹妹穿的比我還像新娘杰扫。我一直安慰自己队寇,他們只是感情好,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布章姓。 她就那樣靜靜地躺著佳遣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凡伊。 梳的紋絲不亂的頭發(fā)上零渐,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機與錄音系忙,去河邊找鬼诵盼。 笑死,一個胖子當著我的面吹牛笨觅,可吹牛的內容都是我干的拦耐。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼见剩,長吁一口氣:“原來是場噩夢啊……” “哼杀糯!你這毒婦竟也來了?” 一聲冷哼從身側響起苍苞,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤固翰,失蹤者是張志新(化名)和其女友劉穎狼纬,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骂际,經...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡疗琉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了歉铝。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盈简。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖太示,靈堂內的尸體忽然破棺而出柠贤,到底是詐尸還是另有隱情,我是刑警寧澤类缤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布臼勉,位于F島的核電站,受9級特大地震影響餐弱,放射性物質發(fā)生泄漏宴霸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一膏蚓、第九天 我趴在偏房一處隱蔽的房頂上張望瓢谢。 院中可真熱鬧,春花似錦驮瞧、人聲如沸恩闻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至破停,卻和暖如春翅楼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背真慢。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工毅臊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人黑界。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓管嬉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親朗鸠。 傳聞我的和親對象是個殘疾皇子蚯撩,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)烛占,斷路器胎挎,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • 最近做項目用到springboot整合mybatis犹菇,security德迹。將其中遇到的問題做一個總結 注:本項目全程...
    誰在烽煙彼岸閱讀 1,863評論 0 1
  • 好不容易來一趟人間 生活是好是壞都是一種體驗 美好世人都貪戀 一種味道的人生又有何趣 磨難如咖啡 ...
    lilly麈閱讀 157評論 0 0
  • 巴西老爺爺攝影展 快去看啊揭芍! 越過鄂畢河進入北極圈 要在冰上滑行31英里 這不是圣誕老人嘛 帝企鵝日記 跳海啦胳搞! ...
    a54c366077c3閱讀 514評論 0 0
  • 婚姻難結卻易碎肌毅,已經形成一種難以回天的局面。越來越多的小年輕列另,不高興就離婚芽腾,喜新厭舊就離婚。離婚也罷页衙,話不投機就動...
    姬鯤閱讀 172評論 0 1