java - 如何使用MyBatis将ResultSet中的值映射到pojo

标签 java mybatis

我有一个遗留系统,它混合使用普通的旧 JDBC 和 MyBatis。我已经学会了如何使用 MyBatis ( Can I use MyBatis to generate Dynamic SQL without executing it? ) 生成 SQL,但不知道如何手动将 java.sql.ResultSet 的当前行映射到 POJO。

我无法使用 MyBatis 进行完整的往返,因为 SQL 查询作为字符串提供给遗留部分,但是当我取回 ResultSet 时,我确实知道它应该映射到哪个 POJO。 (以及结果映射 ID)。重用 mybatis 配置文件中的映射会很棒,目前它是手工完成的。 (因此映射逻辑是重复的。)

最佳答案

Florian 的评论让我找到了正确的方向,谢谢!我确实设法让它工作 - 这不是最干净的解决方案,但它有效。

给定包含 x 个结果的 java.sql.ResultSet rs,可以使用以下代码获取当前结果:

Object parameterObject = new Object();

RowBounds rb = new RowBounds(0, 1);
MappedStatement ms = sqlSession.getConfiguration().getMappedStatement("myBatisSelectId");
BoundSql boundSql = ms.getBoundSql(parameterObject);
ParameterHandler ph = new DefaultParameterHandler(ms, parameterObject, boundSql);
SimpleExecutor se = new SimpleExecutor(sqlSession.getConfiguration(), null);

DefaultResultHandler resultHandler = new DefaultResultHandler(sqlSession.getConfiguration().getObjectFactory());
DefaultResultSetHandler drsh = new DefaultResultSetHandler(se, ms, ph, resultHandler, boundSql, rb);

drsh.handleResultSets(new FakeStatement(new DelegatingNonClosingResultSet(rs)));
if (resultHandler.getResultList() == null || resultHandler.getResultList().isEmpty()) {
    return null;
}
return (T) resultHandler.getResultList().get(0);

请注意,您确实需要选择 ID 和参数对象。省略的代码包括携带 ResultSet 的 FakeStatement 和委托(delegate) ResultSet,委托(delegate) ResultSet 委托(delegate)除 close 之外的所有方法,因此我们可以自己管理 ResultSet 何时关闭。

要获得下一个结果,可以调用 rs.next() 并再次执行上述所有操作。当然,许多元素可以重复使用。

关于java - 如何使用MyBatis将ResultSet中的值映射到pojo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32756530/

相关文章:

java - JAVA中如何无需第三方解析JSON字符串

java - 从 SQLiteDatabase 中删除一个元素是否会反射(reflect)其他元素 ID 的变化?

java - 使用 Apache-POI 在 Excel 超链接中设置屏幕提示

java - 我该如何解决 brut.androlib.AndrolibException

java - 将动态参数传递给 @MapKey ("${dynamicParam}") (My-Batis)

java - MyBatis 基于 XML + Annotation 的配置

java - Yocto 构建上的 Oracle JDK 安装

java - Mybatis 映射器到 Mysql Point 对象

java - mybatis中使用$与#

java - Ibatis 2 到 Mybatis 3 转换 - Dao 文件返回游标信息