Mybatis学习笔记(二)

Mybatis学习笔记(二),第1张

Mybatis学习笔记(二)

文章目录
  • 一、动态代理
  • 二、接口方法参数问题
  • 三、# 和 $的区别


一、动态代理


本次测试用例使用StudentDao接口中的方法,所以需要该接口对应的实现类,在该实现类中实现具体的方法,接口中的方法如下:

实现该方法需要如下步骤:

//1.获取SqlSession对象(省略)
//2.获取唯一标识,即dao接口对应的mapper文件中的命名空间+对应该方法的id组合的字符串
String sqlId = "com.example.dao.StudentDao.selectStudents";
//3.根据sqlId调用对应的方法
List students = sqlSession.selectList(sqlId);
//4.返回students
return students;

经过测试,该方式能够正确运行;如果没有该实现类,能正确运行吗?答案是能。我们可以通过MyBatis提供的动态代理方式,达到不写dao接口的目的,实现步骤与上文略有区别:

//1.第一步还是要获取SqlSession对象(此处代码省略)
//2.获取接口对象(参数为接口的类对象)
StudentDao dao = sqlSession.getMapper(StudentDao.class);
//3.调用接口方法
List students = dao.selectStudents();

使用动态代理的注意事项:

  1. mapper文件中的namespace的值为对应dao接口的全限定名称
  2. mapper文件中的