看完了之前的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开发方法更系统,用起来更棒更爽,请期待更新。。。

Mybatis的mapper代理开发dao方法的更多相关文章

  1. mybatis 学习笔记(三):mapper 代理开发 dao 层

    mybatis 学习笔记(三):mapper 代理开发 dao 层 优势 通过使用mapper 代理,我们可以不需要去编写具体的实现类(使用 getMapper() 方法自动生成),只需编写接口即可, ...

  2. mabatis--使用mapper代理开发dao

    1.编写mapper.xml映射文件: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE m ...

  3. Mybatis的mapper代理开发方法

    一.开发规范 1.映射文件中的namespase等于mapper接口类路径 2.statement的id与mapper中的方法名一致 3.让mapper的接口方法输入参数类型与statement中的p ...

  4. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...

  5. Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6869133.html 前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(一)——My ...

  6. 【mybatis深度历险系列】深入浅出mybatis中原始dao的开发和mapper代理开发

    使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法.mybatis在进行dao开发的时候,涉及到三姐妹,分别是SqlSessionFactoryBuilder ...

  7. MyBatis使用Mapper动态代理开发Dao层

    开发规范 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同原始Dao接口实现类方法. Mappe ...

  8. 【转】Mybatis学习---MyBatis知识、原始Dao开发和mapper代理开发

    [原文]https://www.toutiao.com/i6594610137560777223/ 一.什么是MyBatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及 ...

  9. Mybatis学习总结(二)——Mapper代理开发

    一.概要 1.原始DAO开发中存在的问题:(1)DAO实现方法体中存在很多过程性代码.(2)调用SqlSession的方法(select/insert/update)需要指定Statement的id, ...

随机推荐

  1. 2-SAT 问题与解法小结

    2-SAT 问题与解法小结 这个算法十分的奇妙qwq... 将一类判定问题转换为图论问题,然后就很容易解决了. 本文有一些地方摘录了一下赵爽<2-SAT解法浅析> (侵删) 一些概念: \ ...

  2. 如何在eclipse中添加ADT

    工具: Eclipse:官网下载地址:http://www.eclipse.org/downloads/下载SE或者EE版本的都可以 ADT:因为涉及到FQ问题,所以这里我给出一个参考网址:http: ...

  3. 如何配置springboot一访问服务器本地图片

    大家好,之前写过一篇配置tomcat访问服务器本地资源的,但现在使用了springboot内嵌tomcat\jeyyt后,怎么来访问本地资源呢? 打好springboot框架后,在applicatio ...

  4. Keepalived+Nginx实现高可用负载均衡集群

    一 环境介绍 1.操作系统CentOS Linux release 7.2.1511 (Core) 2.服务keepalived+nginx双主高可用负载均衡集群及LAMP应用keepalived-1 ...

  5. c语言基础知识

    进制: l  碾(nian)除法:十进制转为几进制则除几,从下往上看余数   (十进制转二进制,十进制转八进制,十进制转十六进制) l  几进制转化为十进制:直接乘以几的次方数: l  binary: ...

  6. ios滑动流畅(丝般顺滑)滚动

    在ios html->body->list(少一个样式都不行!) html->body->list <!DOCTYPE html> <html lang=&q ...

  7. 【Android】你知道还可以通过 View.animate() 来实现动画么

    这次想来讲讲 View.animate(),这是一种超好用的动画实现方式,用这种方式来实现常用的动画效果非常方便,但在某些场景下会有一个坑,所以这次就来梳理一下它的原理. 基础 首先,先来看一段代码: ...

  8. 02-Python的下载和安装_Python编程之路

    原文发布在特克斯博客www.susmote.com 之前给大家讲了关于python的背景知识,还有Python的优点和缺点,相信通过之前的介绍很多人已经清楚自己到底要不要选择学习Python,如果已经 ...

  9. java日期格式大全 format SimpleDateFormat

    http://www.cnblogs.com/loveyakamoz/archive/2011/08/18/2145047.html

  10. Jquery点击除了指定div元素其他地方,隐藏该div

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script ty ...