zoukankan      html  css  js  c++  java
  • 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的通用性。

  • 相关阅读:
    Unity资源打包之Assetbundle
    集社交与金融为一体,平安天下通怎样推动互联网金融创新?
    json和pickle模块
    sys模块
    os模块
    random模块
    datetime模块
    time模块
    logging模块

  • 原文地址:https://www.cnblogs.com/deepSleeping/p/10453203.html
Copyright © 2011-2022 走看看