Mybatis3源码分析(19)-Mapper生成过程-示例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ashan_li/article/details/50402718

Mybatis提供一种mapper形式的访问接口,通过定义接口,再加上简单的注解就能实现数据库操作。 

下面来看这个mapper是怎么使用的。

先定义接口

public interface UserDao
{
        //告诉Mybatis执行什么Sql
	@Select("select  * from tab_user where user_id=#{USER_ID}")
	public List<Map<String,Object>> queryUser(Map<String,?> param);
	
	
        //也可以这样子设置,Mybatis会调用UserSqlProvider.getQuerySql()方法获取要执行的sql
	@SelectProvider(
			type=UserSqlProvider.class,
			method="getQuerySql"
	)
	public List<Map<String,Object>> queryUser_2(Map<String,?> param);
	
	public static class UserSqlProvider
	{
		public String getQuerySql()
		{
			return "select  * from tab_user where user_id=#{USER_ID}";
		}
	}
}
在mybatis-config.xml配置文件中增加配置:
<mappers>
		<mapper resource="UserMapper.xml"/>
                 //直接设置class,也可以设置package,让mybatis去描述
		<mapper class="com.ashan.mybatis.UserDao"/>
	</mappers>

然后就直接可以使用了

public static void mapperTest(SqlSessionFactory sqlSessionFactory)
	{
		SqlSession sqlSession=sqlSessionFactory.openSession();
		UserDao userDao=sqlSession.getMapper(UserDao.class);
		System.out.println(userDao);
		Map<String,Object> param=new HashMap<>();
		param.put("USER_ID", "user_01");
		System.out.println(userDao.queryUser_2(param));
		System.out.println(userDao.queryUser(param));
	}
输出的结果为

org.apache.ibatis.binding.MapperProxy@17d99928
[{user_id=user_01, user_name=liys, cust_id=cust_01, svc_num=13800138000}]
[{user_id=user_01, user_name=liys, cust_id=cust_01, svc_num=13800138000}]

可以看到UserDao对象打印出来为MapperProxy,是一个代理。虽然我们没有实现UserDao接口,但Mybatis为利用JDK的动态代理为我们生成了一个。

接下来的几个章节,分析如下内容: 

  1. Mybatis是怎么读取相关的注解,并加入到Configuration中去的。
  2. Mybatis是怎么生成UserDao的代理对象的。
  3. Mybatis是怎么实现UserDao中的方法的。


猜你喜欢

转载自blog.csdn.net/ashan_li/article/details/50402718