Armeng 2012-06-19 16:38
浏览 411
已采纳

Mybatis的两种写法。。。

在网上搜索Mybatis的教程,看到了2个:
1.http://wanqiufeng.blog.51cto.com/409430/515132

这里会先定义一个UserMapper的Interface
然后使用的时候
UserMapper userMapper =sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUser("jun");

2.http://blog.csdn.net/weoln/article/details/5782750

这里就没有Interface
直接使用

Goods goods = (Goods)session.selectOne("com.oryx.mybatis.GoodsMapper.selectGoods",1);

看了论坛里关于是不是可以不写DAO的讨论,但只是稍微有点概念,但是具体Mybatis的原理还是没搞清楚。

第一种,如果mybatis本身的Mapper层就是一个接口的话,那么它的实现应该是xml文件了,这里的UserMapper userMapper =sqlSession.getMapper(UserMapper.class);算是什么? 这个userMapper是谁的实现呢? Mapper的还是用户自定义那个UserMapper的? 感觉像是UserMapper这个接口的,但是具体的sql访问(DaoImp)是谁来完成的呢? 感觉又是xml文件来完成的,所以就有点晕了。。。
用户自定义的接口和框架提供的借口到底是一种什么关系,框架又是怎么自动帮助用户自定义的接口实现其中的方法的?

第二种,

能解释下这里面的原理么? selectOne都做了哪些步骤?

  • 写回答

3条回答 默认 最新

  • iteye_878 2012-06-20 14:22
    关注

    第一种,UserMapper userMapper =sqlSession.getMapper(UserMapper.class);得到了一个UserMapper的代理。核心是JDK的动态代理。你只要定义UserMapper这个接口的方法getUser就可以了,mybatis生成代理,也是实现UserMapper接口的,然后解析xml,调用SQL,返回结果给你。你自己则根本感觉不到代理的存在,感觉就是在调用UserMapper。

    第二种,selectOne就是选择一条记录,解析xml里sql,把参数绑定上去,执行sql,最后把sql返回的结果填充到Goods对象里。内部实现都是jdbc啦,只不过不用你写这些琐碎的细节了,全有mubatis搞定。

    底层代码里,第一种其实最后还是会调用第二种的selectOne的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