最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis之Mapper動態(tài)代理實例解析

 更新時間:2019年08月21日 09:11:40   作者:想作會飛的魚  
這篇文章主要介紹了Mybatis之Mapper動態(tài)代理實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

一、什么是Mapper的動態(tài)代理

采用Mapper動態(tài)代理方法只需要編寫相應(yīng)的Mapper接口(相當(dāng)于Dao接口),那么Mybatis框架根據(jù)接口定義創(chuàng)建接口的動態(tài)代理對象,代理對象的方法體同Dao接口實現(xiàn)類方法。

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

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

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

3、Mapper接口方法的輸入?yún)?shù)類型和mapper.xml中定義的每個sql 的parameterType的類型相同。

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

二、實例演示

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

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

1、新建一個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必須對應(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接口中的方法名是一一對應(yīng)的。

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);
		// 創(chuàng)建會話工廠,傳入mybatis的配置文件信息
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	}
	@Test
	public void testFindUserById() throws Exception {
		//獲取session
		SqlSession session = sqlSessionFactory.openSession();
		//獲取mapper接口的代理對象
		UserMapper userMapper = session.getMapper(UserMapper.class);
		//調(diào)用代理對象方法
		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接口的代理對象
		UserMapper userMapper = session.getMapper(UserMapper.class);
		//調(diào)用代理對象方法
		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、單元測試

id查詢測試

模糊查詢測試

插入數(shù)據(jù)測試

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java 從int數(shù)組中獲取最大數(shù)的方法

    java 從int數(shù)組中獲取最大數(shù)的方法

    這篇文章主要介紹了java 從int數(shù)組中獲取最大數(shù)的方法,需要的朋友可以參考下
    2017-02-02
  • 一文簡單了解C#?中的DataSet類

    一文簡單了解C#?中的DataSet類

    這篇文章主要介紹了一文簡單了解C#?中的DataSet類,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • 關(guān)于maven本地倉庫的配置方式

    關(guān)于maven本地倉庫的配置方式

    這篇文章主要介紹了關(guān)于maven本地倉庫的配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 基于SpringBoot實現(xiàn)HTTP請求簽名驗證機(jī)制

    基于SpringBoot實現(xiàn)HTTP請求簽名驗證機(jī)制

    在分布式系統(tǒng)交互中,API接口的安全性至關(guān)重要,本文將深入解析基于Spring Boot實現(xiàn)的HTTP請求簽名驗證機(jī)制,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • Java的sort的排序及使用詳解

    Java的sort的排序及使用詳解

    這篇文章主要為大家詳細(xì)介紹了Java的sort的排序及使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下 ,希望您能夠多多關(guān)注
    2022-02-02
  • java實現(xiàn)簡單年齡計算器

    java實現(xiàn)簡單年齡計算器

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)簡單年齡計算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • DecimalFormat數(shù)字格式化 0和# 的區(qū)別及說明

    DecimalFormat數(shù)字格式化 0和# 的區(qū)別及說明

    這篇文章主要介紹了DecimalFormat數(shù)字格式化 0和# 的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 聊一聊new對象與Spring對bean的初始化的差別

    聊一聊new對象與Spring對bean的初始化的差別

    這篇文章主要介紹了聊一聊new對象與Spring對bean的初始化的差別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java兩種方式實現(xiàn)動態(tài)代理

    Java兩種方式實現(xiàn)動態(tài)代理

    Java 在 java.lang.reflect 包中有自己的代理支持,該類(Proxy.java)用于動態(tài)生成代理類,只需傳入目標(biāo)接口、目標(biāo)接口的類加載器以及 InvocationHandler 便可為目標(biāo)接口生成代理類及代理對象。我們稱這個Java技術(shù)為:動態(tài)代理
    2020-10-10
  • java 單例模式(懶漢式與餓漢式)

    java 單例模式(懶漢式與餓漢式)

    這篇文章主要介紹了java 單例模式的相關(guān)資料,這里對懶漢式與餓漢式都做了實例介紹,需要的朋友可以參考下
    2017-07-07

最新評論

房产| 开江县| 遵义县| 德令哈市| 镇安县| 奈曼旗| 绩溪县| 扎赉特旗| 芜湖县| 密山市| 宁晋县| 全椒县| 阿克| 固始县| 巴林右旗| 积石山| 枣阳市| 耒阳市| 青阳县| 岗巴县| 广丰县| 西安市| 新蔡县| 兰溪市| 新野县| 永定县| 万山特区| 邹平县| 新乐市| 姜堰市| 冷水江市| 那曲县| 阳西县| 台中县| 婺源县| 新余市| 若尔盖县| 五家渠市| 通道| 侯马市| 唐海县|