MyBatis(1)-基本操作

1.數(shù)據(jù)庫新建person表


數(shù)據(jù)庫person

2.步驟

目錄結構
目錄結構.png

1)導入jar包
2)配置核心xml文件,開發(fā)環(huán)境及數(shù)據(jù)庫相關信息杠览,及mapper映射文件位置

3)配置映射文件XXXMapper.xml,主要是命名空間容达,操作語句
4)通過構建SqlSessionFactory獲取SqlSession對象衙猪,然后通過使用SqlSeesion對象調用對應的方法實現(xiàn)數(shù)據(jù)庫操作。
3.操作
1)引入相關MyBatis及MySQL連接Jar包及JUnit4包


相關jar包

2)新建Person實體類
package com.capgemini.entity;

/**
 * 實體類
 */
public class Person {
    private Integer id;
    private String name;
    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

3)MyBatis核心配置文件sqlMapperConfig.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>
    <!-- 配置開發(fā)環(huán)境-->
    <environments default="test">
        <environment id="test">
            <!-- 事務管理類型:JDBC哑芹、MANAGED -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 數(shù)據(jù)源類型:POOLED炎辨、UNPOOLED、JNDI -->
            <dataSource type="POOLED"> 
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>

    <!-- 加載映射文件 mapper -->
    <mappers>
        <!--路徑使用"/"-->
        <mapper resource="com/capgemini/mapper/PersonMapper.xml"></mapper>
    </mappers>
</configuration>

4)映射文件PersonMapper.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.capgemini.mapper.PersonMapper">
    <!-- 查詢功能聪姿,resultType 設置返回值類型 -->
    <select id="findAll" resultType="com.capgemini.entity.Person">
        SELECT * FROM person
    </select>

    <!--增加功能,parameterType 設置參數(shù)碴萧,為實體類中的屬性-->
    <insert id="insert" parameterType="com.capgemini.entity.Person">
        INSERT INTO person(id,name,age) VALUES (#{id},#{name},#{age})
    </insert>

    <!--修改功能-->
    <update id="update" parameterType="com.capgemini.entity.Person">
        UPDATE person SET name = #{name},age = #{age}
        WHERE id = #{id}
    </update>

    <!--刪除-->
    <delete id="delete" parameterType="com.capgemini.entity.Person">
        DELETE person WHERE id = #{id}
    </delete>
</mapper>

5)測試

package com.capgemini.test;

import com.capgemini.entity.Person;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class TestMyBatis {
    @Test
    public void Test01() throws IOException {
        /**
         *  1、獲得 SqlSessionFactory
         *  2末购、獲得 SqlSession
         *  3破喻、調用在 mapper 文件中配置的 SQL 語句
         */
        String resource = "sqlMapperConfig.xml";           // 定位核心配置文件
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);    // 創(chuàng)建 SqlSessionFactory

        SqlSession sqlSession = sqlSessionFactory.openSession();    // 獲取到 SqlSession

        // 調用 mapper 中的方法:命名空間 + id
        List<Person> personList = sqlSession.selectList("com.capgemini.mapper.PersonMapper.findAll");

        for (Person p : personList){
            System.out.println(p);
        }
    }
    @Test
    public void Test02() throws IOException {
        String resource = "sqlMapperConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);    // 創(chuàng)建 SqlSessionFactory

        SqlSession sqlSession = sqlSessionFactory.openSession();    // 獲取到 SqlSession

        Person person = new Person();
        person.setId(2);
        person.setName("Echo");
        person.setAge(25);
        // 調用 mapper 中的方法:命名空間 + id
        sqlSession.insert("com.capgemini.mapper.PersonMapper.insert",person);
        sqlSession.commit();
    }
    @Test
    public void Test03() throws IOException {
        String resource = "sqlMapperConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);    // 創(chuàng)建 SqlSessionFactory

        SqlSession sqlSession = sqlSessionFactory.openSession();    // 獲取到 SqlSession

        Person person = new Person();
        person.setId(2);
        person.setName("Echo");
        person.setAge(26);
        // 調用 mapper 中的方法:命名空間 + id
        sqlSession.update("com.capgemini.mapper.PersonMapper.update",person);
        sqlSession.commit();
    }

    @Test
    public void Test04() throws IOException {
        String resource = "sqlMapperConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);    // 創(chuàng)建 SqlSessionFactory

        SqlSession sqlSession = sqlSessionFactory.openSession();    // 獲取到 SqlSession

        Person person = new Person();
        person.setId(2);
        person.setName("Echo");
        person.setAge(26);
        // 調用 mapper 中的方法:命名空間 + id
        sqlSession.delete("com.capgemini.mapper.PersonMapper.delete",person);
        sqlSession.commit();
    }

}

4.其他
在PersonMapper.xml中的映射的對象是 使用下面方法實現(xiàn)的

  <!-- 查詢功能,resultType 設置返回值類型 -->
    <select id="findAll" resultType="com.capgemini.entity.Person">
        SELECT * FROM person
    </select>

