zoukankan      html  css  js  c++  java
  • Mybatis的mapper代理开发dao方法

    看完了之前的mybatis原始的dao开发方法是不是觉得有点笨重,甚至说没有发挥mybatis

    作为一个框架的优势。总结了一下,原始的dao方法有以下几点不足之处

    1. dao接口实现方法中存在大量的模板方法,比如:
      SqlSession sqlSession = sqlSessionFacory.openSession();
      sqlSession.commit();
      sqlSession.close();

      这三行代码几乎在每个方法里面都能看见,设想能否将这些代码提取出来,大大减轻程序员的工作量。

    2. 调用sqlSession方法时将statement的id硬编码了。比如之前findUserById方法中的“test.findUserById”。
    3. 调用sqlSession方法时传入变量,由于sqlSession方法使用泛型,即使变量类型传入错误,在编译阶段也不会报错。

    所以既然出现了问题,改进是势在必行的。接下来就让我们看看如何改进。

    当然就是今天的主题mapper代理开发方式了

    正在这种开发方式中,程序员需要编写mapper.xml文件,其实就是一个类似于之前的user.xml的文件

    另外在mapper代理方法中程序员只要写mapper接口(相当于dao接口)遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象(就是实现接口类不用咱们去写了)

    具体有以下几个规范:

    1. 在mapper.xml中的namespace等于mapper接口地址  

      

    1. mapper.java接口中的方法名和mapper.xml中的statement的id一致
    2. mappe.java接口中的输入参数类型和mapper.xml中的statement的parameterType指定的的参数类型一致。
    3.  mapper.java接口中的返回值参数类型和mapper.xml中的statement的resultType的指定的类型一致。

    根据以上规范可以写出根据id查询用户信息方法的定义了

    为了更好地理解上面的规范,下面给出映射文件方便进行对比

    总结一下:以上规范就是对下面代码进行统一生成

    因为别的方法都大同小异,所以这里只写了一个方法findUserById,下面测试也是一样,直接测试mapper接口里的findUserById方法,别的方法就不去测试了

    代码如下:

    public class UserMapperTest {
    
        private SqlSessionFactory sqlSessionFactory;
        @Before
        public void setUp() throws Exception {
            //得到配置文件流
            InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
            //创建会话会话工厂
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }
    
        @Test
        public void testFindUserById() throws Exception {
            //创建会话
            SqlSession sqlSession = sqlSessionFactory.openSession();
            //创建mapper代理对象
            UserMapper userMapper= sqlSession.getMapper(UserMapper.class);
            //调用代理对象的方法,打印结果
            System.out.println(userMapper.findUserById(32));    
        }
    
    }

    里面最重要的一句就是

    UserMapper userMapper= sqlSession.getMapper(UserMapper.class);

    这句代码把我们之前的创建接口的实现类这一步的工作省略了,直接生成一个代理对象,然后通过这个对象去调用方法,执行一系列操作

    结果如下:

     

    好了,到这里两种dao开发方法都讲完了,当然后面与spring整合之后的dao开发方法更系统,用起来更棒更爽,请期待更新。。。

    一杯敬朝阳,一杯敬月光
  • 相关阅读:
    nginx,php for window 7(64bit) install
    ret.concat.apply([],ret)
    JavaScript:constructor属性
    jquery 插件address
    学习笔记(C++)
    关于网站缓存设计的几点思考
    Ubuntu20.04 换源 Learner
    什么叫程序集
    c# 中堆和栈的区别
    命名空间和类的概念
  • 原文地址:https://www.cnblogs.com/scuury/p/8549484.html
Copyright © 2011-2022 走看看