SpringBoot中使用JdbcTemplate中queryForList遇到的坑

Spring Boot 中使用Spring的JdbcTemplate操纵数据一文中其实已经详细的讲解了JdbcTemplate的使用用法,但是还是想将坑单拎出来讲下。

首先看下这个方法:

乍一看,我想传个泛型T(实际代码执行中,这个T可以是我自定义的一个Bean),然后就能返回个List<T>,也即泛型的集合(纯ORM思想啊!殊不知又挖了个大坑~)

于是乎,出现下面代码:

List<Student> list = jdbcTemplate.queryForList(sql, Student.class);

一执行,发现出异常了:

ERROR org.springframework.jdbc.IncorrectResultSetColumnCountException: Incorrect column count: expected 1, actual 8:Incorrect column count: expected 1, actual 8

异常很明了,需要一个,给人家整成了八个,也就是人家不是存List<>的。甚为蹊跷,后一查,发现不是这样的,又跑偏了~

原来这个T,只支持Integer.class String.class 这种单数据类型的,自己定义的Bean不支持。所以我这ORM的想法over了。

敢情如果有封装成某个对象的需求,还得自己动手 。

这个JdbcTemplate还真是无力吐槽~ 彷佛回来了上古时期~!

注意:可以用这个(注意是query,不是queryForList

//可以用这个(注意是query,不是queryForList)
List<T> result = jdbcTemplate.query(sql.toString(), new Object[] {queryPara}, 
    new BeanPropertyRowMapper<T>(T.class))  

同时,我还发现不仅是jdbcTemplate.queryForList不能这么使用,queryForObject同样也不能这么使用,而是应该添加new RowMapper接口才能返回自定义的实体类对象。

看到一篇比较详尽的博客:Spring jdbcTemplate中queryForObject以及queryForList返回映射实体使用


————————————
链接:https://www.jianshu.com/p/ec580732ffdb

### Spring Boot与Hive集成项目案例 #### 1. 使用Spring Boot连接Hive并执行查询操作 为了实现Spring Boot应用与Hive的集成,可以创建一个简单的应用程序来展示如何通过JDBC驱动程序访问Hive数据仓库。下面是一个基本的例子: 首先,在`pom.xml`文件中加入必要的依赖项以支持Hive JDBC连接[^1]。 ```xml <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>3.1.2</version> </dependency> ``` 接着定义配置类用于设置数据库连接属性: ```java @Configuration public class HiveConfig { @Bean public DataSource hiveDataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("org.apache.hive.jdbc.HiveDriver"); dataSource.setUrl("jdbc:hive2://localhost:10000/default"); // 替换为实际地址 dataSource.setUsername("your_username"); dataSource.setPassword("your_password"); return dataSource; } } ``` 之后可以通过编写服务层逻辑来进行SQL语句的操作,比如读取表中的记录: ```java @Service public class HiveService { private final JdbcTemplate jdbcTemplate; @Autowired public HiveService(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public List<Map<String, Object>> queryTableData(String tableName) { String sql = "SELECT * FROM " + tableName; return jdbcTemplate.queryForList(sql); } } ``` 最后可以在控制器里调用上述方法返回JSON格式的结果给前端页面显示出来。 --- #### 2. 构建基于Spring Boot的应用程序分析Hive大数据集 另一个更复杂的例子涉及构建Web界面让用户提交自定义查询到远程运行着Apache Spark集群上的HiveServer2实例上处理大容量的数据集合。此方案不仅限于简单地获取表格内容;还可以利用分布式计算框架的优势完成诸如聚合统计、机器学习模型训练等高级任务。 对于这类应用场景来说,除了上面提到的基础组件外还需要考虑以下几个方面: - **安全性**:确保只有授权人员能够发送请求至服务器端点; - **性能优化**:针对特定类型的作业调整参数设定提高效率降低延迟; - **错误恢复机制**:当遇到网络中断或其他异常情况时提供可靠的解决方案防止丢失进度。 这些特性通常会涉及到更多第三方库和技术栈的选择,例如Kerberos认证协议、YARN资源调度器以及ZooKeeper协调服务等等[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值