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 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条