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