Mybaits之Mapper动态代理开发

Mybaits之Mapper动态代理开发

开发规范:

  Mapper接口开发方法只需要程序员与Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法同平常写的Dao接口实现类的方法。

Mapper接口开发需要遵循以下规范:

  1、Mappper.xml文件中的namespace与mapper接口的类路径相同

  2、Mapper接口方法名和Mapper.xml中定义的每个statement的id相同

  3、Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同

  4、Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

package deep.mapper;

import deep.pojo.Account;

public interface UserMapper {

    //遵循四个原则
    //接口方法名 == Account.xml 中的 id名
    //返回值类型 与 Mapper.xml文件中的返回值类型要一致
    //方法的入参类型要与Mapper.xml文件中入参的类型要一致
    //命名空间绑定此接口(Account.xml 中的 mapper 中的 namespace = “deep.mapper.UserMapper”)
    public Account findUserById(Integer id);
}
<mapper namespace="deep.mapper.UserMapper">
    <select id="findUserById" parameterType="Integer" resultType="deep.pojo.Account">
        select * from account where id = #{v}
    </select>
    
        ....
</mapper>    
package deep.junit;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import deep.mapper.UserMapper;
import deep.pojo.Account;

public class MyBatisMapperTest {

    @Test
    public void testMapper() throws Exception {
        //加载核心配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        
        //SqlSession帮我生成一个实现类(给接口)
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        
        Account account = userMapper.findUserById(27);
        System.out.println(account);
    }
}

小结:

♦selectOne和selectList

  动态代理对象调用sqlSession.selectOne()和sqlSession.selectList()是根据mapper接口方法的返回值决定,如果返回list则调用selectList方法,如果返回单个对象则调用selectOne()方法。

♦namespace

  mybatis官方推荐使用mapper代理方法开发mapper接口,程序员不用编写mapper接口实现类,使用mapper代理方法时,输入参数可以使用pojo包装对象或map对象,保证dao的通用性。

原文地址:https://www.cnblogs.com/deepSleeping/p/10453203.html