设为首页 收藏本站
查看: 857|回复: 0

[经验分享] mybatis ,列名不一样进行映射。

[复制链接]

尚未签到

发表于 2016-11-26 07:53:08 | 显示全部楼层 |阅读模式
  惯例:
  我是温浩然:
  想看这篇文章,首先,你要会用mybatis.
  然后,在mybatis的***mapper.xml文件中,定义sql语句的地方,有定义返回值么,代码如下。

<select id="list" resultType="User">  
select * from user order by id
</select>


按照上面那样配置之后,会将查询到的结果,自动放到User 对象中。当然,自动填充的前提条件是,spring的注入什么的,都已经配置好了。  

  但是,如果你的User对象,有个字段是birthTime。但是,在数据库中的字段却是,birth_time。
  这种情况,就需要让mybatis来进行映射了。人家既然已经开发出来了,肯定很完善,是不~
  

  当然,这个的前提,是你需要好好的了解一下啊,mybatis 的mapper.xml 中的 <select></select>中的 resuleMap和resultType的区别。
  

  如果你知道这两者的区别,那接着看就行了,其实很简单。
  

  我稍微说一下区别吧。
  resultType是直接表示返回类型的,我这里是直接返回User,而resultMap则是对外部ResultMap的引用,也就是说,你需要对resultMap进行定义,否则是会出错的。
  关于这个的属性,可以参考这篇文章:http://limingnihao.iyunv.com/blog/781911。
  说白了,resultType就是简缩版的resultMap  (这个我下面有说明。)

  但是resultType跟resultMap不能同时存在。
  

  当对resultMap没有定义,或者定义错误没有引用的时候,会报错如下:

[2015-07-16 16:40:54.806] [http-apr-8080-exec-1] [UserLoginController] ERROR - Invalid bound statement (not found): com.tujia.tuuser.mapper.UserMapper.getByPhone
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.tujia.tuuser.mapper.UserMapper.getByPhone
at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:178) ~[mybatis-3.2.1.jar:3.2.1]
at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:38) ~[mybatis-3.2.1.jar:3.2.1]
at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:49) ~[mybatis-3.2.1.jar:3.2.1]
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:42) ~[mybatis-3.2.1.jar:3.2.1]
at com.sun.proxy.$Proxy11.getByPhone(Unknown Source) ~[na:na]
at com.tujia.tuuser.service.impl.UserServiceImpl.login(UserServiceImpl.java:59) ~[UserServiceImpl.class:na]
at com.tujia.tuuser.controller.UserLoginController.loginServer(UserLoginController.java:63) ~[UserLoginController.class:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_75]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.7.0_75]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.7.0_75]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.7.0_75]
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) [spring-web-3.2.8.RELEASE.jar:3.2.8.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) [spring-web-3.2.8.RELEASE.jar:3.2.8.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) [spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745) [spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686) [spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) [spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) [spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) [spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953) [spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:855) [spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) [servlet-api.jar:na]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829) [spring-webmvc-3.2.8.RELEASE.jar:3.2.8.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) [servlet-api.jar:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) [catalina.jar:7.0.42]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [catalina.jar:7.0.42]
at com.tujia.core.filter.SecurityFilter.doFilter(SecurityFilter.java:35) [SecurityFilter.class:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) [catalina.jar:7.0.42]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [catalina.jar:7.0.42]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) [spring-web-3.2.8.RELEASE.jar:3.2.8.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-3.2.8.RELEASE.jar:3.2.8.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) [catalina.jar:7.0.42]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [catalina.jar:7.0.42]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) [catalina.jar:7.0.42]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) [catalina.jar:7.0.42]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) [catalina.jar:7.0.42]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) [catalina.jar:7.0.42]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) [catalina.jar:7.0.42]
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) [catalina.jar:7.0.42]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) [catalina.jar:7.0.42]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) [catalina.jar:7.0.42]
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) [tomcat-coyote.jar:7.0.42]
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) [tomcat-coyote.jar:7.0.42]
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1852) [tomcat-coyote.jar:7.0.42]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.7.0_75]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.7.0_75]
at java.lang.Thread.run(Unknown Source) [na:1.7.0_75]
Caused by: org.apache.ibatis.builder.IncompleteElementException: Could not find result map com.tujia.tuuser.mapper.UserMapper.User
at org.apache.ibatis.builder.MapperBuilderAssistant.setStatementResultMap(MapperBuilderAssistant.java:365) ~[mybatis-3.2.1.jar:3.2.1]
at org.apache.ibatis.builder.MapperBuilderAssistant.addMappedStatement(MapperBuilderAssistant.java:303) ~[mybatis-3.2.1.jar:3.2.1]
at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:111) ~[mybatis-3.2.1.jar:3.2.1]
at org.apache.ibatis.session.Configuration.buildAllStatements(Configuration.java:675) ~[mybatis-3.2.1.jar:3.2.1]
at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:601) ~[mybatis-3.2.1.jar:3.2.1]
at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:596) ~[mybatis-3.2.1.jar:3.2.1]
at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:176) ~[mybatis-3.2.1.jar:3.2.1]
... 46 common frames omitted
Caused by: java.lang.IllegalArgumentException: Result Maps collection does not contain value for com.tujia.tuuser.mapper.UserMapper.User
at org.apache.ibatis.session.Configuration$StrictMap.get(Configuration.java:768) ~[mybatis-3.2.1.jar:3.2.1]
at org.apache.ibatis.session.Configuration.getResultMap(Configuration.java:522) ~[mybatis-3.2.1.jar:3.2.1]
at org.apache.ibatis.builder.MapperBuilderAssistant.setStatementResultMap(MapperBuilderAssistant.java:363) ~[mybatis-3.2.1.jar:3.2.1]
... 52 common frames omitted

  这些错误,其实也没什么,关键是这里一句。

Result Maps collection does not contain value for com.tujia.tuuser.mapper.UserMapper.User
  就是提示你,找不到map映射。所以,就需要看看是不是没有配置resultMap,或者是否配置错了
  下面再说关于 resultMap 映射的配置了。
  先贴代码:
  下面是resultMap配置。


    <resultMap id="User" type="User">  
<result property="birthTime" column="birth_time"/>  
<result property="createTime" column="create_time"/>  
</resultMap>下面是,需要定义resultMap的sql查询,也就是<select>,代码如下:
<select id="list" resultMap="User">  
select * from user order by id
</select>
  这个resultMap 的id 属性,就是你在 mapper.xml文件中定义的 resultMap="User"。也就是,你的sql语句的返回类型,我这里是User,
  然后, type:是需要转换成的类型。我这里是User对象。

  这就是为什么我说,resultType就是简缩版的resultMap  的原因,如果你用resultType,就不用配置这个了。
  然后下面呢,就是配置,查询结果,和实体类字段的映射关系。

       <result property="birthTime" column="birth_time"/> property:是你实体类中的字段,  column:是你数据库中查询出来的字段。
  现在,就可以把数据库中的数据,进行转换,成为java对象了。


版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-305627-1-1.html 上篇帖子: mybatis配置文件的基本结构 下篇帖子: 浅谈MyBatis及与Spring的整合
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表