Mybatis基础知识--番外篇

题记

之前有聊到Mybatis基础知识中的入门程序,现在补充一下相关的番外知识篇

盘点使用Mybatis过程中遇到的问题

在实际开发当中我们可能有时会遇到这样的问题

    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 16  
        at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)  
        at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:346)  
        at $Proxy11.selectOne(Unknown Source)  
        at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154)  
        at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75)  
        at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:38)  
        at $Proxy14.selectMusicByGeshou(Unknown Source)  
        at test.karaoke.TestKaraoke.testGeShou(TestKaraoke.java:72)  
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
        at java.lang.reflect.Method.invoke(Method.java:597)  
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)  
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)  
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)  
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)  
        at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)  
        at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82)  
        at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)  
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)  
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)  
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)  
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)  
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)  
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)  
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)  
        at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)  
        at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)  
        at org.junit.runners.ParentRunner.run(ParentRunner.java:236)  
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)  
        at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)  
        at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)  
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)  
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)  
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)  
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)  
    Caused by: org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 16  
        at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:42)  
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
        at java.lang.reflect.Method.invoke(Method.java:597)  
        at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:338)  
        ... 34 more  

这个我们就要来比较一个Mybatis 中的selectOne和selectList的区别了
selectOne是表示的查询一条数据,当sql查询出来的是一条数据的场景既可以用selectOne又可以用selectList(list中只有一个元素)。
selectList表示查询出的时候多个元素,当sql查询出来的是多条元素就只能用selectList,如果使用了selectOne就会报上述的错误。

摘抄传智播客燕青老师关于mybatis与hibernate区别

hibernate:是一个标准ORM框架(对象关系映射)。入门门槛较高的,不需要程序写sql,sql语句自动生成了。
对sql语句进行优化、修改比较困难的。
应用场景:
适用于需求变化不多的中小型项目,比如:后台管理系统,erp、orm、oa。。

mybatis:专注是sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全 的ORM框架,虽然程序员自己写sql,mybatis 也可以实现映射(输入映射、输出映射)。
应用场景:
适用于需求变化较多的项目,比如:互联网项目。

企业进行技术选型,以低成本 高回报作为技术选型的原则,根据项目组的技术力量进行选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值