mybatis(增刪改查)入門程序 ——學習筆記

一.原生jdbc程序中的問題

總結:

1淋纲、數(shù)據(jù)庫連接防嗡,使用時就創(chuàng)建,不使用立即釋放谒麦,對數(shù)據(jù)庫進行頻繁連接開啟和關閉峻仇,造成數(shù)據(jù)庫資源浪費公黑,影響數(shù)據(jù)庫性能邑商。
設想:使用數(shù)據(jù)庫連接池管理數(shù)據(jù)庫連接摄咆。。
2人断、將sql語句硬編碼到java代碼中吭从,如果sql語句修改,需要重新編譯java代碼恶迈,不利于系統(tǒng)維護涩金。
設想:將sql語句配置在xml配置文件中谱醇,即使sql變樣不需要對jaua代碼進行重新編譯.
3、向preparedStatement中設置多數(shù)步做,對占位符號位置和設置多數(shù)值副渴,硬編碼在java代碼中,不利于系統(tǒng)維護全度。
設想:將sql語句及占位符號和參數(shù)全部配置在xml中煮剧。
4、從resutSet中遍歷結果集數(shù)據(jù)時将鸵,存在硬編碼勉盅,將獲取表的字段進行硬編碼,顶掉,不利于系統(tǒng)維護草娜。。
設想痒筒,格查詢的結集集宰闰,自動映射成java對象。

二.什么是mybatis及解決原生jdbc中出現(xiàn)的問題:

1 mybatis是一個持久層的框架凸克,是apache下的頂級項目
2.mybatis讓程序將主要精力放在名義上议蟆,通過mybatis提供的映射方式,自由靈活生成(半自動化萎战,大部分需要程序員編寫sql)滿足需要型之語句咐容。
3.mybatis可以將preparedStatement中的輸入?yún)?shù)自動進行輸入映射,將查詢結果集靈活映射成java對象蚂维。(輸出映射)戳粒。

三.環(huán)境搭建

1.maven中配置mybatis包:

mybatis核心及配置文件

<!--mybatis核心-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.2.7</version>
    </dependency>
    <!--mybatis日志文件-->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.5</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.12</version>
    </dependency>

    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
2.mybatis配置文件

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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"></property>
                <property name="url" value="jdbc:mysql://localhost:3306/sams?serverTimezone=UTC "></property>
                <property name="username" value="root"></property>
                <property name="password" value="root"></property>
            </dataSource>
        </environment>
    </environments>
    <!--加載映射文件-->
    <mappers>
        <mapper resource="mapper/adminMap.xml"></mapper>
    </mappers>
</configuration>
3.映射文件

