【Mybatis】mapper动态代理和sqlMapconfig.xml配置标签

版权声明: https://blog.csdn.net/qq_35315154/article/details/84990559

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映射文件名称相同,且放在同一个目录中。

猜你喜欢

转载自blog.csdn.net/qq_35315154/article/details/84990559