您的位置:首页 > 移动开发

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

2015-12-25 13:48 741 查看
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的动态代理为我们生成了一个。

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

Mybatis是怎么读取相关的注解,并加入到Configuration中去的。
Mybatis是怎么生成UserDao的代理对象的。
Mybatis是怎么实现UserDao中的方法的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java jdbc mybatis sql 源码