mybatis中resulthandler的用法
更新時間:2022年01月29日 10:14:06 作者:杭川奇跡
這篇文章主要介紹了mybatis中resulthandler的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
resulthandler的用法
ResultHandler,顧名思義,對返回的結果進行處理,最終得到自己想要的數(shù)據(jù)格式或類型。也就是說,可以自定義返回類型。下面通過一個例子講解它的使用方法:
創(chuàng)建實體類
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è)務 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 { /** * 返回某日訂單成交數(shù)及當日成交總金額 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; } } }
實現(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ù) 的顏色對應
map傳入值時 若是不同類型 將 map的值改為Object就好了
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
郵件收發(fā)原理你了解嗎? 郵件發(fā)送基本過程與概念詳解(一)
你真的了解郵件收發(fā)原理嗎?這篇文章主要為大家詳細介紹了郵件發(fā)送基本過程與概念,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10Shiro+Redis實現(xiàn)登錄次數(shù)凍結的示例
這篇文章主要介紹了Shiro+Redis實現(xiàn)登錄次數(shù)凍結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12Spring?Boot提高開發(fā)效率必備工具lombok使用
這篇文章主要為大家介紹了Spring?Boot提高開發(fā)效率的必備工具lombok使用方法示例及步驟說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-03-03