tkMybatis

? ? ? ?最近在項目中用到springBoot+tkMybatis涮母,在開發(fā)使用過程中遇到一些問題忆家,現(xiàn)在做下記錄總結(jié)庵芭。本文主要針對tkMybatis的使用進(jìn)行總結(jié)抑钟。

一涯曲、新增

?insert:根據(jù)對象T的屬性,生成插入語句在塔,并返回影響的行數(shù)

? ? ? ? ?備注:NULL字段也會插入進(jìn)行幻件;?但是需要指定該字段的jdbcType,否則拋出錯誤(Oracle是個奇葩蛔溃,其它好多數(shù)據(jù)庫都可以绰沥,不拋錯);如何指定字段的jdbcType城榛,參見高級用法揪利;如果T對象中有字段不想插入态兴,可以配置注解insertable=false;如果T對象中有字段不想插入狠持,可以配置注解Transient(該字段不參與自動生成語句);?

User user = newUser();

user.setId(101);

user.setUsername("admin");

user.setPassword("123456");

user.setEmail("");

userDAO.insert(user);

相當(dāng)于:insert into user(ID,username,password,email) values(101,'admin','123456','');

insertSelective:保存一個實(shí)體,null的屬性不會保存瞻润,會使用數(shù)據(jù)庫默認(rèn)值

? ? ? ? 備注:NULL字段不會被插入進(jìn)去喘垂,因此對象T的屬性不要使用8大簡單類型甜刻;需要使用其包裝類,我們實(shí)際環(huán)境運(yùn)用中常常是該函數(shù)(空屬性不插入)正勒;其余特性和insert相同得院;

二、刪除

delete:根據(jù)對象T的參數(shù)章贞,進(jìn)行絕對匹配祥绞,并刪除該記錄返回刪除的行數(shù)

? ? ? ? 備注:該方法如果入?yún)閚ull,則刪除的是表的所有數(shù)鸭限;該方法如果入?yún)閚ew T()蜕径,則刪除的是表的所有數(shù);條件采用的是絕對匹配败京;如果配置參數(shù)safeDelete沒有指定兜喻,是不允許空條件刪除,會拋錯(參加高級參數(shù)配置部分)赡麦;

deleteByPrimaryKey:根據(jù)主鍵對象朴皆,進(jìn)行刪除該主鍵所表述的記錄,并返回刪除的行數(shù)

? ? ? ? 備注:?如果<T>是單主鍵泛粹,那么直接傳遞主鍵對象即可遂铡,例如long、String等晶姊;如果<T>是復(fù)合主鍵忧便,可以傳遞<T>對象,對象的復(fù)合主鍵都存在值帽借;或者傳遞Map珠增,其中key為復(fù)合主鍵的key,也是可以的砍艾;復(fù)合主鍵情況用的較少蒂教;

userDAO.deleteByPrimaryKey(101);?

相當(dāng)于:delete?from?user?where?id=101?

三、修改

updateByPrimaryKey:根據(jù)對象T的參數(shù)的主鍵數(shù)據(jù)脆荷,進(jìn)行更新該記錄

? ? ? ? 備注:主鍵數(shù)據(jù)必須存在凝垛;如果T對象中的屬性為NULL,也會更新到數(shù)據(jù)庫中蜓谋,但需要設(shè)置jdbcType梦皮;(Oracle是個奇葩,其它好多數(shù)據(jù)庫都可以桃焕,不拋錯)剑肯;如何指定字段的jdbcType,參見高級用法观堂;如果T對象中有字段不想更新让网,可以配置注解updateable=false;如果T對象中有字段不想更新呀忧,可以配置注解Transient(該字段不參與自動生成語句);?

User?user?=new?User();?

user.setId(101);?

user.setUsername("joe");?

user.setPassword("joe");?

user.setEmail("");?

userDAO.updateByPrimaryKey(user);?

相當(dāng)于:update?user?set?username='joe',password='joe',email=''?where?id=101

updateByPrimaryKeySelective :根據(jù)對象T的參數(shù)的主鍵數(shù)據(jù),進(jìn)行更新該記錄

? ? ? ? 備注:主鍵數(shù)據(jù)必須存在溃睹;如果T對象中的屬性為NULL而账,不會更新到數(shù)據(jù)庫中;如果T對象中有字段不想更新因篇,可以配置注解updateable=false;如果T對象中有字段不想更新泞辐,可以配置注解Transient(該字段不參與自動生成語句);需要使用其包裝類,我們實(shí)際環(huán)境運(yùn)用中常常是該函數(shù)(空屬性不更新)竞滓;

User?user?=new?User();

user.setId(101);

user.setPassword("123456");

userDAO.updateByPrimaryKeySelective(user);

相當(dāng)于:update?user?set?password='123456'?where?id=101

updateByExample :

UserExample?example?=new?UserExample();

Criteria?criteria?=?example.createCriteria();

criteria.andIDEqualTo("101");

User?user?=new?User();

user.setPassword("123");

userDAO.updateByExample?(user,example);

相當(dāng)于:updateuser?set?password='123'?where?ID='101'

四铛碑、查詢

selectAll:查詢表中所有記錄,并返回<T>對象的集合

? ? ? ? 備注:該方法一般用于小表的全表查詢虽界,不適用于數(shù)據(jù)量達(dá)到或者超過K級別的情況

select:根據(jù)入?yún)⒌臈l件汽烦,進(jìn)行絕對匹配篩選,并返回<T>對象的集合

