Ⅵ.Mybatis

1.jdbc缺點(diǎn)

jdbc缺點(diǎn)

2.mybatis介紹

mybatis簡(jiǎn)介

mybatis結(jié)構(gòu)

3.配置

3.1依賴

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.2.8</version>
</dependency>

3.2mybatis-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">
<!-- 根標(biāo)簽 -->
<configuration>
<properties>
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis-110?useUnicode=true&amp;characterEncoding=utf-8&amp;allowMultiQueries=true"/>
    <property name="username" value="root"/>
        <property name="password" value="123456"/>
   </properties>

   <!-- 環(huán)境坷衍,可以配置多個(gè),default:指定采用哪個(gè)環(huán)境 -->
   <environments default="test">
      <!-- id:唯一標(biāo)識(shí) -->
      <environment id="test">
         <!-- 事務(wù)管理器蛉威,JDBC類型的事務(wù)管理器 -->
         <transactionManager type="JDBC" />
         <!-- 數(shù)據(jù)源脱茉,池類型的數(shù)據(jù)源 -->
         <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver" />
            <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis-110" />
            <property name="username" value="root" />
            <property name="password" value="123456" />
         </dataSource>
      </environment>
      <environment id="development">
         <!-- 事務(wù)管理器,JDBC類型的事務(wù)管理器 -->
         <transactionManager type="JDBC" />
         <!-- 數(shù)據(jù)源坠非,池類型的數(shù)據(jù)源 -->
         <dataSource type="POOLED">
            <property name="driver" value="${driver}" /> <!-- 配置了properties浮创,所以可以直接引用 -->
            <property name="url" value="${url}" />
            <property name="username" value="${username}" />
            <property name="password" value="${password}" />
         </dataSource>
      </environment>
   </environments>
  </configuration>

3.3 map.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:根標(biāo)簽集侯,namespace:命名空間,隨便寫试躏,一般保證命名空間唯一 -->
<mapper namespace="MyMapper">
   <!-- statement猪勇,內(nèi)容:sql語(yǔ)句。id:唯一標(biāo)識(shí)颠蕴,隨便寫泣刹,在同一個(gè)命名空間下保持唯一
      resultType:sql語(yǔ)句查詢結(jié)果集的封裝類型,tb_user即為數(shù)據(jù)庫(kù)中的表
    -->
   <select id="selectUser" resultType="com.zpc.mybatis.User">
      select * from tb_user where id = #{id}
   </select>
</mapper>

3.3 修改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">
<!-- 根標(biāo)簽 -->
<configuration>
   <!-- 環(huán)境,可以配置多個(gè)犀被,default:指定采用哪個(gè)環(huán)境 -->
   <environments default="test">
      <!-- id:唯一標(biāo)識(shí) -->
      <environment id="test">
         <!-- 事務(wù)管理器椅您,JDBC類型的事務(wù)管理器 -->
         <transactionManager type="JDBC" />
         <!-- 數(shù)據(jù)源,池類型的數(shù)據(jù)源 -->
         <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver" />
            <property name="url" value="jdbc:mysql://127.0.0.1:3306/ssmdemo" />
            <property name="username" value="root" />
            <property name="password" value="123456" />
         </dataSource>
      </environment>
   </environments>
   <mappers>
     <mapper resource="mappers/MyMapper.xml" />
   </mappers>
</configuration>

3.4 實(shí)體類

import java.text.SimpleDateFormat;
import java.util.Date;

public class User {
    private String id;
    private String userName;
    private String password;
    private String name;
    private Integer age;
    private Integer sex;
    private Date birthday;
    private String created;
    private String updated;

    public String getId() {
        return id;
    }

    public void setId(String 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;
    }

    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;
    }

    public Integer getSex() {
        return sex;
    }

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

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getCreated() {
        return created;
    }

    public void setCreated(String created) {
        this.created = created;
    }

    public String getUpdated() {
        return updated;
    }

    public void setUpdated(String updated) {
        this.updated = updated;
    }

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", userName='" + userName + '\'' +
                ", password='" + password + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                ", birthday='" + new SimpleDateFormat("yyyy-MM-dd").format(birthday) + '\'' +
                ", created='" + created + '\'' +
                ", updated='" + updated + '\'' +
                '}';
    }
}

3.5 test類

import com.zpc.test.pojo.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.InputStream;

public class MybatisTest {
   public static void main(String[] args) throws Exception {
      // 指定全局配置文件
      String resource = "mybatis-config.xml";
      // 讀取配置文件
      InputStream inputStream = Resources.getResourceAsStream(resource);
      // 構(gòu)建sqlSessionFactory
      SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      // 獲取sqlSession
      SqlSession sqlSession = sqlSessionFactory.openSession();
      try {
         // 操作CRUD寡键,第一個(gè)參數(shù):指定statement掀泳,規(guī)則:命名空間+“.”+statementId
         // 第二個(gè)參數(shù):指定傳入sql的參數(shù):這里是用戶id
         User user = sqlSession.selectOne("MyMapper.selectUser", 1);
         System.out.println(user);
      } finally {
         sqlSession.close();
      }
   }
}

