06.mybatis中的連接池以及標(biāo)簽

mybatis中的連接池以及標(biāo)簽


mybatis測(cè)試表結(jié)構(gòu).png

一涌穆、mybatis中的事務(wù)

mybatis底層中從連接池等獲取的連接對(duì)象默認(rèn)是關(guān)閉了自動(dòng)提交(整合到Spring中默認(rèn)是開啟)监徘,項(xiàng)目生產(chǎn)中也建議這樣使用,根據(jù)業(yè)務(wù)需求提交事務(wù);,如果想關(guān)閉手動(dòng)提交,如下,獲得指定對(duì)象時(shí)設(shè)置自動(dòng)提交為true

InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
SqlSessionsession = factory.openSession(true);

二盔夜、Mybatis的動(dòng)態(tài)sql語句

需要傳入的參數(shù)為pojo,因?yàn)榻馕鰳?biāo)簽的底層是依賴pojo的get方法的堤魁!
當(dāng)然喂链,也可以傳入一個(gè)Map集合,key就對(duì)應(yīng)為變量名妥泉!

1.<if>標(biāo)簽

比如椭微,查詢是,根據(jù)id或者username的取值是否為空選擇具體的查詢語句盲链。<if>標(biāo)簽的 test 屬性中寫的是對(duì)象的屬性名蝇率,如果是包裝類的對(duì)象要使用 OGNL 表達(dá)式的寫法。另外要注意 where 1=1 的作用~刽沾!

  1. dao
public interface UserDao {
    /**  根據(jù)user信息進(jìn)行查詢 */
    public List<User> findByUser(User user);
}
  1. UserDao.xml
<select id="findByUser" parameterType="User" resultType="User">
    select * from user where 1 = 1
    <if test="username != null and username != ''">
        and username like #{username}
    </if>
    <if test="address != null">
        and address like #{address}
    </if>
</select>
  1. 測(cè)試類略

2.<where>標(biāo)簽 -- where!

使用where標(biāo)簽時(shí)本慕,可以不用1=1這種操作;where 元素只會(huì)在至少有一個(gè)子元素的條件返回 SQL 子句的情況下才去插入“WHERE”子句。而且侧漓,若語句的開頭為“AND”或“OR”锅尘,where 元素會(huì)將它們?nèi)コ?/p>

UserDao.xml

    <select id="findByUser" parameterType="User" resultType="User">
        select * from user
        <where>
            <if test="username != null and username != ''">
                and username like #{username}
            </if>
            <if test="address != null">
                and address like #{address}
            </if>
        </where>
    </select>

3. <foreach>標(biāo)簽

適用于集合查詢

參數(shù) 作用
collection 代表要遍歷的集合元素,注意編寫時(shí)不要寫#{}
open 代表語句的開始
close 代表語句的結(jié)束
item 代表遍歷集合的每個(gè)元素布蔗,生成的變量名
separator 代表分隔符
  1. 集合pojo QueryVo
public class QueryVo implements Serializable {

    private List<Integer> ids;

    public List<Integer> getIds() {
        return ids;
    }

    public void setIds(List<Integer> ids) {
        this.ids = ids;
    }
}
  1. dao
    /** 根據(jù)集合查詢 */
    public List<User> findInIds(QueryVo vo);
  1. UserDao.xml
    <select id="findInIds" parameterType="QueryVo" resultType="User">
        select * from user
        <where>
            <if test="ids != null and ids.size() > 0">
                <foreach collection="ids" open="id in ( " close=")" item="uid" separator=",">
                    #{uid}
                </foreach>
            </if>
        </where>
    </select>
  1. 測(cè)試類
...
UserDao userDao = session.getMapper(UserDao.class);
List<Integer> ids = new ArrayList<Integer>();
ids.add(41); ids.add(42); ids.add(43);
QueryVo vo = new QueryVo();
vo.setIds(ids);
List<User> users = userDao.findInIds(vo);
for (User user : users) {
    System.out.println(user);
}

4. mybatis中簡化編寫的sql片段

Sql 中可將重復(fù)的 sql 提取出來藤违,使用時(shí)用 include 引用即可,最終達(dá)到 sql 重用的目的何鸡。

<sql id="defaultSql">
    select * from user
</sql>

<select id="findByUser" parameterType="User" resultType="User">
    <include refid="defaultSql"></include>
    <where>
        <if test="username != null and username != ''">
            and username like #{username}
        </if>
        <if test="address != null">
            and address like #{address}
        </if>
    </where>
</select>

5. mybatis動(dòng)態(tài)SQL拓展

  1. https://blog.csdn.net/wt_better/article/details/80992014

  2. 動(dòng)態(tài)SQL官方文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末纺弊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子骡男,更是在濱河造成了極大的恐慌,老刑警劉巖傍睹,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隔盛,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡拾稳,警方通過查閱死者的電腦和手機(jī)吮炕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來访得,“玉大人龙亲,你說我怎么就攤上這事陕凹。” “怎么了鳄炉?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵杜耙,是天一觀的道長。 經(jīng)常有香客問我拂盯,道長佑女,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任谈竿,我火速辦了婚禮团驱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘空凸。我一直安慰自己嚎花,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布呀洲。 她就那樣靜靜地躺著贩幻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪两嘴。 梳的紋絲不亂的頭發(fā)上丛楚,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音憔辫,去河邊找鬼趣些。 笑死,一個(gè)胖子當(dāng)著我的面吹牛贰您,可吹牛的內(nèi)容都是我干的坏平。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼锦亦,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼舶替!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起杠园,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤顾瞪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后抛蚁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陈醒,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年瞧甩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钉跷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肚逸,死狀恐怖爷辙,靈堂內(nèi)的尸體忽然破棺而出彬坏,到底是詐尸還是另有隱情,我是刑警寧澤膝晾,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布栓始,位于F島的核電站,受9級(jí)特大地震影響玷犹,放射性物質(zhì)發(fā)生泄漏混滔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一歹颓、第九天 我趴在偏房一處隱蔽的房頂上張望坯屿。 院中可真熱鬧,春花似錦巍扛、人聲如沸领跛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吠昭。三九已至,卻和暖如春胧瓜,著一層夾襖步出監(jiān)牢的瞬間矢棚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國打工府喳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蒲肋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓钝满,卻偏偏與公主長得像兜粘,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子弯蚜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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