Mybaits 框架學(xué)習(xí)筆記

Mybaits 框架學(xué)習(xí)筆記

1. 導(dǎo)入 Mybaits 架包

2. 創(chuàng)建 Mybaits 核心配置文件

在 src 目錄下創(chuàng)建 config.xml献汗,它包含了使用 Mybaits 框架必要的配置信息蛔添,內(nèi)容如下:

<?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>
    <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/mybaits" />
                <property name="username" value="root" />
                <property name="password" value="" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!-- 可以添加多個Mapper -->
        <mapper resource="mapper/UserMapper.xml" />
    </mappers>
</configuration>

此步結(jié)束宋梧,MyBaits 框架的環(huán)境已經(jīng)配置好了岂却,下面是使用 MyBaits 操作表的步驟居砖。

3. 根據(jù)表創(chuàng)建 Bean 類

表結(jié)構(gòu)如下:


表:t_user

UserBean 類

package bean;

public class UserBean {
    
    private int id;
    private String username;
    private String password;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    
    @Override
    public String toString() {
        return "UserBean [id=" + id + ", username=" + username + ", password=" + password + "]";
    }
}

4. 映射 sql 語句

創(chuàng)建 mapper腾务,并在 mapper 下創(chuàng)建 UserMapper.xml毕骡,來映射 t_user 表的 sql 語句。
UserMapper.xml 內(nèi)容如下:

<?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">

