這篇文章將為大家詳細(xì)講解有關(guān)Mybatis中怎么實(shí)現(xiàn)Mapper動(dòng)態(tài)代理,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
創(chuàng)新互聯(lián)建站于2013年開(kāi)始,先為南潯等服務(wù)建站,南潯等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為南潯企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
一、什么是Mapper的動(dòng)態(tài)代理
采用Mapper動(dòng)態(tài)代理方法只需要編寫相應(yīng)的Mapper接口(相當(dāng)于Dao接口),那么Mybatis框架根據(jù)接口定義創(chuàng)建接口的動(dòng)態(tài)代理對(duì)象,代理對(duì)象的方法體同Dao接口實(shí)現(xiàn)類方法。
Mapper接口開(kāi)發(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的類型相同。
二、實(shí)例演示
這里只演示了利用代理進(jìn)行查詢和插入的操作,其他操作與之情況類似。只需要在接口中定義相關(guān)方法,然后在xml中進(jìn)行相關(guān)配置即可。
這個(gè)演示是建立在前一個(gè)增刪改查的項(xiàng)目基礎(chǔ)上。項(xiàng)目整體目錄大致相同?;緦傩晕募畔⒁蚕嗤?。這里不作詳述。
1、新建一個(gè)com.kang.mapper的包,定義map接口,接口名任意,這里是UserMapper。
package com.kang.mapper; import java.util.List; import com.kang.pojo.User; public interface UserMapper { //根據(jù)用戶id查詢用戶信息 public User findUserById(int id) throws Exception; //查詢用戶列表 public List<User> findUserByUsername(String username) throws Exception; //添加用戶信息 public void insertUser(User user)throws Exception; }
2、配置xml文件
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="com.kang.mapper.UserMapper"> <!-- 注意這里的 namespace必須對(duì)應(yīng)著map接口的全類名--> <select id="findUserById" parameterType="int" resultType="user"> select * from user where id = #{id} </select> <select id="findUserByUsername" parameterType="java.lang.String" resultType="user"> select * from user where username like '%${value}%' </select> <insert id="insertUser" parameterType="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> </mapper>
注意到配置文件中的id屬性值和map接口中的方法名是一一對(duì)應(yīng)的。
3、在SqlMapConfig.xml中加入映射文件
<!-- 加載 映射文件 --> <mappers> <mapper resource="map/UserMapper.xml" /> </mappers>
4、測(cè)試代碼
package com.kang.test; import java.io.IOException; import java.io.InputStream; import java.util.Date; 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 com.kang.mapper.UserMapper; import com.kang.pojo.User; public class UserTest { // 會(huì)話工廠 private SqlSessionFactory sqlSessionFactory; @Before public void createSqlSessionFactory() throws IOException { // 配置文件SqlMapConfig.xml在類路徑下 String resource = "SqlMapConfig.xml"; // 得到配置文件流 InputStream inputStream = Resources.getResourceAsStream(resource); // 創(chuàng)建會(huì)話工廠,傳入mybatis的配置文件信息 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } @Test public void testFindUserById() throws Exception { //獲取session SqlSession session = sqlSessionFactory.openSession(); //獲取mapper接口的代理對(duì)象 UserMapper userMapper = session.getMapper(UserMapper.class); //調(diào)用代理對(duì)象方法 User user = userMapper.findUserById(27); System.out.println(user); //關(guān)閉session session.close(); System.out.println("---------執(zhí)行完畢-----------"); } @Test public void testFindByUsername() throws Exception{ //獲取session SqlSession session = sqlSessionFactory.openSession(); //獲取mapper接口的代理對(duì)象 UserMapper userMapper = session.getMapper(UserMapper.class); //調(diào)用代理對(duì)象方法 List<User> list=userMapper.findUserByUsername("張"); for (User user : list) { System.out.println(user); } //關(guān)閉session session.close(); System.out.println("---------執(zhí)行完畢-----------"); } @Test public void testInsert() throws Exception{ User user=new User(); user.setUsername("cxk"); user.setSex("1"); user.setBirthday(new Date()); user.setAddress("四川成都"); SqlSession session=sqlSessionFactory.openSession(); UserMapper userMapper=session.getMapper(UserMapper.class); userMapper.insertUser(user); session.commit(); //關(guān)閉session session.close(); System.out.println("---------執(zhí)行完畢-----------"); } }
5、單元測(cè)試
id查詢測(cè)試
模糊查詢測(cè)試
插入數(shù)據(jù)測(cè)試
關(guān)于Mybatis中怎么實(shí)現(xiàn)Mapper動(dòng)態(tài)代理就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
新聞標(biāo)題:Mybatis中怎么實(shí)現(xiàn)Mapper動(dòng)態(tài)代理
網(wǎng)站鏈接:http://chinadenli.net/article38/gpdepp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站收錄、網(wǎng)站建設(shè)、App開(kāi)發(fā)、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)