一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務(wù)器之家 - 編程語言 - Java教程 - 詳解MyBatis開發(fā)Dao層的兩種方式(Mapper動(dòng)態(tài)代理方式)

詳解MyBatis開發(fā)Dao層的兩種方式(Mapper動(dòng)態(tài)代理方式)

2021-06-22 13:11謝亞峰 Java教程

這篇文章主要介紹了詳解MyBatis開發(fā)Dao層的兩種方式(Mapper動(dòng)態(tài)代理方式),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

mybatis開發(fā)原始dao層請(qǐng)閱讀我的上一篇博客:mybatis開發(fā)dao層的兩種方式(原始dao層開發(fā))

接上一篇博客繼續(xù)介紹mybatis開發(fā)dao層的第二種方式:mapper動(dòng)態(tài)代理方式

mapper接口開發(fā)方法只需要程序員編寫mapper接口(相當(dāng)于dao接口),由mybatis框架根據(jù)接口定義創(chuàng)建接口的動(dòng)態(tài)代理對(duì)象,代理對(duì)象的方法體同上一篇博客中dao接口實(shí)現(xiàn)類方法。

mapper接口開發(fā)需要遵循以下規(guī)范:

(1)mapper.xml文件中的namespace與mapper接口的類路徑相同。

(2)mapper接口方法名和mapper.xml中定義的每個(gè)statement的id相同

(3)mapper接口方法的輸入?yún)?shù)類型和mapper.xml中定義的每個(gè)sql 的parametertype的類型相同

(4)mapper接口方法的輸出參數(shù)類型和mapper.xml中定義的每個(gè)sql的resulttype的類型相同

1、定義mapper映射文件usermapper.xml(內(nèi)容同user.xml),需要修改namespace的值為 usermapper接口路徑。將usermapper.xml放在classpath 下sqlmapperr目錄下。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?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.xyfer.mapper.usermapper">
  <!-- 根據(jù)id查詢用戶 -->
  <select id="getuserbyid" parametertype="int" resulttype="com.xyfer.po.user">
    select * from user where id = #{id}
  </select>
  <!-- 添加用戶 -->
  <insert id="insertuser" parametertype="com.xyfer.po.user">
  <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})
  </insert>
  <!-- 修改用戶 -->
  <update id="updateuser" parametertype="com.xyfer.po.user">
    update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}
    where id=#{id}
  </update>
  <!-- 刪除用戶 -->
  <delete id="deleteuserbyid" parametertype="int">
    delete from user where id=#{id}
  </delete>
 </mapper>

2、usermapper.java接口文件

?
1
2
3
4
5
6
7
8
9
10
11
12
package com.xyfer.mapper;
 
import com.xyfer.po.user;
 
public interface usermapper {
  
  public user getuserbyid(int id);  //根據(jù)id值查詢一個(gè)用戶
  public void insertuser(user user); //新增一個(gè)用戶
  public void updateuser(user user); //修改一個(gè)用戶
  public void deleteuser(int id);  //刪除一個(gè)用戶
 
}

接口定義有如下特點(diǎn):

(1)usermapper接口方法名和mapper.xml中定義的statement的id相同

(2)usermapper接口方法的輸入?yún)?shù)類型和mapper.xml中定義的statement的parametertype的類型相同

(3) usermapper接口方法的輸出參數(shù)類型和mapper.xml中定義的statement的resulttype的類型相同

3、在sqlmapconfig.xml文件中加載usermapper.xml文件

?
1
2
3
<mappers>
  <mapper resource="usermapper.xml"/>
</mappers>

4、測(cè)試

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package com.xyfer.mapper;
 
import static org.junit.assert.*;
 
import java.io.inputstream;
import java.util.date;
 
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 com.xyfer.po.user;
 
import junit.framework.testcase;
 
public class usermappertest extends testcase{
 
  private sqlsessionfactory sqlsessionfactory;
  
