mybatis的mapper动态代理方法

来源:互联网 发布:7u分享网络不能提现吗 编辑:程序博客网 时间:2024/06/07 22:31

Mapper动态代理方法:程序员只需要写dao接口(Mapper),而不需要写dao实现类,由mybatis根据dao接口和映射文件中statement的定义生成接口实现代理对象。可以调用代理对象方法。

Mybatis官方建议:将dao接口叫做mapper

目标:通过一些规则让mybatis根据dao接口和映射文件中statement的定义生成接口实现代理对象

mybatis将以下代码自动在代理对象实现:

User user = sqlSession.selectOne("test.findUserById", id);

如何让mapper接口找到mapper.xmlstatementid


工程结构


第一步:开发mapper.xml映射文件

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//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方法(selectinsertupdate..)

根据上边接口方法返回值类型来决定 是调用 selectOne还是selectList,如果返回的是单个对象,动态代理调用selectOne(),如果返回的是集合对象,动态代理调用selectList()



Mapper.xml开发规则

1、 mapper.xml中将namespace设置为mapper.java的全限定名

2、 mapper.java接口的方法名和mapper.xmlstatementid保持一致。

3、 mapper.java接口的方法输入参数类型和mapper.xmlstatementparameterType保持一致

4、 mapper.java接口的方法输出 结果类型和mapper.xmlstatementresultType保持一致




0 0