mybatis學(xué)習(xí)筆記一

[TOC]

框架技術(shù)

框架技術(shù).png

持久化

持久化1.png
持久化2.jpg

mybatis概念

  • 概念:一個持久層框架

  • 作用:ORM將sql語句映射成實(shí)體類

  • 特點(diǎn):巧靈活臼疫、半自動化找田、使用與中小型項(xiàng)目的開發(fā)

mybatis 入門

1.png

1嫂丙、創(chuàng)建mybatis-config.xml文件

<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/bank?useUnicode=true&characterEncoding=utf-8"/>
        <property name="username" value="root"/>
        <property name="password" value=""/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="UserMapper.xml"/>
  </mappers>
</configuration>

2际歼、創(chuàng)建映射文件

<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

  <mapper namespace="user">
    <select id="selectUser" resultType="com.hemi.mybatis.bean.User">
        select * from user where uid=1;
    </select>
  </mapper>

3逆趣、獲取xml配置文件

InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");

4、創(chuàng)建SqlSessionFactory

SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(inputStream);

5储藐、獲取SqlSession

SqlSession sqlSession = factory.openSession();

6、調(diào)用SqlSession的selectOne(命名空間.id名稱);

Object object = sqlSession.selectOne("user.selectUser");

7嘶是、關(guān)閉SqlSession

sqlSession.close();

增刪改

