前言

最近有个需求里要将jdbc查询到的数据转换为实体类对象,记录下实现方法。

实现

1.示例数据

本文将使用jdbc查询下图中的数据库数据,并将其查询结果转换成实体类对象和实体类对象列表。
在这里插入图片描述

2.创建实体类

根据所需要查询的数据创建相应的实体类。

package test;

/**
 * @author wingkin
 * @date 2021/7/2 15:53
 */
public class UserBean {
    private int id;
    private String name;
    private String sex;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "UserBean{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }
}

3.实现代码

import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author wingkin
 * @date 2021/7/2 15:37
 */
public class ResultSetToBean {
    private static final Logger log = LoggerFactory.getLogger(ResultSetToBean.class);

    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        List<UserBean> userBeanList = new ArrayList<>();
        try {
            // 指定Driver Class
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 创建MySQL连接,参数依次为数据库连接地址、用户和密码
            connection = DriverManager.getConnection(
                    "jdbc:mysql://118.178.189.127:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai",
                    "root",
                    "123456");

            String querySql = "SELECT * FROM `user` a WHERE a.id >= ?";
            ps = connection.prepareStatement(querySql);
            int id = 1;
            // 拼接查询SQL,将id的值拼接到querySql中的第一个问号里
            ps.setInt(1, id);
            resultSet = ps.executeQuery();
            // 获取ResultSet对象的列的数量、类型和属性。
            ResultSetMetaData md = resultSet.getMetaData();
            int columnCount = md.getColumnCount();
            // 将ResultSet对象的列名和值存到map中,再将map转换为json字符串,最后将json字符串转换为实体类对象
            Map<String, Object> rowData = new HashMap<>();
            while (resultSet.next()) {
                for (int i = 1; i <= columnCount; i++) {
                    rowData.put(md.getColumnLabel(i), resultSet.getObject(i));
                }
                String jsonStr = JSONObject.toJSONString(rowData);
                UserBean userBean = JSONObject.parseObject(jsonStr, UserBean.class);
                log.info("转换为实体类对象:{}",userBean);
                userBeanList.add(userBean);
            }
            log.info("实体类对象列表:{}",userBeanList);

        } catch (SQLException | ClassNotFoundException e) {
            throw e;
        } finally {
            if(resultSet != null) {
                resultSet.close();
            }
            if(ps != null) {
                ps.close();
            }
            if(connection != null) {
                connection.close();
            }
        }
    }
}

4.运行结果

在这里插入图片描述

总结

本文实现了java JDBC 查询数据库得到的resultSet结果集转换成实体类对象和实体类对象列表。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