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的通用性。

  • 相关阅读:
    win10系统设置指定程序开机自启
    PyCharm 2020.1 x64 专业版破解【亲测有效】
    xampp_mysql数据库root登录报错1045-Access denied for user 'root'@'localhost' (using password:YES)
    关于 Tomcat 启动时,解决控制台输出日志乱码问题的方案
    1.css选择器
    5.canvas
    4.音频与视频
    3.form表单
    淘宝店铺设计
    2.html5新布局元素
  • 原文地址:https://www.cnblogs.com/deepSleeping/p/10453203.html
Copyright © 2011-2022 走看看