反射实现增删改查(DAO层)——查询数据
2024-08-30 20:53:36
先贴出代码,后续补充自己的思路、配置文件、使用方式:
/**
*
* 数据查询
*
*/
@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;
}
基本流程:(这张表结合源码备注理解应该问题不大)如果看不清楚,复制图片地址在新窗口中查看
最新文章
- Rafy 领域实体框架 - 公司内部培训视频
- tornado中将cookie值设置为json字符串
- sql server 跨数据库插入数据
- mysql 远程连接 2003 Can&#39;t connect to MySQL server (10060)
- Asp.Net HttpApplication 事件汇总
- C# 操作NPOI导入导出
- NIO Socket编程实例
- 实战DeviceIoControl 之六:访问物理端口
- 部署Java Web项目报错(二)
- OpenCV4.1.0实践(1) - 环境配置及使用
- Django学习目录
- Node.js 多版本安装
- Tor真的匿名和安全吗?——如果是http数据,则在出口节点容易被嗅探明文流量,这就是根本问题
- django by example 第五章 No module named &#39;sorl-thumbnail&#39;
- AngularJS表格神器“ui-grid”的应用
- JDK1.8 HashMap 扩容 对链表(长度小于默认的8)处理时重新定位的过程
- LaTeX文章结构
- Extjs4.x Ext.tree.Panel 过滤Filter以及trigger field的使用
- 谈谈我对Ui设计师的一些观点
- 2018.07.07 洛谷 P3939 数颜色(主席树)
热门文章
- vue2.0+wechat
- 一张图理解is_nll isset empty
- 修改(python) mysql 数据库 使其可以支持插入中文
- TCP/IP 详解卷一 - TCP CWR、ECE、URG、ACK、PSH、RST、SYN、FIN控制位
- c#子线程执行完怎么通知主线程
- Linux下几种RTP协议实现的比较和JRTPLIB编程讲解
- Linux环境下,开启tomcat时报transport error 202: bind failed: 地址已在使用
- Centos6.5安装上传下载工具
- 使用cmd命令行方式登录ftp上传下载数据
- Spring 学习十四 Spring security安全