反射实现增删改查(DAO层)——查询数据

先贴出代码,后续补充自己的思路、配置文件、使用方式:
/**
     * 
     * 数据查询
     * 
     */
    @Override
    public List<?> queryObject(List<Map<String, Object>> params,
            String tableName) {
        List<Object> objectList = new ArrayList<Object>();
        StringBuilder sql = new StringBuilder("SELECT * FROM " + tableName
                + " WHERE 1=1");
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

        try {
            connection = DBConnection.getConnection();
            if (params != null && params.size() > 0) {
                for (int i = 0; i < params.size(); i++) {
                    Map<String, Object> map = params.get(i);
                    sql.append(" AND  " + map.get("name") + " "
                            + map.get("rela") + " " + map.get("value") + " ");
                }
            }
            preparedStatement = connection.prepareStatement(sql.toString());

            resultSet = preparedStatement.executeQuery();
            ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
            // 获取数据列数
            int columnsCount = resultSetMetaData.getColumnCount();
            Field field = null;
            Object object = null;
            while (resultSet.next()) {
                /**
                 * 获取实例化对象
                 */
                object = objectClass.newInstance();

                String columnName = null;
                String columnTypeName = null;
                String columnValue = null;

                for (int i = 1; i <= columnsCount; i++) {
                    columnName = resultSetMetaData.getColumnName(i);
                    columnTypeName = resultSetMetaData.getColumnTypeName(i);
                    columnValue = resultSet.getString(i);
                    field = object.getClass().getDeclaredField(columnName);
                    field.setAccessible(true);
                    switch (columnTypeName) {
                    case "INT":
                        field.set(object, Integer.parseInt(columnValue));
                        break;
                    case "VARCHAR":
                        field.set(object, columnValue);
                        break;
                    case "FLOAT":
                        field.set(object, Float.parseFloat(columnValue));
                        break;
                    case "Date":
                        field.set(object,
                                new SimpleDateFormat().parse(columnValue));
                        break;
                    }

                }
                objectList.add(object);

            }

        } catch (SQLException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (NumberFormatException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } finally {
            DBConnection.close(connection, preparedStatement, resultSet);
        }
        return objectList;
    }

基本流程:(这张表结合源码备注理解应该问题不大)如果看不清楚,复制图片地址在新窗口中查看
1077694-20180520224711322-35996612.png

转载于:https://www.cnblogs.com/caoleiCoding/p/9061938.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值