多表关联查询返回结果集的处理方法

将查询结果保存为Map集合,如果返回的是多条结果,将map加入到List中返回。

关联查询返回的是多个结果使用 List<Map<String,Object>>,map中存的是 <字段名,值>
单个结果使用Map<String,Object>

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.*;

/**
 * Description:用于查询结果类型转换
 * Date: 2023/2/19 21:42
 **/
public class ModelConvert {

    /**
     * Date: 2023/2/19 21:58
     * description:查询出多条结果时
     */
    public static List<Map<String,Object>> convertMany(ResultSet resultSet)  {
//        新建map,使用list集合存放多条记录
        List<Map<String,Object>> list=new ArrayList<Map<String, Object>>();
        try {
            //resultSet的结构信息,比如字段数
            ResultSetMetaData md=resultSet.getMetaData();
//            查询出来的字段数
            int columnCount=md.getColumnCount();
            while(resultSet.next()){
//                将查询到的内容按照  <字段名,值> 的方式放入map集合中
                Map<String,Object> dataMap=new HashMap<String, Object>();
                for (int i=1;i<=columnCount;i++){
//                    循环,将所有字段放到Map中 getColumnName(i) 获取第i个列名 getObject(i) 获取第i个对象的值
                    dataMap.put(md.getColumnName(i),resultSet.getObject(i));
//                    将map添加到List中
                    list.add(dataMap);
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
//            关闭连接
            if(resultSet!=null){
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                resultSet=null;
            }
        }
        return list;
    }
    /**
     * Date: 2023/2/19 21:59
     * description:查询出单条记录
     */
    public static Map<String,Object> convertOne(ResultSet resultSet)  {
//        新建map,使用list集合存放多条记录
        Map<String,Object> map=new TreeMap<String, Object>();
        try {
            //resultSet的结构信息,比如字段数
            ResultSetMetaData md=resultSet.getMetaData();
//            查询出来的字段数
            int columnCount=md.getColumnCount();
            while(resultSet.next()){
//                将查询到的内容按照  <字段名,值> 的方式放入map集合中
                Map<String,Object> dataMap=new HashMap<String, Object>();
                for (int i=1;i<=columnCount;i++){
//                    循环,将所有字段放到Map中 getColumnName(i) 获取第i个列名 getObject(i) 获取第i个对象的值
                    dataMap.put(md.getColumnName(i),resultSet.getObject(i));

                }
            }
            return map;
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
//            关闭连接
            if(resultSet!=null){
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                resultSet=null;
            }
        }
        return null;
    }
}

Mapper.xml文件中多表联合查询使用的是resultMap
在resultMap标签中使用association标签或者collection标签
association是用于一对一和多对一,而collection是用于一对多的关系

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值