为了账号安全,请及时绑定邮箱和手机立即绑定

java 集合用法

标签:
  1. 集合是干什么的?
    集合可以看成是容器。

  2. 容器是干什么的?
    容器是装东西的。[忽略容器的容量]

  3. 在程序开发的角度来看有什么东西需要装在容器里面的?
    数据(存储对象)

特点:
1.1. 一个集合对象里面可以存储各种类型的数据
放进去之后在集合里面都是Object类型
1.2. 从集合中取出数据时需要强制类型转换

  1. 泛型最开始出现是为了解决什么问题?
    集合中数据类型统一
    从集合中取出数据时,由于存放数据到集合里面的时,已经指明了存入的对象是什么类型,所以不需要强制类型转换。

案例:
从数据库中查询出来数据,虽然是在.java 文件里面写的sql语句;
但是java中的对象实例根本不知道数据集里面是什么内容;
查询出来是结果集(dataSource)
什么是结果集?
可以想象成就是一张表:有字段名,字段所对应的值,查询出来是哪个实体类的;
下面的代码就是一步一步解析字段名,获取字段对应值,然后将解析之后的完整表数据加到具体java实体对象里面;

// 查询一行记录
public <T> T getMessage(Class<T> clazz, String sql, Object... args) {
List<T> result = getMessages(clazz, sql, args);
if (result.size() > 0) {
return result.get(0);
}
return null;
}

// 查询多行记录
public <T> List<T> getMessages(Class<T> clazz, String sql, Object... args) {
List<T> list = new ArrayList<>();
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
connection = JDBCTools.getConnection();
preparedStatement = connection.prepareStatement(sql);
for (int i = 0; i < args.length; i++) {
preparedStatement.setObject(i + 1, args[i]);
}
resultSet = preparedStatement.executeQuery();

    List<Map<String, Object>> values = resultSetToMapList(resultSet);// 调用下面的方法
    list = mapListToBeanList(clazz, values);// 调用下面的方法
} catch (Exception e) {
    e.printStackTrace();
} finally {
    JDBCTools.releaseDB(resultSet, preparedStatement, connection);
}
return list;

}

public List<Map<String, Object>> resultSetToMapList(ResultSet resultSet)
throws SQLException {
List<Map<String, Object>> values = new ArrayList<>();
Map<String, Object> map = null;
List<String> columnLabels = getColumnLabels(resultSet);
while (resultSet.next()) {
map = new HashMap<>();
for (String columnLabel : columnLabels) {
Object value = resultSet.getObject(columnLabel);
map.put(columnLabel, value);
}
values.add(map);
}
return values;
}

private List<String> getColumnLabels(ResultSet resultSet)
throws SQLException {
List<String> labels = new ArrayList<>();
ResultSetMetaData rsmd = resultSet.getMetaData();
for (int i = 0; i < rsmd.getColumnCount(); i++) {
labels.add(rsmd.getColumnLabel(i + 1));
}
return labels;
}

private <T> List<T> mapListToBeanList(Class<T> clazz,
List<Map<String, Object>> values) throws InstantiationException,
IllegalAccessException, InvocationTargetException {
List<T> result = new ArrayList<>();
T bean = null;
if (values.size() > 0) {
for (Map<String, Object> map : values) {
bean = clazz.newInstance();
for (Map.Entry<String, Object> entry : map.entrySet()) {
String propertyName = entry.getKey();
Object value = entry.getValue();
BeanUtils.setProperty(bean, propertyName, value);
}
result.add(bean);
}
}
return result;
}

点击查看更多内容
22人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Python工程师
手记
粉丝
62
获赞与收藏
1091

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消