  protected void setup() throws exception {
    sqlsessionfactorybuilder sessionfactorybuilder = new sqlsessionfactorybuilder();
    inputstream inputstream = resources.getresourceasstream("sqlmapconfig.xml");
    sqlsessionfactory = sessionfactorybuilder.build(inputstream);
  }
 
 
  @test
  public void testgetuserbyid() {
    //獲取sqlsession
    sqlsession sqlsession = sqlsessionfactory.opensession();
    //獲取usermapper接口代理對(duì)象
    usermapper usermapper = sqlsession.getmapper(usermapper.class);
    //調(diào)用代理對(duì)象方法
    user user = usermapper.getuserbyid(10);
    //打印結(jié)果
    system.out.println(user);
    //關(guān)閉sqlsession
    sqlsession.close();
  }
 
  @test
  public void testinsertuser() {
    //獲取sqlsession
    sqlsession sqlsession = sqlsessionfactory.opensession();
    //獲取usermapper接口代理對(duì)象
    usermapper usermapper = sqlsession.getmapper(usermapper.class);
    //新建一個(gè)對(duì)象
    user user = new user();
    user.setusername("小謝");
    user.setsex("男");
    user.setbirthday(new date());
    user.setaddress("浙江省杭州市");
    //調(diào)用代理對(duì)象方法
    usermapper.insertuser(user);
    //關(guān)閉sqlsession
    sqlsession.close();
  }
 
  @test
  public void testupdateuser() {
    //獲取sqlsession
    sqlsession sqlsession = sqlsessionfactory.opensession();
    //獲取usermapper接口代理對(duì)象
    usermapper usermapper = sqlsession.getmapper(usermapper.class);
    //新建一個(gè)對(duì)象
    user user = new user();
    user.setusername("小謝");
    user.setsex("男");
    user.setbirthday(new date());
    user.setaddress("上海市");
    //調(diào)用代理對(duì)象方法
    usermapper.updateuser(user);
    //關(guān)閉sqlsession
    sqlsession.close();
  }
 
  @test
  public void testdeleteuser() {
    //獲取sqlsession
    sqlsession sqlsession = sqlsessionfactory.opensession();
    //獲取usermapper接口代理對(duì)象
    usermapper usermapper = sqlsession.getmapper(usermapper.class);
    //調(diào)用代理對(duì)象方法
    usermapper.deleteuser(6);
    //關(guān)閉sqlsession
    sqlsession.close();
  }
 
}

以上步驟,完成mybatis框架以mapper動(dòng)態(tài)代理方式開發(fā)dao層,并對(duì)數(shù)據(jù)庫進(jìn)行增刪改查操作。

需要注意的是,上文提到的config文件夾和sqlmapper文件夾均為資源文件夾(source folder),默認(rèn)會(huì)加載該路徑下的文件。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://www.cnblogs.com/xyfer1018/p/10117227.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本红怡院亚洲红怡院最新 | 女女同性做爰xxoo亲吻 | 大ji巴好好爽好深网站 | 成人性生交大片免费看软件 | 97国产精品久久碰碰牛牛 | 亚洲欧美日韩综合在线 | 久久久久伊人 | 国产日产韩产麻豆1区 | 女性性色生活片免费观看 | 四虎影视国产精品婷婷 | 精品国产成人a区在线观看 精品国产91久久久久久久 | 日韩精品视频在线播放 | 手机在线免费观看高清 | 久久精品AV一区二区无码 | 欧美三级不卡在线观线看高清 | 无套啪啪 | 性做久久久久免费观看 | 婷婷久久综合 | 成人网欧美亚洲影视图片 | 亚洲成av人片天堂网 | 忘忧草在线 | 双子母性本能在线观看 | 日本嫩小xxxxhd| 国产最强大片免费视频 | 亚洲精品卡一卡2卡3卡4卡 | 半挠脚心半黄的网站 | 青草青青在线视频观看 | www91在线观看 | 亚洲情射 | 嫩草影院地址一地址二 | 菠萝视频5正版在线观看 | 精品小视频在线观看 | 免费在线观看成年人视频 | 青草色视频 | freexxxx性护士第一次 | 狠狠插综合网 | 国产日本欧美亚洲精品视 | 欧美老人与小伙子性生交 | 欧美一区二区不卡视频 | 成人永久免费 | 国产成人亚洲综合a∨婷婷 国产成人亚洲精品乱码在线观看 |