可以通過實體對象映射盟榴,節(jié)省代碼量

<!--對象映射曹质,type是對象的位置-->
    <resultMap id="PersonRM" type="com.capgemini.entity.Person">
        <!-- id是主鍵,result是普通字段,property表示實體對象屬性羽德,column是數(shù)據(jù)庫中對應的字段-->
        <id property="id" column="id"></id>
        <result property="name" column="name"></result>
        <result property="age" column="age"></result>
    </resultMap>
    <!-- 查詢功能几莽,resultMap 通過對象映射,設置返回值類型 -->
    <select id="findAll" resultMap="PersonRM">
        SELECT * FROM person
    </select>

5.分析
1)首先是映射文件
namespace宅静,是命名空間章蚣,是用于區(qū)分映射文件中的方法的
每一個sql語句操作都有一個id,對應的是SqlSession方法調用時候命名空間后的方法名,主要有4種sql語句操作類型姨夹,select,insert,update,delete纤垂。
parameterType,是sql語句的輸入?yún)?shù)類型,如果輸入?yún)?shù)是對應的實體類,在sql語句中則是使用#{實體類屬性}來添加匀伏;如果不是則#{隨便的命名}洒忧。
resultType,是sql語句返回的結果集類型够颠,用于簡單類型熙侍,
resultMap,是返回的結果集類型是復雜類型時候使用的,對應的是resultMap標簽所指定的對象映射id
標簽resultMap,其中id是用于sql語句結果集返回時resultMap的位置履磨,type是映射對象蛉抓,id是主鍵,result是普通字段剃诅,property是實體類屬性巷送,column是數(shù)據(jù)庫中對應的字段名
2)調用方式
首先創(chuàng)建SqlSessionFacory對象,使用的是SqlSessionFactoryBuilder().build(inputStream)方法矛辕,其中inputStream可以通過Resources.getResourceAsStream(resource)方法獲取笑跛,resource是核心配置文件位置。
然后獲取SqlSession對象聊品,使用的是sqlSessionFactory飞蹂。openSession()方法。
最后調用mapper中的方法翻屈,增加使用insert,修改使用update,刪除使用delete,查詢使用select陈哑。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市伸眶,隨后出現(xiàn)的幾起案子惊窖,更是在濱河造成了極大的恐慌,老刑警劉巖厘贼,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件界酒,死亡現(xiàn)場離奇詭異,居然都是意外死亡嘴秸,警方通過查閱死者的電腦和手機毁欣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門售担,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人署辉,你說我怎么就攤上這事族铆。” “怎么了哭尝?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵哥攘,是天一觀的道長。 經(jīng)常有香客問我材鹦,道長逝淹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任桶唐,我火速辦了婚禮栅葡,結果婚禮上,老公的妹妹穿的比我還像新娘尤泽。我一直安慰自己欣簇,他們只是感情好,可當我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布坯约。 她就那樣靜靜地躺著熊咽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪闹丐。 梳的紋絲不亂的頭發(fā)上横殴,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天,我揣著相機與錄音卿拴,去河邊找鬼衫仑。 笑死,一個胖子當著我的面吹牛堕花,可吹牛的內容都是我干的文狱。 我是一名探鬼主播,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼航徙,長吁一口氣:“原來是場噩夢啊……” “哼如贷!你這毒婦竟也來了陷虎?” 一聲冷哼從身側響起到踏,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎尚猿,沒想到半個月后窝稿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡凿掂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年伴榔,在試婚紗的時候發(fā)現(xiàn)自己被綠了纹蝴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡踪少,死狀恐怖塘安,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情援奢,我是刑警寧澤兼犯,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站集漾,受9級特大地震影響切黔,放射性物質發(fā)生泄漏。R本人自食惡果不足惜具篇,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一纬霞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧驱显,春花似錦诗芜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至熔恢,卻和暖如春脐湾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背叙淌。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工秤掌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鹰霍。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓闻鉴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親茂洒。 傳聞我的和親對象是個殘疾皇子孟岛,可洞房花燭夜當晚...
    茶點故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內容

  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL督勺、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,532評論 0 4
  • MyBatis 理論篇 [TOC] 什么是MyBatis ?MyBatis是支持普通SQL查詢,存儲過程和高級映射...
    有_味閱讀 2,912評論 0 26
  • Mybatis介紹 MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache...
    day_Sunny閱讀 2,670評論 0 6
  • 1.1mybatis下載 mybaits 的代碼由github.com 管理渠羞,地址:https://github....
    暖熊熊閱讀 864評論 0 5
  • 上周滬深B指前半周連續(xù)陰跌,周五出現(xiàn)報復性反彈智哀,在走勢圖上尤以上證B指最為明顯次询。上證B指上周連續(xù)下跌,從周一360...
    陽光在風雨后閱讀 225評論 0 0