MyBatis妙用 数据库

2023-01-17 约 468 字 阅读时长1 分钟

MyBatis妙用

ResultHandler

sql如下,需要返回map;map key为 查询结果id,map value为查询结果的 name;此时可以用 ResultHandler 对查询结果集处理,返回需要的 map

sql
1select id,name from t_user;
  1. 编写MapResultHandler 实现 ResultHandler 接口

    java
     1@SuppressWarnings("all")
     2public class MapResultHandler<K,V> implements ResultHandler<Map<K,V>> {
     3    private final Map<K,V> mappedResults = new HashMap<>();
     4
     5    @Override
     6    public void handleResult(ResultContext context) {
     7        Map map = (Map) context.getResultObject();
     8        mappedResults.put((K)map.get("key"), (V)map.get("value"));
     9    }
    10
    11    public Map<K,V> getMappedResults() {
    12        return mappedResults;
    13    }
    14}
  2. 编写接口方法和mapper文件,注意接口方法没有任何返回值

    接口:

    java
    1void getNameMapResult(MapResultHandler<String,Long> resultHandler,@Param("param") String param);

    mapper文件:

    xml
    1<!-- 这里的key和value为标识,方便ResultHandler循环处理结果时取值 -->
    2<resultMap id="resMap" type="java.util.HashMap">
    3    <result property="key" column="id" javaType="java.lang.String"/>
    4    <result property="value" column="name" javaType="java.lang.Long"/>
    5</resultMap>
    6<select id="getUserResult" resultMap="resMap">
    7	select id as id ,name as name from t_user;
    8</select>
  3. 调用

    java
    1//  MapResultHandler 实例
    2MapResultHandler<String,String> resultHandler = new MapResultHandler<>();
    3// 调用方法,传入 MapResultHandler 实例 和需要的参数
    4queryMapper.getUserResult(resultHandler,"1527147");
    5// 通过 MapResultHandler 实例获取需要的结果
    6Map<String, String> results = resultHandler.getMappedResults();

@MapKey注解

MapKey 注解标注在mapper接口方法上

作用:结果返回为 map 对象,map key为 @MapKey 标识的字段,value 为查询的结果集

示例:

mapper 接口

java
1@MapKey("id")
2Map<String,User> getUserMap();

mapper 文件

xml
1<select id="getUserResult" resultMap="org.lei.entity.User">
2	select id "id" ,name name from t_user;
3</select>

返回结果map结构如下

json
 1{
 2	id1: {
 3		userId: id1,
 4        userName: name1
 5	},
 6    id2: {
 7        userId: id2,
 8        userName: name2
 9    }
10	...
11}
使用滚轮缩放
按住拖动