mybatis查询结果返回至实体类的示例代码

 更新时间:2020年07月10日 11:42:05   作者:流云一号  
这篇文章主要介绍了mybatis查询结果返回至实体类的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

近期,利用mybatis做一个简单查询,先看主要代码:

Service层:

package com.example1.service;
 
import java.util.List;
 
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import com.example1.dao.OrderMapper;
import com.example1.pojo.Order;
 
@Service
public class OrderService {
 
 private Logger log = Logger.getLogger(OrderService.class);
 
 @Autowired
 private OrderMapper orderMapper;
 
 public void findOrders() {
 List<Order> orders = orderMapper.findOrders();
 for (Order order : orders) {
  log.info(order.getId() + " : " + order.getName());
 }
 }
}

dao层:

package com.example1.dao;
import java.util.List;
import com.example1.pojo.Order;
public interface OrderMapper {
 public List<Order> findOrders();
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example1.dao.OrderMapper">
 
 <select id="findOrders" parameterType="String" resultType="java.util.Map">
 SELECT * FROM t_order 
 </select>
</mapper>

Order类:

package com.example1.pojo;
 
public class Order {
 
 private String id;
 private String name;
 public String getId() {
 return id;
 }
 public void setId(String id) {
 this.id = id;
 }
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 @Override
 public String toString() {
 return "Order [id=" + id + ", name=" + name + "]";
 }
}

配置妥当,执行,结果报错了:

java.lang.ClassCastException: java.util.HashMap cannot be cast to com.example1.pojo.Order
 at com.example1.service.OrderService.findOrders(OrderService.java:26)
 at com.example1.service.OrderService$$FastClassBySpringCGLIB$$b6b2c61a.invoke(<generated>)
 at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
 at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
 at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
 at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
 at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
 at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
 at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653)
 at com.example1.service.OrderService$$EnhancerBySpringCGLIB$$e285c4bb.findOrders(<generated>)
 at com.example1.controller.OrderController.findOrders(OrderController.java:22)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
 at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
 at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:100)
 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:604)
 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:565)
 at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
 at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
 at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
 at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879)
 at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:617)
 at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1778)
 at java.lang.Thread.run(Thread.java:745)

可以看出,java.util.HashMap不能直接存储到具体的实体类。

解决办法:

一、dao层通过resultType指定返回类型

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example1.dao.OrderMapper">
 
 <select id="findOrders" parameterType="String" resultType="com.example1.pojo.Order">
 SELECT * FROM t_order 
 </select>
</mapper>

二、查询结果返回list,然后遍历list,将map转换成相应的java对象

修改后的Service层:

package com.example1.service;
 
import java.util.List;
import java.util.Map;
 
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.example1.dao.OrderMapper;
import com.example1.pojo.Order;
 
@Service
public class OrderService {
 
 private Logger log = Logger.getLogger(OrderService.class);
 
 @Autowired
 private OrderMapper orderMapper;
 
 public void findOrders() {
 List<Map> orders = orderMapper.findOrders();
 for (Map orderMap : orders) {
  String orderJsonStr = JSONObject.toJSONString(orderMap);
  Order order = (Order) JSONArray.parseObject(orderJsonStr,Order.class);
  log.info(order.getId() + " : " + order.getName());
 }
 }
}

dao层:

package com.example1.dao;
 
import java.util.List;
import java.util.Map;
 
public interface OrderMapper {
 
 public List<Map> findOrders();
}

其中,关于map转java对象的方法有好多种,具体可以参考本人另一篇文章:

https://www.jb51.net/article/190478.htm

以上两种方法均实际测试通过。到此这篇关于mybatis查询结果返回至实体类的示例代码的文章就介绍到这了,更多相关mybatis结果返回实体类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot创建文件夹失败的解决

    springboot创建文件夹失败的解决

    这篇文章主要介绍了springboot创建文件夹失败的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • SpringBoot深入分析运行原理与功能实现

    SpringBoot深入分析运行原理与功能实现

    我们发现springBoot程序开发比spring程序编写起来容易的多。配置简洁,依赖关系简单,启动运行容易。那么结下了我们我们就要思考一下入门程序中的这些功能是怎么实现的
    2022-09-09
  • java中的 toString()方法实例代码

    java中的 toString()方法实例代码

    toString()方法 相信大家都用到过,一般用于以字符串的形式返回对象的相关数据。这篇文章主要介绍了java中的 toString()方法,需要的朋友可以参考下
    2017-05-05
  • 关于Spring的@Autowired依赖注入常见错误的总结

    关于Spring的@Autowired依赖注入常见错误的总结

    有时我们会使用@Autowired自动注入,同时也存在注入到集合、数组等复杂类型的场景。这都是方便写 bug 的场景,本篇文章带你了解Spring @Autowired依赖注入的坑
    2021-09-09
  • Mybatis日志模块的适配器模式详解

    Mybatis日志模块的适配器模式详解

    这篇文章主要介绍了Mybatis日志模块的适配器模式详解,,mybatis用了适配器模式来兼容这些框架,适配器模式就是通过组合的方式,将需要适配的类转为使用者能够使用的接口
    2022-08-08
  • Spring Boot产生环形注入的解决方案

    Spring Boot产生环形注入的解决方案

    这篇文章主要介绍了Spring Boot产生环形注入的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • MyBatis-Plus中MetaObjectHandler没生效完美解决

    MyBatis-Plus中MetaObjectHandler没生效完美解决

    在进行测试时发现配置的MyMetaObjectHandler并没有生效,本文主要介绍了MyBatis-Plus中MetaObjectHandler没生效完美解决,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • SpringBoot3+ShardingJDBC5.5.0 读写分离配置的实现

    SpringBoot3+ShardingJDBC5.5.0 读写分离配置的实现

    本文主要介绍了SpringBoot3+ShardingJDBC5.5.0 读写分离配置的实现,最新版5.5.0支持SpringBoot3x现分享给大家,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • k8s部署java项目的实现

    k8s部署java项目的实现

    本文主要介绍了k8s部署java项目的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Springboot 启动之后初始化资源的几种方法

    Springboot 启动之后初始化资源的几种方法

    在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等,本文主要介绍了Springboot 启动之后初始化资源的几种方法,感兴趣的可以了解一下
    2024-01-01

最新评论