3.6結(jié)構(gòu)

文件結(jié)構(gòu)

4.mybatis的使用步驟總結(jié)

1)配置mybatis-config.xml 全局的配置文件 (1、數(shù)據(jù)源西轩,2开伏、外部的mapper)
2)創(chuàng)建SqlSessionFactory
3)通過SqlSessionFactory創(chuàng)建SqlSession對(duì)象
4)通過SqlSession操作數(shù)據(jù)庫(kù) CRUD
5)調(diào)用session.commit()提交事務(wù)
6)調(diào)用session.close()關(guān)閉會(huì)話

5. 配置文件詳解

5.1 mybatis-config

jdbc原生管理
<transactionManager type="JDBC" />
轉(zhuǎn)交給其他管理,如spring
<transactionManager type="MANAGED" />

使用數(shù)據(jù)庫(kù)連接池
<dataSource type="POOLED">
不使用數(shù)據(jù)庫(kù)連接池
<dataSource type="UNPOOLED">
其他語(yǔ)言連接
<dataSource type="JNDI">

5.2數(shù)據(jù)庫(kù)連接池

在內(nèi)存中開辟一塊空間遭商,存放多個(gè)數(shù)據(jù)庫(kù)連接對(duì)象固灵。
JDBC Tomcat Pool:直接由JDBC產(chǎn)生連接池
狀態(tài):
active:當(dāng)前連接對(duì)象被應(yīng)用程序使用中
idle:空閑狀態(tài),等待應(yīng)用程序使用
目的:
在高頻率訪問數(shù)據(jù)庫(kù)時(shí)劫流,使用數(shù)據(jù)庫(kù)連接池可以降低服務(wù)器系統(tǒng)壓力巫玻,提升服務(wù)器運(yùn)行效率,小型項(xiàng)目不適用數(shù)據(jù)庫(kù)連接池祠汇。
實(shí)現(xiàn)JDBC tomcat pool
在web項(xiàng)目的META.INF中存放context.xml,tomcat中所有項(xiàng)目所共享仍秤。

<Resource
  driverClassName=""
  url=""
  usename=""
  password=""
  maxActive=""
  maxIdle=""
  name="test"
  auth="Container"
  maxWait="10000"
  type="javax.sql.Datasource"
/>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市可很,隨后出現(xiàn)的幾起案子诗力,更是在濱河造成了極大的恐慌,老刑警劉巖我抠,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苇本,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡菜拓,警方通過查閱死者的電腦和手機(jī)瓣窄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)纳鼎,“玉大人俺夕,你說(shuō)我怎么就攤上這事裳凸。” “怎么了劝贸?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵姨谷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我映九,道長(zhǎng)梦湘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任氯迂,我火速辦了婚禮践叠,結(jié)果婚禮上言缤,老公的妹妹穿的比我還像新娘嚼蚀。我一直安慰自己,他們只是感情好管挟,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布轿曙。 她就那樣靜靜地躺著,像睡著了一般僻孝。 火紅的嫁衣襯著肌膚如雪导帝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天穿铆,我揣著相機(jī)與錄音您单,去河邊找鬼。 笑死荞雏,一個(gè)胖子當(dāng)著我的面吹牛虐秦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凤优,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼悦陋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了筑辨?” 一聲冷哼從身側(cè)響起俺驶,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎棍辕,沒想到半個(gè)月后暮现,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡楚昭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年送矩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哪替。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡栋荸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晌块,我是刑警寧澤爱沟,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站匆背,受9級(jí)特大地震影響呼伸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钝尸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一括享、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧珍促,春花似錦铃辖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至穴翩,卻和暖如春犬第,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芒帕。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工歉嗓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人背蟆。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓鉴分,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親淆储。 傳聞我的和親對(duì)象是個(gè)殘疾皇子冠场,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

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

  • 1. 簡(jiǎn)介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL本砰、存儲(chǔ)過程以及高級(jí)映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,527評(píng)論 0 4
  • 1.1 框架 框架(Framework)是整個(gè)或部分系統(tǒng)的可重用設(shè)計(jì)碴裙,表現(xiàn)為一組抽象構(gòu)件及構(gòu)件實(shí)例間交互的方法...
    遼A丶孫悟空閱讀 1,221評(píng)論 0 21
  • 開發(fā)Web應(yīng)用,數(shù)據(jù)的存儲(chǔ)和處理往往離不開數(shù)據(jù)庫(kù)和SQL語(yǔ)句点额。在使用Java開發(fā)的Web應(yīng)用中舔株,自然也少不了連接數(shù)...
    灰色程序閱讀 1,473評(píng)論 0 25
  • 1. Mybatis的介紹 MyBatis 本是apache的一個(gè)開源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由ap...
    itzhouq的筆記閱讀 670評(píng)論 0 5
  • 帶笑瘦梅競(jìng)乾坤 浩瀚無(wú)雪抹傷痕 鐵骨婀娜吐艷美 白雪盈盈夢(mèng)里存
    左耳朵冷閱讀 187評(píng)論 0 0