2.png
<insert id="insertUser" parameterType="com.hemi.mybatis.bean.User">
    <!-- 通過#{屬性名}來獲取對象的值 -->
    insert into user (username,password) values(#{username},#{password}); 
</insert>

<update id="updateUser" parameterType="com.hemi.mybatis.bean.User">
    update user set username=#{username},password=#{password} where uid=#{uid}
</update>

3.png
<delete id="deleteUser" parameterType="int">
    delete from user where uid=#{value}
</delete>

Mapper接口開發(fā)

一钙勃、定義一個接口

public interface TypeMapper {
    Type selectType(int typeid);
}

二、定義一個mapper.xml映射文件

mapper文件的要求:

1聂喇、namespace的值就是對象接口的全類名辖源,并且類名和xml文件名保持一致
2、id的值就是抽象方法
3、resultType的值必須和抽象方法的返回值一致
4克饶、parameterType的值和抽象方法的參數(shù)類型一致

注意 mapper.xml文件的約束是mapper.dtd酝蜒,不是config.dtd

三、使用

將mybatis入門步驟中的步驟六改為如下代碼:

TypeMapper mapper=sqlSession.getMapper(TypeMapper.class);
Type type=mapper.selectType(1);

動態(tài)sql

if

  SELECT * FROM good INNER JOIN type ON good.type = type.typeid where 1=1
    <if test="gname !=null and gname !=''">
      and gname like concat('%',#{gname},'%')
    </if>

注意:

1矾湃、字符串的拼接建議使用concat來代替${}

2亡脑、判斷條件中獲取數(shù)據(jù)不用加#{},與el表達(dá)式不一樣

where

作用where可以自動去除第一個and

 <where>
      <if test="gname !=null and gname !=''">
        and gname like concat('%',#{gname},'%')
      </if>
      <if test="typename !=null and typename!=''">
        and typename like concat('%',#{typename},'%')
      </if>
    </where>

choose when otherwise

作用:組合使用洲尊,相當(dāng)于if else if else

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG WHERE state = 'ACTIVE'
  <choose>
    <when test="title != null">
      AND title like #{title}
    </when>
    <when test="author != null and author.name != null">
      AND author_name like #{author.name}
    </when>
    <otherwise>
      AND featured = 1
    </otherwise>
  </choose>
</select>

set

  update good 
     <set>
        <if test="gname!=null and gname!=''">
          gname=#{gname},
        </if>
        <if test="gprice!=null and gprice!=''">
          gprice=#{gprice}
        </if>
      </set>
  where gid=#{gid}

trim

作用:去除多余字符串

兩種常見的用法

1远豺、where and

prefix:字首 prefixOverrides:去除第一個指定的字符串

    select * from good
    <trim prefix="where" prefixOverrides="and|or">
      <!--添加where在前面,并且去除第一個and-->
      <if test="gname !=null and gname !=''">
        and gname like concat('%',#{gname},'%')
      </if>
      <if test="typename !=null and typename!=''">
        and typename like concat('%',#{typename},'%')
      </if>
    </trim>

2坞嘀、set

prefix:字首 suffixOverrides:去除最后指定的字符串

    update good 
    <trim prefix="set" suffixOverrides=",">
      <!--添加set在前面躯护,并且去除最后一個,-->
        <if test="gname!=null and gname!=''">
          gname=#{gname},
        </if>
        <if test="gprice!=null and gprice!=''">
          gprice=#{gprice},
        </if>
      </trim>

foreach

作用:動態(tài)循環(huán)拼接sql部分內(nèi)容

1、open代表在集合前面添加的字符串

2丽涩、close代表在集合后面添加的字符串

3棺滞、separator代表集合分割使用的字符串

4、collection代表被循環(huán)的集合矢渊,值可以是list继准、map、array

5矮男、常見用法移必,in的語句

<select id="selectGoodByGid" parameterType="list" resultType="Good">
    select gid,gname,gprice,count,type typeid from good
    <where>
      gid in

      <foreach item="item" collection="list" open="(" separator="," close=")">
             #{item}
        </foreach>
    </where>
  </select>

1、如何配置多個數(shù)據(jù)庫
使用environment可以配置多個數(shù)據(jù)庫毡鉴,通過ID來表示
2崔泵、transactionManager的type有哪些
JDBC、MANAGED

3猪瞬、dataSource作用
配置數(shù)據(jù)源憎瘸,有三種類型:UNPOOLED、POOLED陈瘦、JNDI還可以配置四大參數(shù)(驅(qū)動幌甘。url/用戶名、密碼)

4痊项、properties有什么用锅风,如何用
加載配置文件(resource/url),
配置鍵值對(proprerty)
注意:如果resource和proprerty鞍泉,resource優(yōu)先級高

5遏弱、typeAliases有什么用,如何用
起別名
用類名(類名)

6塞弊、databaseIdProvider + databaseid

7漱逸、databaseIdProvider:給數(shù)據(jù)庫起別名

8泪姨、databaseid:在statement中使用
myBatista根據(jù)url可以自動使用當(dāng)前是什么數(shù)據(jù)庫,然后使用哪個sql語句

9饰抒、mapper中的namespace有什么用
如果有相同的statementid的時候肮砾,使用namespace類區(qū)別
使用mapper接口開發(fā)dao時,namespace與接口全類名一致

10袋坑、增刪改查
id:statement的唯一標(biāo)識仗处,或者說是調(diào)用方法名
parameterType:傳入?yún)?shù)的數(shù)據(jù)類型 基本數(shù)據(jù)(可以不寫)+引用類型(必須寫)
resultType:返回?cái)?shù)據(jù)類型
parameterType和resultType:都可以使用別名來表示數(shù)據(jù)類名

11、myBatista中的數(shù)據(jù)類型的別名
Integer Integer枣宫,int
int _int

12婆誓、#{}作用
獲取傳入數(shù)據(jù)

13、Mapper接口開發(fā)的四大要求
1也颤、namespace的值就是對象接口的全類名洋幻,并且類名和xml文件名保持一致
2、id的值就是抽象方法
3翅娶、resultType的值必須和抽象方法的返回值一致
4文留、parameterType的值和抽象方法的參數(shù)類型一致

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市竭沫,隨后出現(xiàn)的幾起案子燥翅,更是在濱河造成了極大的恐慌,老刑警劉巖蜕提,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件森书,死亡現(xiàn)場離奇詭異,居然都是意外死亡谎势,警方通過查閱死者的電腦和手機(jī)拄氯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來它浅,“玉大人,你說我怎么就攤上這事镣煮〗慊簦” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵典唇,是天一觀的道長镊折。 經(jīng)常有香客問我,道長介衔,這世上最難降的妖魔是什么恨胚? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮炎咖,結(jié)果婚禮上赃泡,老公的妹妹穿的比我還像新娘寒波。我一直安慰自己,他們只是感情好升熊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布俄烁。 她就那樣靜靜地躺著,像睡著了一般级野。 火紅的嫁衣襯著肌膚如雪页屠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天蓖柔,我揣著相機(jī)與錄音辰企,去河邊找鬼。 笑死况鸣,一個胖子當(dāng)著我的面吹牛牢贸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播懒闷,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼十减,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了愤估?” 一聲冷哼從身側(cè)響起帮辟,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎玩焰,沒想到半個月后由驹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昔园,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年蔓榄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片默刚。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡甥郑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出荤西,到底是詐尸還是另有隱情澜搅,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布邪锌,位于F島的核電站勉躺,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏觅丰。R本人自食惡果不足惜饵溅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望妇萄。 院中可真熱鬧蜕企,春花似錦咬荷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至放典,卻和暖如春逝变,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奋构。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工壳影, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人弥臼。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓宴咧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親径缅。 傳聞我的和親對象是個殘疾皇子掺栅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354

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

  • MyBatis是什么 MyBatis的前身就是iBatis,iBatis本是apache的一個開源項(xiàng)目,2010年...
    吳旭光閱讀 635評論 0 0
  • 參考書籍 原著:Java Persistence with MyBatis 3. 作者:K.Siva Prasad...
    LOOK_LOOK閱讀 541評論 0 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法纳猪,類相關(guān)的語法氧卧,內(nèi)部類的語法,繼承相關(guān)的語法氏堤,異常的語法沙绝,線程的語...
    子非魚_t_閱讀 31,623評論 18 399
  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL鼠锈、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,511評論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理闪檬,服務(wù)發(fā)現(xiàn),斷路器购笆,智...
    卡卡羅2017閱讀 134,652評論 18 139