牛逼不跟!在阿里內(nèi)部流傳的Mybatis筆記終于流傳出來(lái)了,趕緊收藏

Mybatis大綱

什么是Mybatis框架

MyBatis 本是apache的一個(gè)開源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由apache software foundation 遷移到了google code锻煌,并且改名為MyBatis 。2013年11月遷移到Github 姻蚓。??MyBatis是一個(gè)半自動(dòng)的ORM框架??ORM: Object Relational Mapping (作用解決數(shù)據(jù)庫(kù)發(fā)展和面向?qū)ο蟀l(fā)展不一致的問題)宋梧。??O:面向?qū)ο??R:關(guān)系型數(shù)據(jù)庫(kù)??M:映射??半自動(dòng):myBatis框架是需要我們自己手寫sql語(yǔ)句??MyBatis框架不依賴于服務(wù)器

Mybatis依賴包

mysql驅(qū)動(dòng)包+mybatis的核心包+mybatis的依賴

其中核心包為mybatis.jar

依次從上到下包的作用ant編譯Java類,生成class文件狰挡,ant可以把相關(guān)層架構(gòu)成包java文件解析包.spring依賴這個(gè)包動(dòng)態(tài)代理包.mybatis不需編寫實(shí)現(xiàn)類日志包.spring依賴這個(gè)包字節(jié)碼解析助手,處理.class文件日志包mybatis核心包數(shù)據(jù)庫(kù)驅(qū)動(dòng)日志包

Mybatis.xml配置

<?xml version="1.0" encoding="UTF-8" ?>

PUBLIC"-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<!--? ? 讀取屬性文件-->

<!--? ? 指定mybatis中的日志類型-->

<!--? ? 給實(shí)體類配置別名-->

<!--? ? ? ? 給指定的類起別名-->

<!--? ? ? ? <typeAlias type="com.erwin.entity.Student" alias="student"></typeAlias>-->

<!--? ? ? ? 包下所有類的別名就是當(dāng)前類名? 首字母會(huì)調(diào)整為小寫-->

<!-- 配置數(shù)據(jù)庫(kù)環(huán)境-->

<!--Mysql數(shù)據(jù)庫(kù)連接-->

<!--Mybatis事務(wù)管理 目前的事務(wù)管理和JDBC中的事務(wù)保持一致-->

<!--? ? ? ? ? ? 底層使用連接池連接-->

<!--? ? 進(jìn)行mapper文件的掃描-->

<!--? ? ? ? resourse 表示XML所在的目錄-->

<!--? ? ? 掃描包下的所有接口捂龄,然后去找和接口相同名字的XML-->

其中jdbc.properties書寫如下

m_driver=com.mysql.cj.jdbc.Driver

m_url=jdbc:mysql://localhost:3306/mybatis?verifyServerCertificate=false&useSSL=false&serverTimezone=UTC

m_user=root

m_pwd=

Mybatis配置屬性說(shuō)明

全局配置文件mybatis.xml

default配置當(dāng)前所使用的環(huán)境.值必須是的id值释涛,可以有多個(gè)標(biāo)簽.

聲明可能使用的環(huán)境,會(huì)被引用

事務(wù)管理器類型.

type屬性可取值:

JDBC 底層事務(wù)與JDBC原有事務(wù)管理相同

MANAGED? MyBatis不去管理事務(wù),交給其他容器進(jìn)行管理.

POOLED : 使用連接池技術(shù). 訪問頻率比較高時(shí)使用.連接池的使用可以降低服務(wù)器壓力,提高連接對(duì)象重用性

UNPOOLED: 不使用連接池技術(shù).每次對(duì)數(shù)據(jù)庫(kù)訪問時(shí)打開數(shù)據(jù)庫(kù)連接,訪問結(jié)束后關(guān)閉數(shù)據(jù)庫(kù)連接.

JNDI : java命名目錄接口.數(shù)據(jù)庫(kù)的連接可以依賴于其他技術(shù)或應(yīng)用.

常用屬性

resource="com/bjsxt/xxx.xml" 加載項(xiàng)目中資源,目錄尋找,中間是/

url="" 加載互聯(lián)網(wǎng)或本機(jī)的配置文件.示例如下:

配置Mapper層xml文件

<?xml version="1.0" encoding="UTF-8" ?>

PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--? ? id 方法名稱-->

<!--? ? resultType 返回值類型

