Mybatis mapper代理Dao开发

mapper代理的方式,将原始Dao开发中,Dao层接口的实现类中重复的代码提取出来,进一步封装。

使用mybatis实现mapper接口的代理,同样需要编写mapper.xml配置文件。

而且mapper.xml配置文件需要遵循一定的开发规范才可以:

>mapper代理配置文件规范

dao层接口类:

package com.langsin.mapper;

import com.langsin.pojo.User;

public interface UserMapper {
	public User queryUserById(Integer userId) throws Exception;

	public int insertUser(User user) throws Exception;

	public int deleteUserById(Integer userId) throws Exception;
}

1、mapper.xml配置文件的namespace属性必须指定mapper接口的地址。如下所示:


2、mapper.xml配置文件中的statement的id属性必须要与mapper接口中方法名一致。如下所示: 

    
	
	
	
	
	
	
	
	
	
	
	insert into user values(#{userId},#{userName},#{roleCode},#{password},#{cname},#{isLogin},#{telphone},#{address})
	
	
	
	delete from user where user_id=#{userId}
	

 

 

3、mapper接口中方法的输入参数要与mapper.xml配置文件中的parameterType保持一致。

4、mapper接口中方法的返回值类型要与mapper.xml配置文件中的resultType保持一致。

只有遵循了如上所述的开发规范,mybatis框架才可以自动的实现mapper接口的动态代理对象。通过sqlSession 的getMapper方法,即可获得接口的动态代理对象,此方法执行需要接口的Class对象作为参数。如果查询返回的是结果集合,只需要将mapper接口中声明的返回值类型是List集合即可。这样mybatis的实现的动态代理对象内部就能判断在进行查询时是调用selectOne还是selectList方法了。

>测试类:

public class MyBatisTest {
	SqlSession session=null;
	@Before
	public void test() throws Exception {
    //mybatis提供的Resources类,直接从类的根加载路径(classes路径下)找配置文件
    InputStream stream=Resources.getResourceAsStream("SqlMapConfig.xml");
	SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(stream);
	session=factory.openSession();	
	}
	
	@Test
	public void queryUserMapper() throws Exception{
		Integer userId=1;
		/**
		 * 为userMapper这个类型的变量mapper赋值,赋值一个对象
		 * 该对象由Mybatis帮助实现
		 * Mybatis框架会为UserMapper接口动态的创建一个类,动态代理类
		 */
		UserMapper mapper=session.getMapper(UserMapper.class);
		User user = mapper.queryUserById(userId);
		System.out.println(user);
		session.close();
	}
	
	@Test
	public void insertUserMapper() throws Exception{
		UserMapper mapper=session.getMapper(UserMapper.class);
		User user=new User(null, "xinxinxiangrong", "1234598", "1", "huang", "1789999999", "山东威海", "0");
		mapper.insertUser(user);
		session.commit();
		session.close();
	}
	
	@Test
	public void deleteUserMapper() throws Exception{
		Integer userId=16;
		UserMapper mapper=session.getMapper(UserMapper.class);
		mapper.deleteUserById(userId);
		session.commit();
		session.close();
	}
}

 

你可能感兴趣的:(SSM)