adminMap.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="test">
    <!--通過id查找用戶-->
    <select id="findUserById" parameterType="int" resultType="cn.huan.mybatis.AdminBean">
        SELECT * FROM admin WHERE a_id =#{a_id}
    </select>
    <!--模糊查詢-->
    <select id="findUserByName" parameterType="java.lang.String" resultType="cn.huan.mybatis.AdminBean">
        SELECT * FROM admin WHERE a_username LIKE '%${value}%'
    </select>
    <!--添加用戶-->
    <insert id="insertUser" parameterType="cn.huan.mybatis.AdminBean">
        <!--將插入數(shù)據(jù)的主鍵返回
        SELECT Last_insert_ID 得到剛插入的主鍵值 只適用與自增主鍵
        keyProperty :將查詢到主鍵值設置到parameterType指定的對象的那個屬性
        order:SELECT Last_insert_ID執(zhí)行順序,相對于insert語句來說它的執(zhí)行順序-->
        <selectKey keyProperty="a_id" order="AFTER" resultType="java.lang.Integer">
            SELECT LAST_INSERT_ID()
        </selectKey>
        INSERT INTO admin (a_nameid,a_username,a_password,a_trank)
        VALUES(#{a_nameid},#{a_username},#{a_password},#{a_trank})
    </insert>
    <!--刪除用戶 通過id-->
    <delete id="deleteUser" parameterType="java.lang.Integer">
        DELETE from admin where a_id =#{a_id}
    </delete>
    <!--更新用戶信息通過id-->
    <update id="updateUser" parameterType="cn.huan.mybatis.AdminBean">
        UPDATE admin set a_nameid=#{a_nameid},a_username=#{a_username},a_password=#{a_password},a_trank=#{a_trank} where a_id=#{a_id}
    </update>

</mapper>

插入用戶及獲取插入時的主鍵(自增)SELECT UUID();

<insert id="insertUser" parameterType="cn.huan.mybatis.AdminBean">
        <!--將插入數(shù)據(jù)的主鍵返回
        SELECT Last_insert_ID 得到剛插入的主鍵值 只適用與自增主鍵
        keyProperty :將查詢到主鍵值設置到parameterType指定的對象的那個屬性
        order:SELECT Last_insert_ID執(zhí)行順序虫啥,相對于insert語句來說它的執(zhí)行順序-->
        <selectKey keyProperty="a_id" order="BEFORE" resultType="java.lang.Integer">
            SELECT UUID()
        </selectKey>
        INSERT INTO admin (a_id,a_nameid,a_username,a_password,a_trank) VALUES(#{a_id},#{a_nameid},#{a_username},#{a_password},#{a_trank})
    </insert>
4.javaBean

AdminBean.java

package cn.huan.mybatis;

/**
 * Created by 馬歡歡 on 2017/6/29.
 */
public class AdminBean {
    private int a_id;
    private String a_nameid;
    private String a_username;
    private String a_password;
    private int a_trank;

    @Override
    public String toString() {
        return "AdminBean{" +
                "a_id=" + a_id +
                ", a_nameid='" + a_nameid + '\'' +
                ", a_username='" + a_username + '\'' +
                ", a_password='" + a_password + '\'' +
                ", a_trank=" + a_trank +
                '}';
    }

    public int getA_id() {
        return a_id;
    }

    public void setA_id(int a_id) {
        this.a_id = a_id;
    }

    public String getA_nameid() {
        return a_nameid;
    }

    public void setA_nameid(String a_nameid) {
        this.a_nameid = a_nameid;
    }

    public String getA_username() {
        return a_username;
    }

    public void setA_username(String a_username) {
        this.a_username = a_username;
    }

    public String getA_password() {
        return a_password;
    }

    public void setA_password(String a_password) {
        this.a_password = a_password;
    }

    public int getA_trank() {
        return a_trank;
    }

    public void setA_trank(int a_trank) {
        this.a_trank = a_trank;
    }
}

5.測試類

mybatisTest.java
測試1:通過id查詢用戶
測試2:模糊查詢用戶
測試3:插入用戶及獲取插入時的主鍵(自增)SELECT LAST_INSERT_ID();
測試4:刪除用戶 通過id
測試5:更新用戶信息 通過id

package cn.huan.mybatis;

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.util.*;
import java.io.IOException;
import java.io.InputStream;

/**
 * Created by 馬歡歡 on 2017/6/29.
 */
public class mybatisTest {
    @Test
    public  void findUserById() throws IOException {
        //配置文件
        String resource = "mybatis-config.xml";
        //的到配置文件流
        InputStream inputStream =  Resources.getResourceAsStream(resource);
        //創(chuàng)建會話工廠
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //通過工廠的到sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //通過sqlSession操作數(shù)據(jù)庫
        AdminBean adminBean =sqlSession.selectOne("test.findUserById",1);
        System.out.println(adminBean);
        sqlSession.close();
    }

    @Test
    public  void findUserByName() throws IOException {
        //配置文件
        String resource = "mybatis-config.xml";
        //的到配置文件流
        InputStream inputStream =  Resources.getResourceAsStream(resource);
        //創(chuàng)建會話工廠
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通過工廠的到sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //通過sqlSession操作數(shù)據(jù)庫
        List<AdminBean> adminBean =sqlSession.selectList("test.findUserByName","員");
        System.out.println(adminBean);
        sqlSession.close();
    }
    @Test
    public  void insertUser() throws IOException {
        //配置文件
        String resource = "mybatis-config.xml";
        //的到配置文件流
        InputStream inputStream =  Resources.getResourceAsStream(resource);
        //創(chuàng)建會話工廠
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通過工廠的到sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        AdminBean adminBean = new AdminBean();
        adminBean.setA_nameid("156414525");
        adminBean.setA_username("小明1");
        adminBean.setA_password("123456");
        adminBean.setA_trank(3);

        //通過sqlSession操作數(shù)據(jù)庫
        sqlSession.insert("test.insertUser",adminBean);
        //提交事務
        sqlSession.commit();
        System.out.println(adminBean.getA_id());
        sqlSession.close();
    }

    @Test
    public  void deleteUser() throws IOException {
        //配置文件
        String resource = "mybatis-config.xml";
        //的到配置文件流
        InputStream inputStream =  Resources.getResourceAsStream(resource);
        //創(chuàng)建會話工廠
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通過工廠的到sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();


        //通過sqlSession操作數(shù)據(jù)庫
        sqlSession.delete("test.deleteUser",12);
        //提交事務
        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public  void updateUser() throws IOException {
        //配置文件
        String resource = "mybatis-config.xml";
        //的到配置文件流
        InputStream inputStream =  Resources.getResourceAsStream(resource);
        //創(chuàng)建會話工廠
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通過工廠的到sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        AdminBean adminBean = new AdminBean();
        adminBean.setA_id(13);
        adminBean.setA_nameid("111111");
        adminBean.setA_username("大東");
        adminBean.setA_password("454545");
        adminBean.setA_trank(2);

        //通過sqlSession操作數(shù)據(jù)庫
        sqlSession.update("test.updateUser",adminBean);
        //提交事務
        sqlSession.commit();
        sqlSession.close();
    }
}


測試1:查詢
測試2:模糊查詢
測試3:插入
測試4:刪除
測試5:更新

四.總結

1.parameterType:

在映射文件中通過patameterType指定輸入?yún)?shù)的類型

2.resulType:

在映射文件中通過resulType指定輸出結果的類型

3.#{}和${}

#{}表示占位符號
接收參數(shù)是簡單類型時 #{}中可以寫#{value}或者其他名稱
${}表示一個拼接號蔚约,會引起sql注入,所以不建議使用
接收參數(shù)是簡單類型時 ${}中只能寫#{value}

4.selectOne和selectList

selectOne表示查詢出一條記錄進行映射涂籽。(可以使用selectList替代)
selectList表示查詢出一個列表(多條記錄)進行映射苹祟。(不能使用selectOne替代)

.

文集:mybatis框架學習

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市评雌,隨后出現(xiàn)的幾起案子树枫,更是在濱河造成了極大的恐慌,老刑警劉巖景东,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砂轻,死亡現(xiàn)場離奇詭異,居然都是意外死亡斤吐,警方通過查閱死者的電腦和手機搔涝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門厨喂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人庄呈,你說我怎么就攤上這事蜕煌。” “怎么了诬留?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵幌绍,是天一觀的道長。 經(jīng)常有香客問我故响,道長傀广,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任彩届,我火速辦了婚禮伪冰,結果婚禮上,老公的妹妹穿的比我還像新娘樟蠕。我一直安慰自己贮聂,他們只是感情好,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布寨辩。 她就那樣靜靜地躺著吓懈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪靡狞。 梳的紋絲不亂的頭發(fā)上耻警,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音甸怕,去河邊找鬼甘穿。 笑死,一個胖子當著我的面吹牛梢杭,可吹牛的內(nèi)容都是我干的温兼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼武契,長吁一口氣:“原來是場噩夢啊……” “哼募判!你這毒婦竟也來了?” 一聲冷哼從身側響起咒唆,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤届垫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后钧排,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敦腔,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡均澳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年恨溜,在試婚紗的時候發(fā)現(xiàn)自己被綠了符衔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡糟袁,死狀恐怖判族,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情项戴,我是刑警寧澤形帮,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站周叮,受9級特大地震影響辩撑,放射性物質發(fā)生泄漏。R本人自食惡果不足惜仿耽,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一合冀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧项贺,春花似錦君躺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奕删,卻和暖如春俺泣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背完残。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工砌滞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坏怪。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓贝润,卻偏偏與公主長得像,于是被迫代替她去往敵國和親铝宵。 傳聞我的和親對象是個殘疾皇子打掘,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

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

  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL鹏秋、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,523評論 0 4
  • Java數(shù)據(jù)持久化之mybatis 一. mybatis簡介 1.1 原始的JDBC操作: Java 通過 Jav...
    小Q逛逛閱讀 4,921評論 0 16
  • 官方文檔 簡介 入門 XML配置 XML映射文件 動態(tài)SQL Java API SQL語句構建器 日志 一尊蚁、 JD...
    拾壹北閱讀 3,546評論 0 52
  • 2017年11月4日 星期六 晴大太陽 中午又組織了一桌結婚回請宴,來的是老婆的同事們侣夷,和上次我那一桌大學同學比起...
    翔哥山姆閱讀 238評論 0 0
  • 年前寫那篇《十年》的時候横朋,當時腦子里就蹦出了這些人。如果說《十年》之中的朋友是誤打誤撞百拓,稀里糊涂成為朋友的話琴锭,那這...
    好夢不遙遠閱讀 169評論 2 1