GettingStarted With Mybatis

一酪耕、基本概念

  1. What for

JDBC訪問數(shù)據(jù)庫命迈,除了需要自己寫SQL之外呼寸,還必須操作Connection, Statment, ResultSet 這些其實只是手段的輔助類识樱。 不僅如此嗤无,訪問不同的表,還會寫很多雷同的代碼怜庸,顯得繁瑣和枯燥当犯。

Mybatis之后只需要自己提供SQL語句。其他的工作割疾,諸如建立連接嚎卫,Statement, JDBC相關(guān)異常處理等等都交給Mybatis去做了宏榕,那些重復(fù)性的工作Mybatis也給做掉了拓诸,我們只需要關(guān)注在增刪改查等操作層面上,而把技術(shù)細(xì)節(jié)都封裝在了我們看不見的地方麻昼。

  1. 原 理
  • 應(yīng)用程序找Mybatis要數(shù)據(jù)
  • mybatis從數(shù)據(jù)庫中找來數(shù)據(jù)
    a)通過mybatis-config.xml 定位哪個數(shù)據(jù)庫 (mybatis-config.xml配置數(shù)據(jù)庫連接信息)
    b) 通過Category.xml執(zhí)行對應(yīng)的select語句 (Category.xml將sql語句與實體建立對應(yīng)關(guān)系)
    c) 基于Category.xml把返回的數(shù)據(jù)庫記錄封裝在Category對象中
    d) 把多個Category對象裝在一個Category集合中
  • 返回一個Category集合


    Mybatis基本原理圖.png

二奠支、配置方式Crud

兩個配置文件:
mybatis-config.xml:建立數(shù)據(jù)庫連接
Category.xml:將sql語句與實體建立對應(yīng)關(guān)系

  • mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
      <package name="com.how2java.pojo"/>
    </typeAliases>
    <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/how2java?characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="admin"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/how2java/pojo/Category.xml"/>
    </mappers>
</configuration>

