Mapper代理開發(fā)方法(程序員只需要寫mapper接口)

編寫mapper.xml映射文件

程序員編寫mapper接口需要遵循一些開發(fā)規(guī)范堕仔,mybatis可以自動(dòng)生成mapper接口實(shí)現(xiàn)類代理對(duì)象

開發(fā)規(guī)范 (mapper接口和mapper.xml映射文件之間的關(guān)系):
1.在mapper.xml中namespace和mapper接口的地址一致
2.mapper.java接口中的方法名和mapper.xml中statement的id一致
3.mapper.java接口中的方法的輸入?yún)?shù)類型和mapper.xml中statement的parameterType屬性值一致
4.mapper.java接口中的方法的返回值類型和mapper.xml中statement的resultType屬性值一致

UserMapper.xml

package cn.ztc.mybatis.mapper;

import static org.junit.Assert.*;

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 org.junit.Before;
import org.junit.Test;

import cn.ztc.mybatis.po.User;

public class UserMapperTest {
    
    private SqlSessionFactory sqlSessionFactory;
    //此方法在執(zhí)行testFindUserById方法之前執(zhí)行
    @Before
    public void setUp() throws Exception{
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    @Test
    public void testFindUserById() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //創(chuàng)建UserMapper對(duì)象擂橘,Mybatis自動(dòng)生成mapper代理對(duì)象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //調(diào)用UserMapper的方法
        User user = userMapper.findUserById(24);
        
        sqlSession.close();
        
        System.out.println(user);
    }
    
    @Test
    public void testFindUserByName() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //創(chuàng)建UserMapper對(duì)象,Mybatis自動(dòng)生成mapper代理對(duì)象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //調(diào)用UserMapper的方法
        List<User> list = userMapper.findUserByName("小明");
        
        sqlSession.close();
        
        System.out.println(list);
    }

}

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等于mapper接口的地址 -->
<mapper namespace="cn.ztc.mybatis.mapper.UserMapper">
    <!-- 
          需求:根據(jù)id獲取用戶信息
         id:表示表示映射文件中的sql通贞,將sql語句封裝到mappedStatement對(duì)象中,將id稱為Statement的 id
         parameterType:指定出入?yún)?shù)類型
         resultType:指定輸出參數(shù)類型
         #{}表示一個(gè)占位符
         #{id}接收輸入?yún)?shù)恼五,參數(shù)名為id昌罩,如果輸入的是簡(jiǎn)單類型,#{}中的參數(shù)名可以任意
    -->
    <select id="findUserById" parameterType="int" resultType="cn.ztc.mybatis.po.User">
        select * from user where id = #{id}
    </select>
    
    <!-- 
        需求:自定義條件查詢用戶列表 灾馒,可能返回多條數(shù)據(jù)
        resultType:指定的就是單條記錄所使用的java對(duì)象類型
        ${}表示拼接sql串茎用,將接收到的參數(shù)不加任何修飾拼接在sql串中
        使用${}可能會(huì)引起sqk注入
        ${value}接收輸入?yún)?shù),如果輸入的是簡(jiǎn)單類型,#{}中的參數(shù)名只能是value
    -->
    <select id="findUserByName" parameterType="java.lang.String" resultType="cn.ztc.mybatis.po.User">
        select * from user where username like '%${value}%'
    </select>
    
    <!-- 
        添加用戶
        parameterType:輸入?yún)?shù)類型是pojo
        #{}中指定pojo的屬性名
     -->
    <insert id="insertUser" parameterType="cn.ztc.mybatis.po.User">
        <!-- 
            將插入數(shù)據(jù)庫的主鍵返回到對(duì)象中
            select LAST_INSERT_ID():得到insert記錄的主鍵值轨功,只適用于自增主鍵
            keyProperty:將查詢到的主鍵值設(shè)置到parameterType指定對(duì)象的某個(gè)屬性
            order:相對(duì)于insert語句來說,select LAST_INSERT_ID()的執(zhí)行順序
         -->
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
            select LAST_INSERT_ID()
        </selectKey>
        insert into user (username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address})
        <!-- 
            使用mysql的uuid生成主鍵
            執(zhí)行過程:
            首先用過uuid()得到主鍵旭斥,將主鍵設(shè)置到user對(duì)象的id屬性中
            其次在執(zhí)行insert,從user對(duì)象中取出id屬性值
         -->
         <!-- <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
            select uuid()
        </selectKey>
        insert into user (id,username,birthday,sex,address) values (#{id},#{username},#{birthday},#{sex},#{address}) -->
    </insert>
    
    <!-- 刪除用戶 -->
    <delete id="deleteUser" parameterType="java.lang.Integer">
        delete from user where id=#{id}
    </delete>
    
    <!-- 
        更新用戶 
        #{id}:對(duì)應(yīng)pojo的屬性值
    -->
    <update id="updateUser" parameterType="cn.ztc.mybatis.po.User">
        update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id = #{id}
    </update>
</mapper>

UserMapperTest.java

package cn.ztc.mybatis.mapper;

import static org.junit.Assert.*;

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 org.junit.Before;
import org.junit.Test;

import cn.ztc.mybatis.po.User;

public class UserMapperTest {
    
    private SqlSessionFactory sqlSessionFactory;
    //此方法在執(zhí)行testFindUserById方法之前執(zhí)行
    @Before
    public void setUp() throws Exception{
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    @Test
    public void testFindUserById() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //創(chuàng)建UserMapper對(duì)象古涧,Mybatis自動(dòng)生成mapper代理對(duì)象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //調(diào)用UserMapper的方法
        User user = userMapper.findUserById(24);
        
        sqlSession.close();
        
        System.out.println(user);
    }
    
    @Test
    public void testFindUserByName() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //創(chuàng)建UserMapper對(duì)象垂券,Mybatis自動(dòng)生成mapper代理對(duì)象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //調(diào)用UserMapper的方法
        List<User> list = userMapper.findUserByName("小明");
        
        sqlSession.close();
        
        System.out.println(list);
    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市羡滑,隨后出現(xiàn)的幾起案子圆米,更是在濱河造成了極大的恐慌,老刑警劉巖啄栓,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異也祠,居然都是意外死亡昙楚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門诈嘿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來堪旧,“玉大人,你說我怎么就攤上這事奖亚〈久危” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵昔字,是天一觀的道長(zhǎng)爆袍。 經(jīng)常有香客問我,道長(zhǎng)作郭,這世上最難降的妖魔是什么陨囊? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮夹攒,結(jié)果婚禮上蜘醋,老公的妹妹穿的比我還像新娘。我一直安慰自己咏尝,他們只是感情好压语,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著编检,像睡著了一般胎食。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上允懂,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天斥季,我揣著相機(jī)與錄音,去河邊找鬼。 笑死酣倾,一個(gè)胖子當(dāng)著我的面吹牛舵揭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播躁锡,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼午绳,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了映之?” 一聲冷哼從身側(cè)響起拦焚,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎杠输,沒想到半個(gè)月后赎败,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蠢甲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年僵刮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹦牛。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡搞糕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出曼追,到底是詐尸還是另有隱情窍仰,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布礼殊,位于F島的核電站驹吮,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏晶伦。R本人自食惡果不足惜钥屈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坝辫。 院中可真熱鬧篷就,春花似錦、人聲如沸近忙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽及舍。三九已至未辆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锯玛,已是汗流浹背咐柜。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工兼蜈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拙友。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓为狸,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親遗契。 傳聞我的和親對(duì)象是個(gè)殘疾皇子辐棒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

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