Mybatis的mapper代理开发dao方法
看完了之前的mybatis原始的dao开发方法是不是觉得有点笨重,甚至说没有发挥mybatis
作为一个框架的优势。总结了一下,原始的dao方法有以下几点不足之处
- dao接口实现方法中存在大量的模板方法,比如:
SqlSession sqlSession = sqlSessionFacory.openSession();
sqlSession.commit();
sqlSession.close();这三行代码几乎在每个方法里面都能看见,设想能否将这些代码提取出来,大大减轻程序员的工作量。
- 调用sqlSession方法时将statement的id硬编码了。比如之前findUserById方法中的“test.findUserById”。
- 调用sqlSession方法时传入变量,由于sqlSession方法使用泛型,即使变量类型传入错误,在编译阶段也不会报错。
所以既然出现了问题,改进是势在必行的。接下来就让我们看看如何改进。
当然就是今天的主题mapper代理开发方式了
正在这种开发方式中,程序员需要编写mapper.xml文件,其实就是一个类似于之前的user.xml的文件
另外在mapper代理方法中程序员只要写mapper接口(相当于dao接口)遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象(就是实现接口类不用咱们去写了)
具体有以下几个规范:
在mapper.xml中的namespace等于mapper接口地址

- mapper.java接口中的方法名和mapper.xml中的statement的id一致
- mappe.java接口中的输入参数类型和mapper.xml中的statement的parameterType指定的的参数类型一致。
- 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开发方法更系统,用起来更棒更爽,请期待更新。。。
Mybatis的mapper代理开发dao方法的更多相关文章
- mybatis 学习笔记(三):mapper 代理开发 dao 层
mybatis 学习笔记(三):mapper 代理开发 dao 层 优势 通过使用mapper 代理,我们可以不需要去编写具体的实现类(使用 getMapper() 方法自动生成),只需编写接口即可, ...
- mabatis--使用mapper代理开发dao
1.编写mapper.xml映射文件: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE m ...
- Mybatis的mapper代理开发方法
一.开发规范 1.映射文件中的namespase等于mapper接口类路径 2.statement的id与mapper中的方法名一致 3.让mapper的接口方法输入参数类型与statement中的p ...
- mybatis入门基础(二)----原始dao的开发和mapper代理开发
承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...
- Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6869133.html 前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(一)——My ...
- 【mybatis深度历险系列】深入浅出mybatis中原始dao的开发和mapper代理开发
使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法.mybatis在进行dao开发的时候,涉及到三姐妹,分别是SqlSessionFactoryBuilder ...
- MyBatis使用Mapper动态代理开发Dao层
开发规范 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同原始Dao接口实现类方法. Mappe ...
- 【转】Mybatis学习---MyBatis知识、原始Dao开发和mapper代理开发
[原文]https://www.toutiao.com/i6594610137560777223/ 一.什么是MyBatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及 ...
- Mybatis学习总结(二)——Mapper代理开发
一.概要 1.原始DAO开发中存在的问题:(1)DAO实现方法体中存在很多过程性代码.(2)调用SqlSession的方法(select/insert/update)需要指定Statement的id, ...
随机推荐
- sqlserver中压缩日志文件
最近在转移数据,sqlserver的日志文件ldf,占用空间特别大,为了还原库,节省空间,所以压缩日志文件迫在眉睫.在网上找了一段代码: USE [master] GO ALTER DATABASE ...
- JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别
JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别 关于获取类的字段有两种方式:getFields()和getDeclaredFields().我们先来 ...
- systemd的作用
早上群上讨论了一下systemd的作用,还导致了一个人的直接退群,出于求知心理,搜索了一些systemd,对此也作出了一些相应的整理: 一.systemd的诞生: 学习嵌入式bootloader与ke ...
- Lintcode221 Add Two Numbers II solution 题解
[题目描述] You have two numbers represented by a linked list, where each node contains a single digit. T ...
- Unity3D脚本的生命周期(执行顺序)
Unity脚本中有许多固定的函数 例如Start();Update(); 而这些函数都有固定的执行顺序 搞清楚这些函数的执行顺序 对于我们理清代码的逻辑就显得尤为重要 举个简单的例子 //脚本A pu ...
- Windows下安装TensorFlow
最近学习TensorFlow,当然前提是装好框架,网上教程很多都是虚拟搭建或者是conda,从我的经验来讲,Windows目前只支持Python3.5版本安装,Python官网上有说明: 本人由于常用 ...
- 解决浏览器兼容ES6特性
为什么ES6会有兼容性问题? 由于广大用户使用的浏览器版本在发布的时候也许早于ES6的定稿和发布,而到了今天,我们在编程中如果使用了ES6的新特性,浏览器若没有更新版本,或者新版本中没有对ES6的特性 ...
- WBS
Need 需求分析: 为了满足中老年人因工作忙碌而无暇阅读的痛苦,我们设计推广出一款听书软件.可以给中老年人带来的好处是不再受繁琐的听书软件的束缚,操作简单,携带便捷. Approach 实现方法: ...
- new Image的API
- 开源一套基于vue全家桶的webapp
一.设计初衷 原本今年就是有一个打算要做一套商业的作品,恰巧目前离职,在找工作的过程中,所以有时间闲下来沉淀对原本的知识进行梳理. 说一个题外话,就是由于博主之前是很早一批使用vue的用户,也就是距今 ...