mybatis 中的 ResultHandler(传入map返回map)
测试代码
package com.xwhbshweb.service; import java.util.HashMap; import java.util.Map; import org.apache.ibatis.session.ResultContext; import org.apache.ibatis.session.ResultHandler; public interface OrdersService { /** * 返回某日订单成交数及当日成交总金额 day 的格式为 2018/01/30 * * 若 day 为 null 则返回总成交订单及总成交金额 * * @param id * 商户号 * @param day * @return */ public Map<String, String> getOrderCountTotal(String id, String day); /** * 处理 select 结果 * * @author Administrator * */ class OrdersResultHandler implements ResultHandler { private final Map<String, String> mappedResults = new HashMap<String, String>(); @Override public void handleResult(ResultContext resultContext) { Map map = (Map) resultContext.getResultObject(); if (map.get("count") instanceof Long) { System.out.println("count Long "); if (null == String.valueOf((Long) map.get("count")) || String.valueOf((Long) map.get("count")).equals("")) { mappedResults.put("count", "0"); } else { mappedResults.put("count", String.valueOf((Long) map.get("count"))); } } if (map.get("total") instanceof Double) { System.out.println("total Long "); String total = String.valueOf((Double) map.get("total")).split("\\.")[0]; if (total.equals("0")) { mappedResults.put("total", "0"); }else { float yuan = Float.valueOf(total) / 1000; mappedResults.put("total", String.valueOf(yuan)); } } } public Map getMappedResults() { return mappedResults; } } }
实现
package com.xwhbshweb.service.imp; import java.util.HashMap; import java.util.Map; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.springframework.stereotype.Service; import com.xwhbshweb.config.MybatisSqlSessionFactory; import com.xwhbshweb.service.OrdersService; @Service public class OrdersServiceI implements OrdersService { private SqlSessionFactory sqlSessionFactory = MybatisSqlSessionFactory.getOne(); @Override public Map<String, String> getOrderCountTotal(String id,String day) { SqlSession session = sqlSessionFactory.openSession(true); Map<String, String> params = new HashMap<String, String>(); params.put("id", id); if (null == day) { params.put("day", "%"); }else { params.put("day", day+"%"); } OrdersService.OrdersResultHandler handler = new OrdersService.OrdersResultHandler(); session.select("com.xwhbank.cn.config.mybatis.namespace.ordersMapper.selectDayOrderCountTotal", params, handler); session.close(); Map<String,String> map =handler.getMappedResults(); return map; } }
xml
<?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.xwhbank.cn.config.mybatis.namespace.ordersMapper"> <select id="selectOne" resultType="orders"> select * from orders where the_super_id = #{id}; </select> <select id="selectDayOrderCountTotal" parameterType="java.util.Map" resultType="java.util.HashMap"> select count(*) as count,SUM(money_to_tenant) as total from orders where the_super_id = #{id} and order_time like #{day} and state='2'; </select> <insert id="insertOne" parameterType="orders"> insert into orders (id,tenant_order_no,the_super_id,state,money_amount,cut,money_to_tenant,money_to_xwh,pay_way,good_info,asy_notify_url,sy_return_url,sign_,order_time,sharding_id) values ("next value for MYCATSEQ_order",#{tenant_order_no},#{the_super_id},#{state},#{money_amount},#{cut},#{money_to_tenant},#{money_to_xwh},#{pay_way},#{good_info},#{asy_notify_url},#{sy_return_url},#{sign_},#{order_time},#{sharding_id}); </insert> </mapper>
注意传入 map参数 及 传出map参数 的颜色对应
map传入值时 若是不同类型 将 map的值改为Object就好了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】