Mybatis-01(基礎(chǔ))

Mybatis是基于Java的持久層框架(支持普通SQL查詢(xún),存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架)
作用:
簡(jiǎn)化jdbc操作帚豪,不用專(zhuān)注于怎么寫(xiě)這個(gè)操作,而是專(zhuān)注于業(yè)務(wù)和SQL

MyBatis可以使用簡(jiǎn)單的XML注解用于配置和原始映射,將接口和Java 的POJO(Plain Old Java Objects,普通的Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄表窘。

ORM:對(duì)象關(guān)系映射
簡(jiǎn)單概括:更加簡(jiǎn)化jdbc代碼,簡(jiǎn)化持久層甜滨,sql語(yǔ)句從代碼中分離乐严,利用反射,將表中數(shù)據(jù)與java bean 屬性一一映 射即ORM(Object Relational Mapping 對(duì)象關(guān)系映射)

基礎(chǔ)使用:


使用

1衣摩、 依賴(lài)包導(dǎo)入
新建maven項(xiàng)目 ,pom文件添加依賴(lài)jar

<!-- mybatis jar 包依賴(lài) -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.1</version>
        </dependency>
        <!-- 數(shù)據(jù)庫(kù)驅(qū)動(dòng) -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.39</version>
        </dependency>
        <!-- log4j日志打印 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
        </dependency>

2昂验、log4j 日志添加
在src/main/resources 資源包下添加log4j日志輸出properties文件,便于查看日志輸出信息
log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
#Consoleoutput...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

3艾扮、resources目錄下配置文件添加
新建mybatis.xml文件既琴,并加入配置信息如下(數(shù)據(jù)庫(kù)名mybatis,表 user)
db.properties

#鍵值對(duì),前后不要有空格 
#5.x版本,6.x版本之后為 com.mysql.cj.jdbc.Driver
driver=com.mysql.jdbc.Driver
#5.x版本,6.x版本之后為 jdbc:mysql://localhost:3306/ebuy?serverTimezone=GMT%2B8&characterEncoding=utf8&useUnicode=true&useSSL=false
url=jdbc:mysql://localhost:3306/class?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username=root
password=123456

#鍵值對(duì)栏渺,前后不要有空格
#5.x版本,6.x版本之后為 com.mysql.cj.jdbc.Driver
driver1=com.mysql.jdbc.Driver
#5.x版本,6.x版本之后為 jdbc:mysql://localhost:3306/ebuy?serverTimezone=GMT%2B8&characterEncoding=utf8&useUnicode=true&useSSL=false
url1=jdbc:mysql://localhost:3306/class?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username1=root
password1=123456

mybatis.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">
<!-- 添加數(shù)據(jù)庫(kù)連接相關(guān)配置信息 -->
<configuration>
    <!--引入數(shù)據(jù)庫(kù)配置文件-->
    <properties resource="db.properties"/>

<!--    &lt;!&ndash;類(lèi)型別名&ndash;&gt;
    <typeAliases>
        &lt;!&ndash;單獨(dú)指定別名&ndash;&gt;
        &lt;!&ndash;<typeAlias type="com.nanda.po.Account" alias="account"/>&ndash;&gt;
        <package name="com.nanda.po"/>
    </typeAliases>-->

    <environments default="development">
        <environment id="development">
            <!-- 加入事務(wù)控制 -->
            <transactionManager type="jdbc" />
            <!-- 配置數(shù)據(jù)庫(kù)連接信息 -->
            <dataSource type="pooled">
                <property name="driver" value="${driver}" />
                <property name="url" value="${url}" />
                <property name="username" value="${username}" />
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
        <environment id="test">
            <!-- 加入事務(wù)控制 -->
            <transactionManager type="jdbc" />
            <!-- 配置數(shù)據(jù)庫(kù)連接信息 -->
            <dataSource type="pooled">
                <property name="driver" value="${driver1}" />
                <property name="url" value="${url1}" />
                <property name="username" value="${username1}" />
                <property name="password" value="${password1}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- mapper 配置文件指定 文件數(shù)量可配置多個(gè)-->
    <mappers>
        <!--引入單個(gè)-->
         <mapper resource="com/lmw/dao/ISuerDao.xml" />
        <!--包掃描引入映射文件-->
        <!--<package name="com.nanda.mapper"/>-->
    </mappers>

</configuration>

4呛梆、映射文件添加

<?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">
<!--
    1.命名空間配置 全局唯一 包名+文件名
    2.配置Mapped Statement
    3. statement配置
        id 值聲明statement編號(hào) 同一命名空間(同一文件)下不可重復(fù)
        parameterType 輸入?yún)?shù)即占位符的數(shù)據(jù)類(lèi)型 類(lèi)型可以是 基本數(shù)據(jù)類(lèi)型,字符串,java bean ,map,list等
        resultType 輸出結(jié)果 類(lèi)型可以是基本數(shù)據(jù)類(lèi)型,字符串,java bean,map等
        statement 描述 即待執(zhí)行的sql
        #{id} 占位符 變量名為id/value 均可 ${value} 變量名必須為value 字符串拼接形式 無(wú)法避免sql 注入
