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

最新文章

  1. 慎重管理SQL Server服务的登录(启动)账户和密码
  2. 基于Socket客户端局域网或广域网内共享同一短信猫收发短信的开发解决方案
  3. 基本开题的感觉是了-MySQL继续继续(自定义函数&存储过程)
  4. leetcode150 Evaluate Reverse Polish Notation
  5. css before&after 特殊用途
  6. 检测服务器IP端口是否可用
  7. java list三种遍历方法性能比较
  8. 读书笔记-你不知道的JavaScript(上)
  9. 在阿里云服务器中用IP连接SQLserver2014提示40,53错误
  10. cxf 整合 spring 时 java.lang.VerifyError异常
  11. JS中this指向问题相关知识点及解析
  12. OpenGL入门之入门
  13. secureCRT 设置证书免密登陆
  14. MACD判断定背离,底背离
  15. Android 菜单键和返回键互换
  16. Android 解决NestedScrollView 嵌套 RecyclerView出现的卡顿,上拉刷新无效
  17. CSS之按钮过滤
  18. Ajax验证用户名
  19. UVa11988 Broken Keyboard (a.k.a. Beiju Text)
  20. windows下 安装python_ldap MySQL-python

热门文章

  1. 为eclipse安装subclipse(SVN插件)
  2. Pluto - iOS 上一个高性能的排版渲染引擎
  3. iOS学习——UITableViewCell两种重用方法的区别
  4. Hadoop的Archive归档命令使用指南
  5. Open Live Writer
  6. python 全栈开发,Day3(正式)
  7. Python基础-week01
  8. Spring - JPA 一对一, 一对多, 多对多关联
  9. 格式化JSON数据
  10. 压力测试(webbench、ab、siege)