mybatis查询结果返回至实体类的示例代码
近期,利用mybatis做一个简单查询,先看主要代码:
Service层:
packagecom.example1.service; importjava.util.List; importorg.apache.log4j.Logger; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.stereotype.Service; importcom.example1.dao.OrderMapper; importcom.example1.pojo.Order; @Service publicclassOrderService{ privateLoggerlog=Logger.getLogger(OrderService.class); @Autowired privateOrderMapperorderMapper; publicvoidfindOrders(){ Listorders=orderMapper.findOrders(); for(Orderorder:orders){ log.info(order.getId()+":"+order.getName()); } } }
dao层:
packagecom.example1.dao; importjava.util.List; importcom.example1.pojo.Order; publicinterfaceOrderMapper{ publicListfindOrders(); }
SELECT*FROMt_order
Order类:
packagecom.example1.pojo; publicclassOrder{ privateStringid; privateStringname; publicStringgetId(){ returnid; } publicvoidsetId(Stringid){ this.id=id; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } @Override publicStringtoString(){ return"Order[id="+id+",name="+name+"]"; } }
配置妥当,执行,结果报错了:
java.lang.ClassCastException:java.util.HashMapcannotbecasttocom.example1.pojo.Order
atcom.example1.service.OrderService.findOrders(OrderService.java:26)
atcom.example1.service.OrderService$$FastClassBySpringCGLIB$$b6b2c61a.invoke()
atorg.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
atorg.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717)
atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
atorg.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
atorg.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
atorg.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
atorg.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
atorg.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653)
atcom.example1.service.OrderService$$EnhancerBySpringCGLIB$$e285c4bb.findOrders()
atcom.example1.controller.OrderController.findOrders(OrderController.java:22)
atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
atjava.lang.reflect.Method.invoke(Method.java:498)
atorg.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
atorg.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
atorg.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:100)
atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:604)
atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:565)
atorg.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
atorg.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
atorg.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
atorg.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
atorg.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
atjavax.servlet.http.HttpServlet.service(HttpServlet.java:617)
atjavax.servlet.http.HttpServlet.service(HttpServlet.java:723)
atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
atorg.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879)
atorg.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:617)
atorg.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1778)
atjava.lang.Thread.run(Thread.java:745)
可以看出,java.util.HashMap不能直接存储到具体的实体类。
解决办法:
一、dao层通过resultType指定返回类型
SELECT*FROMt_order
二、查询结果返回list,然后遍历list,将map转换成相应的java对象
修改后的Service层:
packagecom.example1.service; importjava.util.List; importjava.util.Map; importorg.apache.log4j.Logger; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.stereotype.Service; importcom.alibaba.fastjson.JSONArray; importcom.alibaba.fastjson.JSONObject; importcom.example1.dao.OrderMapper; importcom.example1.pojo.Order; @Service publicclassOrderService{ privateLoggerlog=Logger.getLogger(OrderService.class); @Autowired privateOrderMapperorderMapper; publicvoidfindOrders(){ List
dao层:
packagecom.example1.dao; importjava.util.List; importjava.util.Map; publicinterfaceOrderMapper{ publicList
其中,关于map转java对象的方法有好多种,具体可以参考本人另一篇文章:
https://www.nhooo.com/article/190478.htm
以上两种方法均实际测试通过。到此这篇关于mybatis查询结果返回至实体类的示例代码的文章就介绍到这了,更多相关mybatis结果返回实体类内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!