中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mybatis中怎么實現Mapper動態代理

發布時間:2021-06-17 13:54:56 來源:億速云 閱讀:234 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關Mybatis中怎么實現Mapper動態代理,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

一、什么是Mapper的動態代理

采用Mapper動態代理方法只需要編寫相應的Mapper接口(相當于Dao接口),那么Mybatis框架根據接口定義創建接口的動態代理對象,代理對象的方法體同Dao接口實現類方法。

Mapper接口開發需要遵循以下規范:

1、Mapper.xml文件中的namespace與mapper接口的全類名相同。

2、Mapper接口方法名和Mapper.xml中定義的每個statement的id相同。

3、Mapper接口方法的輸入參數類型和mapper.xml中定義的每個sql 的parameterType的類型相同。

4、Mapper接口方法的輸出參數類型和mapper.xml中定義的每個sql的resultType的類型相同。

二、實例演示

這里只演示了利用代理進行查詢和插入的操作,其他操作與之情況類似。只需要在接口中定義相關方法,然后在xml中進行相關配置即可。

這個演示是建立在前一個增刪改查的項目基礎上。項目整體目錄大致相同。基本屬性文件信息也相同。這里不作詳述。

1、新建一個com.kang.mapper的包,定義map接口,接口名任意,這里是UserMapper。

package com.kang.mapper;
import java.util.List;
import com.kang.pojo.User;
public interface UserMapper {
	//根據用戶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必須對應著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接口中的方法名是一一對應的。

3、在SqlMapConfig.xml中加入映射文件

<!-- 加載 映射文件 -->
	<mappers>
		<mapper resource="map/UserMapper.xml" />
    </mappers>

4、測試代碼

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 {
	// 會話工廠
	private SqlSessionFactory sqlSessionFactory;
	@Before
	public void createSqlSessionFactory() throws IOException {
		// 配置文件SqlMapConfig.xml在類路徑下
		String resource = "SqlMapConfig.xml";
		// 得到配置文件流
		InputStream inputStream = Resources.getResourceAsStream(resource);
		// 創建會話工廠,傳入mybatis的配置文件信息
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	}
	@Test
	public void testFindUserById() throws Exception {
		//獲取session
		SqlSession session = sqlSessionFactory.openSession();
		//獲取mapper接口的代理對象
		UserMapper userMapper = session.getMapper(UserMapper.class);
		//調用代理對象方法
		User user = userMapper.findUserById(27);
		System.out.println(user);
		//關閉session
		session.close();
		System.out.println("---------執行完畢-----------");		
	}	
	@Test
	public void testFindByUsername() throws Exception{
		//獲取session
		SqlSession session = sqlSessionFactory.openSession();
		//獲取mapper接口的代理對象
		UserMapper userMapper = session.getMapper(UserMapper.class);
		//調用代理對象方法
		List<User> list=userMapper.findUserByUsername("張");
		for (User user : list) {
			System.out.println(user);
		}
		//關閉session
		session.close();
		System.out.println("---------執行完畢-----------");
	}	
	@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();
		//關閉session
		session.close();
		System.out.println("---------執行完畢-----------");	
	}
}

5、單元測試

id查詢測試

Mybatis中怎么實現Mapper動態代理

模糊查詢測試

Mybatis中怎么實現Mapper動態代理

插入數據測試

Mybatis中怎么實現Mapper動態代理

Mybatis中怎么實現Mapper動態代理

關于Mybatis中怎么實現Mapper動態代理就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

会泽县| 崇文区| 新乡市| 濮阳县| 台中县| 剑川县| 河池市| 福建省| 东乌珠穆沁旗| 大城县| 江阴市| 宁蒗| 合江县| 临颍县| 探索| 平邑县| 鹤庆县| 高邮市| 聂拉木县| 修水县| 咸丰县| 通江县| 中阳县| 如东县| 安陆市| 武隆县| 天水市| 金坛市| 凤城市| 玉田县| 乌拉特中旗| 揭东县| 湖南省| 北安市| 武川县| 额敏县| 镇平县| 大厂| 聊城市| 图们市| 枣强县|