最近迷失在人生的道路上,导致学习的进度有点慢,博客也懒得写了。。。今天稍微总结下当天学的一点Mapper代理知识吧
myBatis中原始Dao开发的问题
1.代码量大,耦合性高
2.很多代码是写死的,不利于维护
Mapper接口代理的作用
1.程序员只需编写Mapper接口和Mapper.xml,并让二者遵循相关规范即可,代码简洁高效
2.框架利用反射机制方便灵活易于维护
简单的流程
1.创建Mapper接口
public interface TeacherMapper {
<span style="white-space:pre"> </span>public Teacher findById(String id);
...
}
2.根据如下规范创建Mapper.xml
规范1:namespace与Mapper接口名称一致
规范2:statement的id与Mapper接口的方法名一致
规范3:statement的parameterType与Mapper接口的形参类型一致
规范4:statement的resultType与parameterType接口的返回值类型一致
规范2:statement的id与Mapper接口的方法名一致
规范3:statement的parameterType与Mapper接口的形参类型一致
规范4:statement的resultType与parameterType接口的返回值类型一致
形如:
<mapper namespace="demo.TeacherMapper">
<select id="findById" resultType="bean.Teacher" parameterType="java.lang.String">
SELECT * FROM view_teachers
<where>
id=#{id}
</where>
...
</mapper>
3.Java代码如下:
SqlSession session = DBAccess.getSqlSession();
TeacherMapper mapper = session.getMapper(TeacherMapper.class);
System.out.println(mapper);
Teacher teacher = mapper.findById("123123");
System.out.println(teacher);
session.close();
输出结果为:
可见遵循如上规范myBatis会通过反射为我们实现该接口中的方法