1. 程式人生 > >【Mybatis】mapper動態代理和sqlMapconfig.xml配置標籤

【Mybatis】mapper動態代理和sqlMapconfig.xml配置標籤

1.mapper動態代理

使用mapper對映來,聯絡sql語句和程式碼函式。

步驟一:在上一篇基礎的上,新增一個介面,要求與UserMapper的xml配置檔案同名,加入在xml中的所有sql的id相同的方法,即方法名相同,入參和返回值都相同

步驟二:修改usermapper的名稱空間為介面的類路徑

步驟三:在獲得sqlSession之後,使用getMapper(interface.class),會返回一個與入參相同型別的介面物件,可以用該物件來呼叫方法。

package com.test.mapper;

import java.util.List;

import com.test.domain.User;

public interface UserMapper {

	public void addUser2(User user);
	
	public void deleteUser(Integer id);
	
	public void updateUser(User user);
	
	public User selectUser(Integer id);
	
	public List<User> selectAllUser();

	
	
	
}
package com.test.test;

import java.io.IOException;
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.Test;

import com.test.domain.User;
import com.test.mapper.UserMapper;

public class test1 {

	public static SqlSession sqlSession;
	public static UserMapper mapper;
	public static void init() throws IOException {
		SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
		SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
		
		sqlSession = sqlSessionFactory.openSession();
		
		mapper = sqlSession.getMapper(UserMapper.class);
		System.out.println("test1 init ");
	}
	
	@Test
	public void testAddUser2() throws Exception {
		init();
		
		User user = new User(1,"addmapmth");
		mapper.addUser2(user);
		System.out.println(user);
		sqlSession.commit();
		sqlSession.close();
	}
	@Test
	public void testDeleteUser() throws Exception {
		init();
		
		//User user = new User(1,"addmapmth");
		mapper.deleteUser(1008);
		
		sqlSession.commit();
		sqlSession.close();
	}
	@Test
	public void testUpdateUser() throws Exception {
		
		init();
		User user = new User(1010,"addmapmth");
		mapper.updateUser(user);
		System.out.println(user);
		sqlSession.commit();
		sqlSession.close();
	}
	@Test
	public void testSelectUser() throws Exception {
		
		init();
		//User user = new User(1,"addmapmth");
		User user = mapper.selectUser(1010);//.addUser2(user);
		System.out.println(user);
		sqlSession.commit();
		sqlSession.close();
	}
	
	@Test
	public void testSelectAllUser() throws Exception {
		
		init();
		//User user = new User(1,"addmapmth");
		List<User> user = mapper.selectAllUser();//.selectUser(1010);//.addUser2(user);
		for (User user2 : user) {
			System.out.println(user2);
		}
		sqlSession.commit();
		sqlSession.close();
	}
	
	
}

2.sqlMapconfig.xml配置標籤

注意:
在配置檔案中(sqlMapConfig.xml)
標籤順序從上到下:properties 、settings、typeAliases、environments 、mappers。順序出錯,也會報錯

思考一下:
properties配置資料庫的驅動,類路徑,帳號,密碼。也可以是別的,算是使用者自定義配置
settings設定二級快取和延遲載入。現在都是用分散式快取,redis,等

typeAliasses設定類別名,以便可以在mapper中使用,所以至少應在mapper之前

environment設定jdbc什麼的,在與spring整合中會被廢棄

mappers存放sql的對映檔案

別名標籤:
 

<typeAliases>
<!--
<typeAlias 設定類《==》別名

<package 設定包中所有的類《==》別名

 -->
<package name="com.test.domain"/>

<!-- 
<typeAlias type="com.test.domain.User" alias="User"/>
 -->
</typeAliases>

對映器標籤:
 

<mapper class=" " />
使用mapper介面類路徑
如:<mapper class="cn.xxx.mapper.UserMapper"/>

注意:此種方法要求mapper介面名稱和mapper對映檔名稱相同,且放在同一個目錄中。

<package name=""/>
註冊指定包下的所有mapper介面
如:<package name="cn.xxx.mapper"/>
注意:此種方法要求mapper介面名稱和mapper對映檔名稱相同,且放在同一個目錄中。