-->
<mapper namespace="com.lmw.dao.ISuerDao">
    <!-- 查詢(xún)客戶(hù)-->
    <select id="findAll"  resultType="com.lmw.domain.Suser">
        SELECT * FROM suser
    </select>
</mapper>

5.實(shí)體類(lèi)Customer添加
需要實(shí)現(xiàn)序列化接口

6.在父類(lèi)工程pom獲取資源

7锐涯、測(cè)試

    public static void main(String[] args) throws IOException {

        /**
         a)磕诊、讀取mybatis的配置文件
         b)、加載配置文件創(chuàng)建SqlSessionFactory
         c)、根據(jù)SqlSessionFactory創(chuàng)建SqlSession
         d)霎终、通過(guò)sqlSession操作數(shù)據(jù)庫(kù)
         e)滞磺、處理結(jié)果
         f)、關(guān)閉session
         */
        InputStream is = Resources.getResourceAsStream("mybatis.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        // 指定數(shù)據(jù)源
        //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is,"test");
        SqlSession session = sessionFactory.openSession();

        /*不使用映射文件包掃描*/
        //List<Suser> account = session.selectOne("com.nanda.mapper.AccountMapper.queryAccountById", 1);
        ISuerDao userDao = session.getMapper(ISuerDao.class);
        List<Suser> users = userDao.findAll();
        for (Suser user : users) {
            System.out.println(user);
        }

        List<Suser> accounts = session.selectList("com.lmw.dao.ISuerDao.findAll");
        for (Suser user : accounts) {
            System.out.println(user);
        }
        session.close();
        is.close();
    }
實(shí)現(xiàn)的設(shè)計(jì)模式
自定義Mybatis分析.png
properties:resource
properties:url
typeAliaser和package

<result column="數(shù)據(jù)庫(kù)字段名" property="實(shí)體類(lèi)屬性" jdbcType="數(shù)據(jù)庫(kù)字段類(lèi)型" />

resultMap 標(biāo)簽  手動(dòng)指定數(shù)據(jù)庫(kù)字段和java字段的映射關(guān)系
    可以通過(guò)數(shù)據(jù)庫(kù) sql as  指定別名
    <resultMap id="card_map" type="card">
        <id column="id" property="id"></id>
        <result column="user_id" property="userId"></result>
        <result column="card_num" property="cardNum"></result>
    </resultMap>
    <select id="queryCardById" parameterType="int" resultMap="card_map">
        select id,user_id,card_num from card where id = #{id};
    </select>

#{} 安全的 ? '值'
${}不安全的 ? 值 不能防止sql注入

模糊查詢(xún)注意:
    uname like '%${uname}%'
    aname like CONCAT('%',#{aname},'%')
      sql公共抽取
<sql id="defaultSuser">
        SELECT * FROM suser
    </sql>

    <!-- 查詢(xún)客戶(hù)-->
    <select id="findAll"  resultType="com.lmw.domain.Suser">
        <include refid="defaultSuser"></include>
    </select>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末莱褒,一起剝皮案震驚了整個(gè)濱河市击困,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌广凸,老刑警劉巖阅茶,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異谅海,居然都是意外死亡脸哀,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)扭吁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)撞蜂,“玉大人,你說(shuō)我怎么就攤上這事侥袜◎蚬睿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵枫吧,是天一觀的道長(zhǎng)浦旱。 經(jīng)常有香客問(wèn)我,道長(zhǎng)由蘑,這世上最難降的妖魔是什么闽寡? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮尼酿,結(jié)果婚禮上爷狈,老公的妹妹穿的比我還像新娘。我一直安慰自己裳擎,他們只是感情好涎永,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著鹿响,像睡著了一般羡微。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惶我,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天妈倔,我揣著相機(jī)與錄音,去河邊找鬼绸贡。 笑死盯蝴,一個(gè)胖子當(dāng)著我的面吹牛毅哗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捧挺,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼虑绵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了闽烙?” 一聲冷哼從身側(cè)響起翅睛,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎黑竞,沒(méi)想到半個(gè)月后捕发,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡很魂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年爬骤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莫换。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡霞玄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拉岁,到底是詐尸還是另有隱情坷剧,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布喊暖,位于F島的核電站惫企,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏陵叽。R本人自食惡果不足惜狞尔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望巩掺。 院中可真熱鬧偏序,春花似錦、人聲如沸胖替。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)独令。三九已至端朵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間燃箭,已是汗流浹背冲呢。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留招狸,地道東北人敬拓。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓瓤湘,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親恩尾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354