Mapper动态代理方法:程序员只需要写dao接口(Mapper),而不需要写dao实现类,由mybatis根据dao接口和映射文件中statement的定义生成接口实现代理对象。可以调用代理对象方法。
Mybatis官方建议:将dao接口叫做mapper。
目标:通过一些规则让mybatis根据dao接口和映射文件中statement的定义生成接口实现代理对象
mybatis将以下代码自动在代理对象实现:
User user = sqlSession.selectOne("test.findUserById", id);
如何让mapper接口找到mapper.xml中statement的id。
工程结构
第一步:开发mapper.xml映射文件
UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.mo.dao.UserMapper"> <select id="findUserById" parameterType="int" resultType="com.mo.pojo.User"> SELECT * FROM USER WHERE id = #{id} </select> </mapper> 为了让mapper.xml和mapper.java对应起来,将mapper.xml中的namespace设置为mapper.java全类名 <mapper namespace="com.mo.dao.UserMapper">
第二步:开发mapper.java接口
mapper.java接口文件命名规则为:XXXMapper.xml
public interface UserMapper { User findUserById(int id); }
mybatis生成代理对象时,根据XXXMapper.xml配置文件中statement标签来决定 调用SqlSession方法(select、insert、update..)
根据上边接口方法返回值类型来决定 是调用 selectOne还是selectList,如果返回的是单个对象,动态代理调用selectOne(),如果返回的是集合对象,动态代理调用selectList()。
Mapper.xml开发规则
1、 在mapper.xml中将namespace设置为mapper.java的全限定名
2、 将mapper.java接口的方法名和mapper.xml中statement的id保持一致。
3、 将mapper.java接口的方法输入参数类型和mapper.xml中statement的parameterType保持一致
4、 将mapper.java接口的方法输出 结果类型和mapper.xml中statement的resultType保持一致