MyBatis入門

1、MyBatis框架

????MyBatis是一個優(yōu)秀的數(shù)據(jù)持久層框架,在實體類和SQL語句之間建立映射關系影锈,是一種半自動化的ORM實現(xiàn)娃磺。其封裝性要低于Hibernate(全自動化框架),性能優(yōu)越徽职,并且小巧象颖,簡單,易學姆钉,應用也越來越廣泛说订。

????1.1、MyBatis框架的優(yōu)點

????(1)MyBatis是最簡單的持久化框架潮瓶,簡單易學陶冷。

????(2)MyBatis相當靈活,不會對應用程序或者數(shù)據(jù)庫的設計有影響毯辅,SQL寫在XML里埂伦,從程序代碼中徹底分離,既降低耦合度思恐,又便于統(tǒng)一管理與優(yōu)化沾谜。

????(3)提供XML標簽,支持編寫動態(tài)SQL語句壁袄。

????(4)提供映射標簽类早,支持對象與數(shù)據(jù)庫的ORM字段關系映射。

????1.2嗜逻、MyBatis框架的缺點

????(1)SQL語句的編寫工作量大涩僻,對開發(fā)人員編寫SQL語句的功底又一定的要求。

????(2)SQL語句依賴于數(shù)據(jù)庫,導致數(shù)據(jù)庫移植性差逆日,不能隨意更改數(shù)據(jù)庫嵌巷。

2、搭建MyBatis

?? ??以下環(huán)境的搭建和配置都是基于IDEA編輯器下的Maven項目室抽,數(shù)據(jù)庫使用的是MySql搪哪。

????2.1、在pom.xml中添加驅(qū)動的jar包(mysql.jar和mybatis.jar包)

 <dependencies>
    <dependency>
         <groupId>org.mybatis</groupId>
         <artifactId>mybatis</artifactId>
         <version>3.4.6</version>
    </dependency>
    <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>5.1.40</version>
    </dependency>    
</dependencies>

????2.2坪圾、在resources資源庫中創(chuàng)建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>
    <!--配置mybatis多套運行環(huán)境-->
    <environments default="development">
        <environment id="development">
            <!--配置事務管理晓折,采用JDBC的事務管理-->     
            <transactionManager type="JDBC"/>
                <!--POOLED:mybatis自帶的數(shù)據(jù)源-->
                <dataSource type="POOLED">
                    <property name="driver" value="${driver}"/> <!--加載mysql驅(qū)動:com.mysql.jdbc.Driver-->
                    <property name="url" value="${url}"/><!--指定連接的數(shù)據(jù)庫路徑:jdbc:mysql://localhost:3306/數(shù)據(jù)庫名-->
                    <property name="username" value="${username}"/><!--數(shù)據(jù)庫配置時的用戶名-->
                    <property name="password" value="${password}"/><!--數(shù)據(jù)庫配置時的密碼-->
                </dataSource>
        </environment>
    </environments>
    <!--指定mapper.xml文件的路徑(maven項目是從resources源文件下找資源)-->
    <mappers>
            <mapper resource="包名/mapper文件名"></mapper>
    </mappers>
</configuration>

????2.3、創(chuàng)建實體類

????2.4兽泄、創(chuàng)建接口類

????2.5漓概、添加mapper文件

?????注:在mapper文件中保存sql語句

<?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 表示命名空間,通常定義的格式是接口的完整路徑-->
<mapper namespace="接口的完整路徑">
   <!--定義sql語句,sql語句結束后不要加分號-->
   <!-- id是被調(diào)用的方法名   mapper文件中讀取參數(shù)的格式:#{屬性名} -->
   <insert id="方法名">
           //sql語句
    </insert>
    <!--查詢語句中需添加一個結果映射屬性:resultType="一般是結果類型的完整路徑"-->
    <select id="方法名" resultType="查詢后返回值類型">
           //sql語句
    </select>
</mapper>

????2.6病梢、獲取SqlSession胃珍,創(chuàng)建測試類

          //1.加載配置文件
          Reader  resourceAsReader=Resources.getResourceAsReader("mybatis-config.xml");
          //2.創(chuàng)建SqlSessionFactoryBuilder對象
          SqlSessionFactoryBuilder builder= new SqlSessionFactoryBuilder();
          //3.得到session工廠
          SqlSessionFactory factory=builder.build(resourceAsReader);
          //4.得到session
          SqlSession sqlSession= factory.openSession();
          //5.調(diào)取sql語句,insert("方法的完整路徑"),路徑=namespace+id 
          int rs=sqlSession.insert("方法的完整路徑" 蜓陌,e);
          //6.一般增觅彰、刪、改需提交事務才可以實現(xiàn)數(shù)據(jù)庫的更改
          sqlSession.commit();  
          //7.關閉資源(放在finally中钮热,應該添加非空驗證)
          sqlSession.close();    