<!-- namespace:給當(dāng)前xml文件命名岩瘦,區(qū)分sql塊未巫,以區(qū)分 -->
<mapper namespace="user">
    
    <!-- 定義sql語句 增、刪启昧、改叙凡、查 -->
    <select id="findByid" parameterType="int" resultType="bean.UserBean">
        SELECT * FROM t_user WHERE id = #{id};
    </select>
    
    <select id="findAll" resultType="bean.UserBean">
        SELECT * FROM t_user;
    </select>
    
    <insert id="insertUser" parameterType="bean.UserBean">
        INSERT INTO t_user(username, `password`) VALUE (#{username}, #{password});
    </insert>
    
    <delete id="deleteUserById" parameterType="int">
        DELETE FROM t_user WHERE id = #{id};
    </delete>
    
    <update id="updateUserPassword" parameterType="bean.UserBean">
        UPDATE t_user SET `password` = #{password} WHERE id = #{id};
    </update>
</mapper>

namespzce 屬性可以隨意命名,他的作用是區(qū)分 sql語句塊密末。
id 屬性用來標(biāo)識具體的 sql 語句握爷,Mybaits 框架就是通過 namespace.id 定位到具體的 sql 語句的跛璧。
parameterType 屬性是執(zhí)行 sql 語句需要的參數(shù)類型。

通過以上步驟已經(jīng)可以使用可以使用 MyBaits 用 maper 里面配置好了的 sql 語句操作表了饼拍。

  1. 使用 XML 配置文件來生成一個 SqlSessionFactory 實例 fa
        // 加載配置文件
        String resource = "config.xml";
        InputStream is = null;
        SqlSessionFactory fa = null;
        try {
            is = Resources.getResourceAsStream(resource);
            fa = new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
  1. 獲取 SqlSession 實例
// Mybaits 默認(rèn)是關(guān)閉自動提交事務(wù)的
SqlSession session = getSqlSessionFactory().openSession();
// 或者
// 獲取自動提交事務(wù)的 SqlSession
SqlSession session = getSqlSessionFactory().openSession(true);
  1. 使用 SqlSession 對應(yīng)的方法執(zhí)行 mapper 中已經(jīng)配置的方法赡模,以執(zhí)行 id 為 deleteUserById 的刪除sql語句為例:
int id = 3;
session.delete("user.deleteUserById ", id);
// 關(guān)閉 session 釋放資源
session.close()

ps:到此步已經(jīng)完了,下面只是完善程序結(jié)構(gòu)

每次執(zhí)行 sql 語句师抄,1漓柑、2步都要重復(fù),只有第三步是變化的叨吮,可以將 1辆布、2步封裝成方法。

MybaitsUtil 類

package util;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MybaitsUtil {
    
    // SqlSessionFactory類是單例茶鉴,只存在一個對象
    public static SqlSessionFactory getSqlSessionFactory() {
        // 加載配置文件
        String resource = "config.xml";
        InputStream is = null;
        SqlSessionFactory fa = null;
        try {
            is = Resources.getResourceAsStream(resource);
            fa = new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return fa;
    }
    
    public static SqlSession getSqlSession() {
        // 默認(rèn)手動提交事務(wù)
        SqlSession session = fa.openSession();
        return session;
    }
    
    public static SqlSession getSqlSession(boolean boo) {
        // 開啟自動提交事務(wù)
        SqlSession session = fa.openSession(true);
        return session;
    }
}

5.創(chuàng)建操作表的接口

IUserDao 接口

package dao;

import java.util.List;

import bean.UserBean;

public interface IUserDao {
    // 添加用戶
    public void insert(UserBean bean);
    // 根據(jù)id查詢用戶
    public void findByid(int id);
    // 查詢所有用戶
    public List<UserBean> findAll();
    // 通過id刪除用戶
    public void deleteUserById(int id);
    // 更新用戶密碼
    public void updateUserPassword(UserBean bean);
}

6.實現(xiàn)接口

UserDaoimpl 實現(xiàn)類

package dao.impl;

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

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 bean.UserBean;
import dao.IUserDao;
import util.MybaitsUtil;

public class UserDaoImpl implements IUserDao {

    @Override
    public void insert(UserBean bean) {
        SqlSession session = MybaitsUtil.getSqlSession(true);
        try {
            session.insert("user.insertUser", bean);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 釋放資源
            session.close();
        }
    }

    @Override
    public void findByid(int id) {
        SqlSession session = MybaitsUtil.getSqlSession();
        try {
             UserBean user = session.selectOne("user.findByid", id);
//           System.out.println(user);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }
    }

    @Override
    public List<UserBean> findAll() {
        List<UserBean> list = null;
        SqlSession session = MybaitsUtil.getSqlSession();
        try {
            list = session.selectList("user.findAll");
//          System.out.println(list.size());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }
        
        return list;
    }

    @Override
    public void deleteUserById(int id) {
        SqlSession session = MybaitsUtil.getSqlSession(true);
        try {
            session.delete("user.deleteUserById", id);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }
    }

    @Override
    public void updateUserPassword(UserBean bean) {
        SqlSession session = MybaitsUtil.getSqlSession(true);
        try {
            session.update("updateUserPassword", bean);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }
    }
}

7. 測試(單元測試)

TestMain 單元測試類

package test;

import org.junit.Test;

import bean.UserBean;
import dao.IUserDao;
import dao.impl.UserDaoImpl;

public class TestMain {
    
    // 插入
    @Test
    public void test1() {
        IUserDao dao = new UserDaoImpl();
        UserBean user = new UserBean();
        user.setUsername("xiaowang");
        user.setPassword("xw123");
        dao.insert(user);
    }
    
    // 查找單個用戶
    @Test
    public void test2() {
        IUserDao dao = new UserDaoImpl();
        dao.findByid(2);
    }
    
    // 查找所有
    @Test
    public void test3() {
        IUserDao dao = new UserDaoImpl();
        dao.findAll();
    }
    
    // 通過id刪除用戶
    @Test
    public void test4() {
        IUserDao dao = new UserDaoImpl();
        dao.deleteUserById(3);
    }
    
    // 修改密碼
    @Test
    public void test5() {
        IUserDao dao = new UserDaoImpl();
        UserBean user = new UserBean();
        user.setId(4);
        user.setPassword("xw123");
        dao.updateUserPassword(user);
    }
}

使用 Eclipse 用鼠標(biāo)放在測試函數(shù)上方锋玲,右擊鼠標(biāo)選擇運行,就會執(zhí)行單個測試函數(shù)涵叮,實現(xiàn)這種功能需要導(dǎo)入 junit.jar 架包惭蹂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市割粮,隨后出現(xiàn)的幾起案子盾碗,更是在濱河造成了極大的恐慌,老刑警劉巖舀瓢,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件廷雅,死亡現(xiàn)場離奇詭異,居然都是意外死亡京髓,警方通過查閱死者的電腦和手機航缀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來堰怨,“玉大人芥玉,你說我怎么就攤上這事〕闲” “怎么了飞傀?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诬烹。 經(jīng)常有香客問我砸烦,道長,這世上最難降的妖魔是什么绞吁? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任幢痘,我火速辦了婚禮,結(jié)果婚禮上家破,老公的妹妹穿的比我還像新娘颜说。我一直安慰自己购岗,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布门粪。 她就那樣靜靜地躺著喊积,像睡著了一般。 火紅的嫁衣襯著肌膚如雪玄妈。 梳的紋絲不亂的頭發(fā)上乾吻,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天,我揣著相機與錄音拟蜻,去河邊找鬼绎签。 笑死,一個胖子當(dāng)著我的面吹牛酝锅,可吹牛的內(nèi)容都是我干的诡必。 我是一名探鬼主播,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼搔扁,長吁一口氣:“原來是場噩夢啊……” “哼爸舒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起稿蹲,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤碳抄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后场绿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡嫉入,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年焰盗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咒林。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡熬拒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出垫竞,到底是詐尸還是另有隱情澎粟,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布欢瞪,位于F島的核電站活烙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏遣鼓。R本人自食惡果不足惜啸盏,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望骑祟。 院中可真熱鬧回懦,春花似錦气笙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至舟茶,卻和暖如春谭期,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背稚晚。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工崇堵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人客燕。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓鸳劳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親也搓。 傳聞我的和親對象是個殘疾皇子赏廓,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,747評論 2 361

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