? ? ? ? 如果返回值是一個(gè)對(duì)象,就寫對(duì)象所在包的全路徑

? ? ? ? 如果返回值是一個(gè)集合倦沧,這個(gè)時(shí)候書寫集合的泛型

-->

<!--? ? 注意student是配置在mybatis.xml中的別名唇撬,完整路徑為com.erwin.entity.Student-->

select * from student

mapper.xml 中標(biāo)簽解釋

中namespace=""值相當(dāng)于接口名

id 屬性: 相當(dāng)于方法名

resultType屬性:返回值類型,如果返回值是集合,寫集合的泛型.

parameterType屬性:參數(shù)類型.如果沒有參數(shù)省略該屬性.

其中Student類為Pojo,定義如下:

packagecom.erwin.entity;

importjava.io.Serializable;

publicclassStudentimplementsSerializable{

privateintid;

privateString name;

privateString gender;

publicStudent(intid, String name, String gender){

this.id = id;

this.name = name;

this.gender = gender;

}

publicStudent(){

}

publicintgetId(){

returnid;

}

publicvoidsetId(intid){

this.id = id;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(String name){

this.name = name;

}

publicStringgetGender(){

returngender;

}

publicvoidsetGender(String gender){

this.gender = gender;

}

@Override

publicStringtoString(){

return"Student{"+

"id="+ id +

", name='"+ name +'\''+

", gender='"+ gender +'\''+

'}';

}

}

最基本的調(diào)用方式

packagecom.erwin.test;

importcom.erwin.entity.Student;

importorg.apache.ibatis.io.Resources;

importorg.apache.ibatis.session.SqlSession;

importorg.apache.ibatis.session.SqlSessionFactory;

importorg.apache.ibatis.session.SqlSessionFactoryBuilder;

importjava.io.IOException;

importjava.io.InputStream;

importjava.util.List;

publicclassTestA{

publicstaticvoidmain(String[] args)throwsIOException{

//[a] 解析mybatis.xml

? ? ? ? InputStream resourceAsStream = Resources.getResourceAsStream("com/erwin/mybatis.xml");

? ? ? ? //[b]獲得Session工廠

? ? ? ? SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resourceAsStream,"mysql");

? ? ? ? //[c]獲得Session對(duì)象

? ? ? ? SqlSession sqlSession = factory.openSession();

? ? ? ? //[d]調(diào)用Sql方法

? ? ? ? List<Student> students = sqlSession.selectList("erwin.selectAll");

? ? ? ? //[e]關(guān)閉資源

? ? ? ? sqlSession.close();

? ? ? ? System.out.println(students.get(0));

? ? }

}

日志文件的配置

#指定全局打印的級(jí)別和輸出

log4j.rootCategory=error, CONSOLE,LOGFILE

#指定erwinnamespace= debug展融,并打印

log4j.logger.erwin=debug

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout

log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n

# LOGFILE issetto be a File appenderusinga PatternLayout.

log4j.appender.LOGFILE=org.apache.log4j.FileAppender

log4j.appender.LOGFILE.File=d:/log/0813.log

log4j.appender.LOGFILE.Append=true

log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout

log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末窖认,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子告希,更是在濱河造成了極大的恐慌扑浸,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件燕偶,死亡現(xiàn)場(chǎng)離奇詭異喝噪,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)指么,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門酝惧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人涧尿,你說(shuō)我怎么就攤上這事系奉。” “怎么了姑廉?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵缺亮,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我桥言,道長(zhǎng)萌踱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任号阿,我火速辦了婚禮并鸵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扔涧。我一直安慰自己园担,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布枯夜。 她就那樣靜靜地躺著弯汰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪湖雹。 梳的紋絲不亂的頭發(fā)上咏闪,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音摔吏,去河邊找鬼鸽嫂。 笑死纵装,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的据某。 我是一名探鬼主播橡娄,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼哗脖!你這毒婦竟也來(lái)了瀑踢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤才避,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后氨距,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桑逝,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年俏让,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了楞遏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡首昔,死狀恐怖寡喝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情勒奇,我是刑警寧澤预鬓,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站赊颠,受9級(jí)特大地震影響格二,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜竣蹦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一顶猜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧痘括,春花似錦长窄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至驰后,卻和暖如春肆资,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灶芝。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛀序,地道東北人柔逼。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像属愤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酸役,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355