• JdbcTemplate 接收对象


    方法一:springboot提供函数,返回什么类型,对应就使用什么类型接受解析;

     List<Phone> query = jdbcTemplate.query(sql, new Object[]{mobile}, new BeanPropertyRowMapper(Phone.class));

    方法二:实现  RowMapper内部类 (没处理一个实体类就得重写这个)

            Phone phone = jdbcTemplate.queryForObject(sql, new Object[]{mobile}, new RowMapper<Phone>() {
                @Override
                public Phone mapRow(ResultSet rs, int rowNum) throws SQLException {
                    ResultSetMetaData metaData = rs.getMetaData();
                    String name = metaData.getColumnName(1);
                    Phone phone = new Phone();
                    phone.setId(rs.getString("id"));
                    phone.setPrefix(rs.getString("prefix"));
                    phone.setMobile(rs.getString("mobile"));
                    phone.setAreacode(rs.getString("areacode"));
                    phone.setProvice(rs.getString("provice"));
                    phone.setCiyt(rs.getString("city"));
                    phone.setIsp(rs.getString("isp"));
                    phone.setLocation(rs.getString("location"));
                    return phone;
                }
            });

    方法3:(实现通用RowMapper)

    Phone phone = jdbcTemplate.queryForObject(sql, new Object[]{mobile}, new LocalRowMapper<>(Phone.class));
        public LocalRowMapper(Class<?> targetClazz) {
            this.targetClazz = targetClazz;
            fieldMap = new HashMap<>();
            Field[] fields = targetClazz.getDeclaredFields();
            for (Field field : fields) {
                fieldMap.put(field.getName(), field);
            }
        }
    
     @Override
        public T mapRow(ResultSet rs, int rowNum) throws SQLException {
            T obj = null;
    
            try {
                obj = (T) targetClazz.newInstance();
                final ResultSetMetaData metaData = rs.getMetaData();
                int columnLength = metaData.getColumnCount();
                String columnName = null;
                for (int i = 1; i <= columnLength; i++) {
                    columnName = metaData.getColumnName(i).toLowerCase();
                    Class fieldClazz = fieldMap.get(columnName).getType();
                    Field field = fieldMap.get(columnName);
                    // 当isAccessible()的结果是false时不允许通过反射访问该字段 当该字段时private修饰时isAccessible()得到的值是false,必须要改成true才可以访问
                    field.setAccessible(true);
                    if (fieldClazz == int.class || fieldClazz == Integer.class) { // int
                        field.set(obj, rs.getInt(columnName));
                    }else if (fieldClazz == boolean.class || fieldClazz == Boolean.class) { //boolean
                        field.set(obj, rs.getBoolean(columnName));
                    }else if (fieldClazz == String.class) { //string
                        field.set(obj, rs.getString(columnName));
                    }else if (fieldClazz == Date.class) { //Date
                        field.set(obj, rs.getDate(columnName));
                    }else if (fieldClazz == Long.class || fieldClazz == long.class) { // Long
                        field.set(obj, rs.getLong(columnName));
                    }else if (fieldClazz == Timestamp.class) { //Timestamp
                        field.set(obj, rs.getTimestamp(columnName));
                    }
                    field.setAccessible(false);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return obj;
        }

     返回数据:

    {
        "code":200,
        "msg":"操作成功",
        "data":{
            "id":"355477",
            "prefix":"182",
            "mobile":"1829212",
            "areacode":"0911",
            "provice":"陕西",
            "city":"延安",
            "isp":"移动",
            "location":"陕西延安移动"
        }
    }
    
    
  • 相关阅读:
    剑指05两个栈实现一个队列
    11 幂等 Idempotence
    13 SOAP
    leetcode143zigzag-conversion
    如何使用 awk 复合表达式
    IT 运行在云端,而云运行在 Linux 上
    Docker1.12 + Swarm 构建动态微服务应用
    教你在Ubuntu上体验Mac风格
    Zabbix-3.0.3结合Grafana-3.1.0给你想要的绘图
    Zabbix-3.0.3使用自带模板监控MySQL
  • 原文地址:https://www.cnblogs.com/setout/p/13898436.html
Copyright © 2020-2023  润新知