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就好了

posted on   --LP--  阅读(6082)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 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】
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示