mybatis查詢(xún)結(jié)果返回至實(shí)體類(lèi)的示例代碼
近期,利用mybatis做一個(gè)簡(jiǎn)單查詢(xún),先看主要代碼:
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類(lèi):
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 + "]";
}
}
配置妥當(dāng),執(zhí)行,結(jié)果報(bào)錯(cuò)了:
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不能直接存儲(chǔ)到具體的實(shí)體類(lèi)。
解決辦法:
一、dao層通過(guò)resultType指定返回類(lèi)型
<?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>
二、查詢(xún)結(jié)果返回list,然后遍歷list,將map轉(zhuǎn)換成相應(yīng)的java對(duì)象
修改后的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();
}
其中,關(guān)于map轉(zhuǎn)java對(duì)象的方法有好多種,具體可以參考本人另一篇文章:
http://m.fzitv.net/article/190478.htm
以上兩種方法均實(shí)際測(cè)試通過(guò)。到此這篇關(guān)于mybatis查詢(xún)結(jié)果返回至實(shí)體類(lèi)的示例代碼的文章就介紹到這了,更多相關(guān)mybatis結(jié)果返回實(shí)體類(lèi)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot深入分析運(yùn)行原理與功能實(shí)現(xiàn)
我們發(fā)現(xiàn)springBoot程序開(kāi)發(fā)比spring程序編寫(xiě)起來(lái)容易的多。配置簡(jiǎn)潔,依賴(lài)關(guān)系簡(jiǎn)單,啟動(dòng)運(yùn)行容易。那么結(jié)下了我們我們就要思考一下入門(mén)程序中的這些功能是怎么實(shí)現(xiàn)的2022-09-09
關(guān)于Spring的@Autowired依賴(lài)注入常見(jiàn)錯(cuò)誤的總結(jié)
有時(shí)我們會(huì)使用@Autowired自動(dòng)注入,同時(shí)也存在注入到集合、數(shù)組等復(fù)雜類(lèi)型的場(chǎng)景。這都是方便寫(xiě) bug 的場(chǎng)景,本篇文章帶你了解Spring @Autowired依賴(lài)注入的坑2021-09-09
Spring Boot產(chǎn)生環(huán)形注入的解決方案
這篇文章主要介紹了Spring Boot產(chǎn)生環(huán)形注入的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
MyBatis-Plus中MetaObjectHandler沒(méi)生效完美解決
在進(jìn)行測(cè)試時(shí)發(fā)現(xiàn)配置的MyMetaObjectHandler并沒(méi)有生效,本文主要介紹了MyBatis-Plus中MetaObjectHandler沒(méi)生效完美解決,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
SpringBoot3+ShardingJDBC5.5.0 讀寫(xiě)分離配置的實(shí)現(xiàn)
本文主要介紹了SpringBoot3+ShardingJDBC5.5.0 讀寫(xiě)分離配置的實(shí)現(xiàn),最新版5.5.0支持SpringBoot3x現(xiàn)分享給大家,具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08
k8s部署java項(xiàng)目的實(shí)現(xiàn)
本文主要介紹了k8s部署java項(xiàng)目的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
Springboot 啟動(dòng)之后初始化資源的幾種方法
在我們實(shí)際工作中,總會(huì)遇到這樣需求,在項(xiàng)目啟動(dòng)的時(shí)候需要做一些初始化的操作,比如初始化線程池,提前加載好加密證書(shū)等,本文主要介紹了Springboot 啟動(dòng)之后初始化資源的幾種方法,感興趣的可以了解一下2024-01-01

