日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

MySQL拦截器获取xml id_关于mybatis拦截器,有谁知道怎么对结果集进行拦截,将指定字段查询结果进行格式化...

發布時間:2023/11/27 生活经验 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL拦截器获取xml id_关于mybatis拦截器,有谁知道怎么对结果集进行拦截,将指定字段查询结果进行格式化... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用MyBatis結果集攔截器做過這樣一個需求:

由于項目需求經常變動,項目MySQL數據庫都是存放JSON字符串,例如:用戶的基本信息隨著版本升級可能會有變動

數據表

CREATE TABLE `account` (

`id` bigint(11) unsigned NOT NULL AUTO_INCREMENT,

`infos` text NOT NULL COMMENT '用戶JSON基本信息',

`createTime` int(10) unsigned NOT NULL COMMENT '創建時間',

`updateTime` int(10) unsigned NOT NULL COMMENT '更新時間',

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

數據:

id

infos

createTime

updateTime

1

{"nickName":"Jan","region_area":"","region_city":"深圳市","region_country":"中國","region_province":"廣東省","sex":"男","signature":"只要不放棄就還有機會!"}

1467793564

1470795733

JSONPlugin攔截器

使用MyBatis攔截器對ResultSetHandler接口的handleResultSets方法進行攔截:

package me.xuebai.modules.mybatis;

import java.sql.ResultSet;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

import java.util.Properties;

import org.apache.commons.lang3.StringUtils;

import org.apache.ibatis.executor.resultset.ResultSetHandler;

import org.apache.ibatis.plugin.Interceptor;

import org.apache.ibatis.plugin.Intercepts;

import org.apache.ibatis.plugin.Invocation;

import org.apache.ibatis.plugin.Plugin;

import org.apache.ibatis.plugin.Signature;

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.TypeReference;

import me.xuebai.modules.entity.Account;

@Intercepts({@Signature(

type= ResultSetHandler.class,

method = "handleResultSets",

args = {Statement.class})})

public class JSONPlugin implements Interceptor {

@Override

public Object intercept(Invocation invocation) throws Throwable {

Object[] args = invocation.getArgs();

// 獲取到當前的Statement

Statement stmt = (Statement) args[0];

// 通過Statement獲得當前結果集

ResultSet resultSet = stmt.getResultSet();

List resultList = new ArrayList();

if(resultSet != null && resultSet.next()) {

Account account = new Account();

// infos字段

String infos = resultSet.getString("infos");

// 判斷是否為空

if(StringUtils.isNotBlank(infos)) {

// fastjson泛型反序列化

Map infMap = JSON.parseObject(infos, new TypeReference(){});

account.setInfos(infMap);

resultList.add(account);

}

// handleResultSets返回結果一定是一個List

// size為1時,Mybatis會取第一個元素作為接口的返回值。

return resultList;

}

return invocation.proceed();

}

@Override

public Object plugin(Object target) {

return Plugin.wrap(target, this);

}

@Override

public void setProperties(Properties properties) {

}

}

mybatis-config.xml

在mybatis配置文件中注冊插件:

測試輸出

Account account = accountDao.get(1L);

// {sex=男, region_city=深圳市, region_area=, nickName=Jan, region_country=中國, signature=只要不放棄就還有機會!, region_province=廣東省}

System.out.println(account.getInfos());

總結

以上是生活随笔為你收集整理的MySQL拦截器获取xml id_关于mybatis拦截器,有谁知道怎么对结果集进行拦截,将指定字段查询结果进行格式化...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。