mybatis中resulthandler的用法
resulthandler的用法
ResultHandler,顧名思義,對(duì)返回的結(jié)果進(jìn)行處理,最終得到自己想要的數(shù)據(jù)格式或類型。也就是說,可以自定義返回類型。下面通過一個(gè)例子講解它的使用方法:
創(chuàng)建實(shí)體類
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(); //寫數(shù)據(jù)處理業(yè)務(wù) System.out.println(userId); } }); } }
ResultHandler(傳入map返回map)
測(cè)試代碼
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 { /** * 返回某日訂單成交數(shù)及當(dāng)日成交總金額 day 的格式為 2018/01/30 * * 若 day 為 null 則返回總成交訂單及總成交金額 * * @param id * 商戶號(hào) * @param day * @return */ public Map<String, String> getOrderCountTotal(String id, String day); /** * 處理 select 結(jié)果 * * @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; } } }
實(shí)現(xiàn)
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參數(shù) 及 傳出map參數(shù) 的顏色對(duì)應(yīng)
map傳入值時(shí) 若是不同類型 將 map的值改為Object就好了
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
郵件收發(fā)原理你了解嗎? 郵件發(fā)送基本過程與概念詳解(一)
你真的了解郵件收發(fā)原理嗎?這篇文章主要為大家詳細(xì)介紹了郵件發(fā)送基本過程與概念,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10Shiro+Redis實(shí)現(xiàn)登錄次數(shù)凍結(jié)的示例
這篇文章主要介紹了Shiro+Redis實(shí)現(xiàn)登錄次數(shù)凍結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Spring?Boot提高開發(fā)效率必備工具lombok使用
這篇文章主要為大家介紹了Spring?Boot提高開發(fā)效率的必備工具lombok使用方法示例及步驟說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-03-03JAVA復(fù)制數(shù)組和重置數(shù)組大小操作
這篇文章主要介紹了JAVA復(fù)制數(shù)組和重置數(shù)組大小操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09mybatis?xml文件熱加載實(shí)現(xiàn)示例詳解
這篇文章主要為大家介紹了mybatis?xml文件熱加載實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Java中Optional的正確用法與爭(zhēng)議點(diǎn)詳解
這篇文章主要介紹了Java中Optional的正確用法與爭(zhēng)議點(diǎn)的相關(guān)資料,需要的朋友可以參考下2022-11-11