3填抬、MyBatis一個簡單的實現(xiàn)(實現(xiàn)用戶數(shù)據(jù)的添加)

????3.1、數(shù)據(jù)庫準備

?????創(chuàng)建一個數(shù)據(jù)庫名為test霉旗,表名為users

CREATE TABLE users(
 id INT PRIMARY KEY,
 NAME VARCHAR(20),
 sex VARCHAR(20)
)

????3.2痴奏、項目整體架構

項目整體架構

????3.3蛀骇、添加驅(qū)動的jar包

 <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.40</version>
        </dependency>
 </dependencies>

????3.4厌秒、MyBatis的核心配置文件mybatis-config.xml

<environments default="development">
        <environment id="development">
            <!--配置事務管理,采用JDBC的事務管理-->
            <transactionManager type="JDBC"/>
            <!--POOLED:mybatis自帶的數(shù)據(jù)源-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/> <!--加載mysql驅(qū)動:com.mysql.jdbc.Driver-->
                <property name="url" value="jdbc:mysql://localhost:3306/test"/><!--指定連接的數(shù)據(jù)庫路徑:jdbc:mysql://localhost:3306/數(shù)據(jù)庫名-->
                <property name="username" value="..."/><!--數(shù)據(jù)庫配置時的用戶名-->
                <property name="password" value="..."/><!--數(shù)據(jù)庫配置時的密碼-->
            </dataSource>
        </environment>
    </environments>
    <!--指定mapper.xml文件的路徑(maven項目是從resources源文件下找資源)-->
    <mappers>
        <mapper resource="Mapper/UserDaoMapper.xml"></mapper>
    </mappers>

????3.5擅憔、User實體類

package com.fan.entity;

public class User {
    private Integer id;
    private String name;
    private String sex;

    public User() {
    }

    public User(Integer id, String name, String sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }

    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 String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

????3.6鸵闪、UserDao接口類

package com.fan.dao;

import com.fan.entity.User;

public interface UserDao {
    //新增用戶
    public int addUser(User user);
}

????3.7、UserMapper.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.fan.dao.UserDao">
    <insert id="addUser">
        insert into users(id,name,sex) values(#{id},#{name},#{sex})
    </insert>
</mapper>

????3.8暑诸、測試類

import com.fan.entity.User;
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 java.io.IOException;
import java.io.Reader;

public class Demo1 {
    public static void main(String[] args) {
        Reader resourceAsReader=null;
        SqlSession sqlSession=null;
        try {
            User user=new User(1,"張三","男");
            resourceAsReader = Resources.getResourceAsReader("mybatis-config.xml");
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            SqlSessionFactory factory = builder.build(resourceAsReader);
            sqlSession = factory.openSession();
            int i = sqlSession.insert("com.fan.dao.UserDao.addUser", user);
            sqlSession.commit();
            System.out.println("插入成功"+i+"條");

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
           if(sqlSession!=null){
               sqlSession.close();
           }
           if(resourceAsReader!=null){
               try {
                   resourceAsReader.close();
               } catch (IOException e) {
                   e.printStackTrace();
               }
           }
        }

    }
}

4蚌讼、下期預告

用mybatis實現(xiàn)CRUD
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市个榕,隨后出現(xiàn)的幾起案子篡石,更是在濱河造成了極大的恐慌,老刑警劉巖西采,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凰萨,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機胖眷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門武通,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人珊搀,你說我怎么就攤上這事冶忱。” “怎么了境析?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵囚枪,是天一觀的道長。 經(jīng)常有香客問我劳淆,道長眶拉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任憔儿,我火速辦了婚禮忆植,結果婚禮上,老公的妹妹穿的比我還像新娘谒臼。我一直安慰自己朝刊,他們只是感情好,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布蜈缤。 她就那樣靜靜地躺著拾氓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪底哥。 梳的紋絲不亂的頭發(fā)上咙鞍,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天,我揣著相機與錄音趾徽,去河邊找鬼续滋。 笑死,一個胖子當著我的面吹牛孵奶,可吹牛的內(nèi)容都是我干的疲酌。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼了袁,長吁一口氣:“原來是場噩夢啊……” “哼朗恳!你這毒婦竟也來了?” 一聲冷哼從身側響起载绿,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤粥诫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后崭庸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怀浆,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡劝堪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了揉稚。 大學時的朋友給我發(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
  • 我被黑心中介騙來泰國打工炕贵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留梆奈,地道東北人。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓鲁驶,卻偏偏與公主長得像鉴裹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子钥弯,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349