下面分別列出增刪改查中,Category.xml 及 java 代碼片段:
1.增
addCategory對應(yīng)的插入sql語句抚芦,#{name}會自動獲取c對象的name屬性值

  • Category.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.how2java.pojo">
    <!-- 增 -->
     <insert id="addCategory" parameterType = "Category" >
        insert into category_ (name) values (#{name})     
    </insert>
</mapper>
  • TestMybatis.java
Category c = new Category();
c.setName("新增加的Category");
session.insert("addCategory",c);  // 第一個參數(shù)為sql語句的id,第二個參數(shù)類型與sql中的parameterType一致

2.刪

  • Category.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.how2java.pojo">
    <!-- 增 -->
     <insert id="addCategory" parameterType = "Category" >
        insert into category_ (name) values (#{name})     
    </insert>
</mapper>
  • TestMybatis.java
Category c = new Category();
c.setName("新增加的Category");
session.insert("addCategory",c);  // 第一個參數(shù)為sql語句的id,第二個參數(shù)類型與sql中的parameterType一致

3.改

  • Category.xml
<update id="updateCategory" parameterType="Category" >
    update category_ set name=#{name} where id=#{id}   
</update>
  • TestMybatis.java
Category c= session.selectOne("getCategory",3);
c.setName("修改了的Category名稱");
session.update("updateCategory",c);

4.查
查詢所有

  • Category.xml
<select id="listCategory" resultType="Category">
    select * from   category_     
</select>
  • TestMybatis.java
List<Category> cs = session.selectList("listCategory");

三倍谜、注解方式Crud

一個配置文件:
mybatis-config.xml:建立數(shù)據(jù)庫連接
CategoryMapper 取代了Category.xml

  • mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
      <package name="com.how2java.pojo"/>
    </typeAliases>
    <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/how2java?characterEncoding=UTF-8"/>
            <property name="username" value="root"/>
            <property name="password" value="admin"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper class="com.how2java.mapper.CategoryMapper"/> 
    </mappers>
</configuration>
  • CategoryMapper.java
public interface CategoryMapper {
  
    @Insert(" insert into category_ ( name ) values (#{name}) ") 
    public int add(Category category); 
        
    @Delete(" delete from category_ where id= #{id} ") 
    public void delete(int id); 
        
    @Select("select * from category_ where id= #{id} ") 
    public Category get(int id); 
      
    @Update("update category_ set name=#{name} where id=#{id} ") 
    public int update(Category category);  
        
    @Select(" select * from category_ ") 
    public List<Category> list(); 
}
  • TestMybatis.java
public static void main(String[] args) throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();
        CategoryMapper mapper = session.getMapper(CategoryMapper.class);
  
//        add(mapper);
//        delete(mapper);
//        get(mapper);
//        update(mapper);
        listAll(mapper);
              
        session.commit();
        session.close();
   
    }
  
    private static void update(CategoryMapper mapper) {
        Category c= mapper.get(8);
        c.setName("修改了的Category名稱");
        mapper.update(c);
        listAll(mapper);
    }
  
    private static void get(CategoryMapper mapper) {
        Category c= mapper.get(8);
        System.out.println(c.getName());
    }
  
    private static void delete(CategoryMapper mapper) {
        mapper.delete(2);
        listAll(mapper);
    }
  
    private static void add(CategoryMapper mapper) {
        Category c = new Category();
        c.setName("新增加的Category");
        mapper.add(c);
        listAll(mapper);
    }
   
    private static void listAll(CategoryMapper mapper) {
        List<Category> cs = mapper.list();
        for (Category c : cs) {
            System.out.println(c.getName());
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市叉抡,隨后出現(xiàn)的幾起案子尔崔,更是在濱河造成了極大的恐慌,老刑警劉巖褥民,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件季春,死亡現(xiàn)場離奇詭異,居然都是意外死亡轴捎,警方通過查閱死者的電腦和手機(jī)鹤盒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門蚕脏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人侦锯,你說我怎么就攤上這事驼鞭。” “怎么了尺碰?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵挣棕,是天一觀的道長。 經(jīng)常有香客問我亲桥,道長洛心,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任题篷,我火速辦了婚禮词身,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘番枚。我一直安慰自己法严,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布葫笼。 她就那樣靜靜地躺著深啤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪路星。 梳的紋絲不亂的頭發(fā)上溯街,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天,我揣著相機(jī)與錄音洋丐,去河邊找鬼呈昔。 笑死,一個胖子當(dāng)著我的面吹牛友绝,可吹牛的內(nèi)容都是我干的韩肝。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼九榔,長吁一口氣:“原來是場噩夢啊……” “哼哀峻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起哲泊,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤剩蟀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后切威,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體育特,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缰冤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片犬缨。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖棉浸,靈堂內(nèi)的尸體忽然破棺而出怀薛,到底是詐尸還是另有隱情,我是刑警寧澤迷郑,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布枝恋,位于F島的核電站,受9級特大地震影響嗡害,放射性物質(zhì)發(fā)生泄漏焚碌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一霸妹、第九天 我趴在偏房一處隱蔽的房頂上張望十电。 院中可真熱鬧,春花似錦叹螟、人聲如沸摆出。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至爷恳,卻和暖如春有缆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背温亲。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工棚壁, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人栈虚。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓袖外,卻偏偏與公主長得像,于是被迫代替她去往敵國和親魂务。 傳聞我的和親對象是個殘疾皇子曼验,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349

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

  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL粘姜、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,456評論 0 4
  • 1 引言# 本文主要講解JDBC怎么演變到Mybatis的漸變過程鬓照,重點講解了為什么要將JDBC封裝成Mybait...
    七寸知架構(gòu)閱讀 76,442評論 36 980
  • 曾經(jīng)豺裆,我是如此的愛你,到了現(xiàn)在号显,真的累了臭猜。我不知道該怎樣面對這樣的自己躺酒,每次都是因為同樣的原因而吵架,而每次你...
    Alone_7閱讀 279評論 0 1
  • 無數(shù)次的沉思蔑歌、暇想羹应,自己在無始的輪回中都曾做過什么、做過幾世人丐膝、神量愧、畜還是鬼,在受無盡的輪回受苦帅矗,來生能不能在投胎...
    娑婆若海閱讀 234評論 0 0
  • 喧 癡戀 無言間 眼波流轉(zhuǎn) 柔雨連天邊 夢中輕吟期愿 但求雙心終纏綿 只恐舊顏無人思眷 暮里炊煙起黯嘆無緣 再遇故...
    明璋閱讀 379評論 0 1