? ? ? ? 備注:該方法如果入?yún)閚ull莉御,則和selectAll的效果是一致的撇吞;該方法如果入?yún)ο蟠嬖冢瞧鋵傩远际莕ull礁叔,則和selectAll的效果是一致的牍颈;

selectByRowBounds :根據(jù)入?yún)⒌臈l件進(jìn)行分頁,進(jìn)行絕對匹配篩選琅关,并返回<T>對象的集合

? ? ? ? 備注:該方法與select一樣煮岁,只是重載了一個帶RowBounds的參數(shù)(不允許為null);因Mapper本身不支持方法重名涣易,因此就更換了函數(shù)名画机;如果外部分頁查詢是攔截RowBounds參數(shù)的,可以直接無縫對接新症;

selectOne :根據(jù)入?yún)⒌臈l件步氏,進(jìn)行絕對匹配篩選,并返回<T>對象

? ? ? ? 備注:該方法如果查詢到0-1個結(jié)果徒爹,則返回null或者<T>荚醒;如果該方法的條件查詢到多個,則拋出TooManyResultsException錯誤隆嗅;

selectCount :根據(jù)入?yún)⒌臈l件界阁,進(jìn)行絕對匹配篩選,并返回符合條件的結(jié)果總數(shù)

? ? ? ? 備注:該方法如果入?yún)閚ull胖喳,則返回的是表的記錄總數(shù)泡躯;條件采用的是絕對匹配;

selectByPrimaryKey :根據(jù)主鍵對象,查詢該主鍵所表示的<T>對象

? ? ? ? 備注:如果<T>是單主鍵精续,那么直接傳遞主鍵對象即可,例如long粹懒、String等重付;如果<T>是復(fù)合主鍵,可以傳遞<T>對象凫乖,對象的復(fù)合主鍵都存在值确垫;或者傳遞Map,其中key為復(fù)合主鍵的key帽芽,也是可以的删掀;復(fù)合主鍵情況用的較少;

? ? ? ? ?User?user?=?userDAO.selectByPrimaryKey(100);?

? ? ? ? 相當(dāng)于:select?*?from?user?where?id?=?100?

existsWithPrimaryKey :根據(jù)主鍵對象导街,判斷該主鍵所表示的<T>記錄是否存在

? ? ? ? 備注:和selectByPrimaryKey函數(shù)作用一致披泪,僅采用 0,1 結(jié)合rs.getBoolean來做返回值

5、時間查詢

在使用example進(jìn)行時間段查詢時搬瑰,需將時間轉(zhuǎn)換成與DB中對應(yīng)的時間格式字符串款票,然后再進(jìn)行查詢,否則會無法查詢到結(jié)果泽论。

例如:

Example.Criteria criteria = example.createCriteria();

if (null != layerBatchServiceDTO) {

SimpleDateFormat dateFormat =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

if (null != layerBatchServiceDTO.getStartTime()) {

? ? ? ? criteria.andGreaterThanOrEqualTo("createTime", dateFormat.format(layerBatchServiceDTO.getStartTime()));

? ? }

if (null != layerBatchServiceDTO.getEndTime()) {

? ? ? ? criteria.andLessThanOrEqualTo("createTime", dateFormat.format(layerBatchServiceDTO.getEndTime()));

? ? }

}

本文部分內(nèi)容參考:https://blog.csdn.net/sinat_38419207/article/details/82907387

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末艾少,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子翼悴,更是在濱河造成了極大的恐慌缚够,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹦赎,死亡現(xiàn)場離奇詭異谍椅,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)古话,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門毯辅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人煞额,你說我怎么就攤上這事思恐。” “怎么了膊毁?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵胀莹,是天一觀的道長。 經(jīng)常有香客問我婚温,道長描焰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮荆秦,結(jié)果婚禮上篱竭,老公的妹妹穿的比我還像新娘。我一直安慰自己步绸,他們只是感情好掺逼,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瓤介,像睡著了一般吕喘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刑桑,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天氯质,我揣著相機(jī)與錄音,去河邊找鬼祠斧。 笑死闻察,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的琢锋。 我是一名探鬼主播蜓陌,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吩蔑!你這毒婦竟也來了钮热?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤烛芬,失蹤者是張志新(化名)和其女友劉穎隧期,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赘娄,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仆潮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了遣臼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片性置。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖揍堰,靈堂內(nèi)的尸體忽然破棺而出鹏浅,到底是詐尸還是另有隱情,我是刑警寧澤屏歹,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布隐砸,位于F島的核電站,受9級特大地震影響蝙眶,放射性物質(zhì)發(fā)生泄漏季希。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望式塌。 院中可真熱鬧博敬,春花似錦、人聲如沸峰尝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽境析。三九已至囚枪,卻和暖如春派诬,著一層夾襖步出監(jiān)牢的瞬間劳淆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工默赂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沛鸵,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓缆八,卻偏偏與公主長得像曲掰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子奈辰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當(dāng)在唯一索引所對應(yīng)的列上鍵入重復(fù)值時栏妖,會觸發(fā)此異常。 O...
    我想起個好名字閱讀 5,176評論 0 9
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,790評論 0 11
  • width: 65%;border: 1px solid #ddd;outline: 1300px solid #...
    邵勝奧閱讀 4,764評論 0 1
  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查詢集API 參...
    陽光小鎮(zhèn)少爺閱讀 3,813評論 0 8
  • 不以改變結(jié)果為目的的批判就是無效的批判奖恰。 不提供解決方案的責(zé)備就是無用的責(zé)備吊趾。 放棄無效的責(zé)備和批判也是一種傳遞正...
    c9b61ef7747d閱讀 151評論 0 0