mybatis中resulthandler的用法

 更新时间:2022年01月29日 10:14:06   作者:杭川奇迹  
这篇文章主要介绍了mybatis中resulthandler的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

resulthandler的用法

ResultHandler,顾名思义,对返回的结果进行处理,最终得到自己想要的数据格式或类型。也就是说,可以自定义返回类型。下面通过一个例子讲解它的使用方法:

创建实体类

package com.ccb.demossm.entity;
import com.ccb.demossm.annotation.MyAnnotation;
import org.springframework.stereotype.Component;
@Component
public class Users {
    //用户ID
    private String userId;
    //用户名
    private String userName;
    //用户密码
    private String userPwd;
    //用户性别
    public String sex;
    //备注
    protected String mark;
    public String getMark() {
        return mark;
    }
    public void setMark(String mark) {
        this.mark = mark;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getUserPwd() {
        return userPwd;
    }
    public void setUserPwd(String userPwd) {
        this.userPwd = userPwd;
    }
    public Users() {
    }
    public Users(String userId) {
        this.userId = userId;
    }
}

sql,返回值类型要写

    <select id="getUserResult" resultType="com.ccb.demossm.entity.Users">
         select u.userId,u.userName, u.userPwd from users u
    </select>

Mapper,返回值必须是void

void getUserResult(ResultHandler<Users> resultHandler);package com.ccb.demossm.mapper;
import com.ccb.demossm.entity.Users;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.ResultHandler;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
@Repository
@SpringBootApplication
public interface UsersMapper {
    void getUserResult(ResultHandler<Users> resultHandler);
}

Test

package com.ccb.demossm;
import com.ccb.demossm.entity.Users;
import com.ccb.demossm.mapper.UsersMapper;
import org.apache.ibatis.session.ResultContext;
import org.apache.ibatis.session.ResultHandler;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestResultHandle {
    @Autowired
   private UsersMapper usersMapper;
    @Test
    public void test() {
        usersMapper.getUserResult(new ResultHandler<Users>() {
            @Override
            public void handleResult(ResultContext<? extends Users> resultContext) {
                Users resultObject = resultContext.getResultObject();
                String userId = resultObject.getUserId();
                //写数据处理业务
                System.out.println(userId);
            }
        });
    }
}

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MyBatis中的循环插入insert foreach问题

    MyBatis中的循环插入insert foreach问题

    这篇文章主要介绍了MyBatis中的循环插入insert foreach问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • spring获取bean的源码解析

    spring获取bean的源码解析

    这篇文章主要介绍了spring获取bean的源码解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • 基于JPA中的@Basic注解详解

    基于JPA中的@Basic注解详解

    这篇文章主要介绍了JPA中的@Basic注解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • spring framework源码调试技巧

    spring framework源码调试技巧

    这篇文章给大家介绍了spring-framework源码调试方法,可以直接将最新代码clone到本地,如果想在代码做一些注释,也可以Fork到自己的仓库。本文采用Fork的方式,并添加了测试module,感兴趣的朋友一起看看吧
    2021-10-10
  • Java中的gateway自定义过滤器详解

    Java中的gateway自定义过滤器详解

    这篇文章主要介绍了Java中的gateway自定义过滤器详解,过滤器是指gateway在路由过程中(A地址路由到B地址)生效进行过滤操作的,所有首先你得先配一个地址路由,本文提供了部分实现代码,需要的朋友可以参考下
    2023-11-11
  • IDEA之项目run按钮为灰色,无法运行问题

    IDEA之项目run按钮为灰色,无法运行问题

    这篇文章主要介绍了IDEA之项目run按钮为灰色,无法运行问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 浅谈Java中的private方法是否可以被代理

    浅谈Java中的private方法是否可以被代理

    这篇文章主要介绍了浅谈Java中的private方法是否可以被代理,在 Java 8之前,接口可以有常量变量和抽象方法,我们不能在接口中提供方法实现,如果我们要提供抽象方法和非抽象方法(方法与实现)的组合,那么我们就得使用抽象类,需要的朋友可以参考下
    2023-12-12
  • JDBC利用C3P0数据库连接池连接数据库

    JDBC利用C3P0数据库连接池连接数据库

    这篇文章主要为大家详细介绍了JDBC利用C3P0数据库连接池连接数据库,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • idea工具配置隐藏文件及文件夹方式

    idea工具配置隐藏文件及文件夹方式

    这篇文章主要介绍了idea工具配置隐藏文件及文件夹方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Mybatis返回插入主键id的方法

    Mybatis返回插入主键id的方法

    这篇文章主要介绍了 Mybatis返回插入主键id的方法,在文章底部给大家补充了Mybatis中insert中返回主键ID的方法,非常不错,需要的朋友可以参考下
    2017-04-04

最新评论