Mybatis——Mapper動態代理

(一)相應的規則

Mapper動態代理需要創建Mapeer接口和與其相對應的XML文件。

一般我們可以先創建好xml文件,因爲:

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

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

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

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

工程文件目錄:


(二)Mapper.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.ydalien.mapper.UserMapper">
	<!-- 根據id獲取用戶信息 -->
	<!-- parameterType:表示輸入類型
			resultType:表示輸出類型,這裏是自定義的POJO類型
	 -->
	<select id="findUserById" parameterType="int" resultType="com.ydalien.po.User">
		select * from user where id = #{id}
	</select>
	
	<!-- 自定義條件查詢用戶列表 -->
	<select id="findUserByUsername" parameterType="java.lang.String"  resultType="com.ydalien.po.User">
	   select * from user where username like '%${value}%'  
	</select>
	
	<!-- 添加用戶 -->
	<insert id="insertUser" parameterType="com.ydalien.po.User">
	<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
		select LAST_INSERT_ID() 
	</selectKey>
	  insert into user(username,sex,address) 
	  values(#{username},#{sex},#{address})
	</insert>
	
	<!-- 刪除用戶 -->
	<delete id="deleteUserById" parameterType="int">
		delete from user where id=#{id}
	</delete>
	
	<!-- 更新用戶 -->
	<update id="updateUser" parameterType="com.ydalien.po.User">
		update user set username=#{username},sex=#{sex},address=#{address}
		where id=#{id}
	</update>
	
</mapper>

(三)mapper接口(UserMapper.java)

package com.ydalien.mapper;

import com.ydalien.po.User;

public interface UserMapper {

	//通過id查用戶
	public User findUserById(int id) throws Exception;
	//插入用戶
	public void insertUser(User user) throws Exception;
	
}

(四)將mapper加入全局配置文件(SqlMapConfig.xml)

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


(五)測試類(UserMapperTest.java)

package com.ydalien.test;

import static org.junit.Assert.*;

import java.io.InputStream;

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.ydalien.mapper.UserMapper;
import com.ydalien.po.User;

public class UserMapperTest {

	private SqlSessionFactory sqlSessionFactory;
	
	@Before
	public void setUp() throws Exception {
	
				String resource = "sqlMapConfig.xml";
				InputStream inputStream = Resources.getResourceAsStream(resource);
				//使用SqlSessionFactoryBuilder創建sessionFactory
				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(1);
		System.out.println(user);
		//關閉session
		session.close();
		
	}


}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章