Mybatis 3ソースコード解析(19)-mapper生成プロセス-例

1937 ワード

Mybatisはmapper形式のアクセスインタフェースを提供し、インタフェースを定義し、簡単な注釈を加えることでデータベース操作を実現します. 
このmapperがどのように使われているかを見てみましょう.
先にインタフェースを定義
public interface UserDao
{
        //  Mybatis    Sql
	@Select("select  * from tab_user where user_id=#{USER_ID}")
	public List> queryUser(Map param);
	
	
        //        ,Mybatis   UserSqlProvider.getQuerySql()        sql
	@SelectProvider(
			type=UserSqlProvider.class,
			method="getQuerySql"
	)
	public List> queryUser_2(Map param);
	
	public static class UserSqlProvider
	{
		public String getQuerySql()
		{
			return "select  * from tab_user where user_id=#{USER_ID}";
		}
	}
}
mybatis-config.xmlプロファイルに構成を追加するには、次の手順に従います.

		
                 //    class,     package, mybatis   
		
	

そのまま使えます
public static void mapperTest(SqlSessionFactory sqlSessionFactory)
	{
		SqlSession sqlSession=sqlSessionFactory.openSession();
		UserDao userDao=sqlSession.getMapper(UserDao.class);
		System.out.println(userDao);
		Map 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はどのように関連する注釈を読み取り、コンフィギュレーションに加えたのか.
  • MybatisはどのようにUserDaoのエージェントオブジェクトを生成しますか.
  • MybatisはどのようにUserDaoの中の方法を実現したのか.