- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的第一篇文章,用我糟糕的英语......
我使用的是MyBatis3.0
在查询中,我使用 SqlBuilder 的方法如下:
public class DataStatisticSqlBuilder extends SqlBuilder{
public String getDataQtyListSql(Map<String, Object> map){
和一个映射器接口(interface)如下:
公共(public)接口(interface) DataStatisticMapper {
@SelectProvider(type=DataStatisticSqlBuilder.class, method="getDataQtyListSql")
public List<Map<String, Object>> getDataQtyList(@Param("groups")
List<DataStatisticSqlBuilder.Group> groups, @Param("quatity") Integer quatity, @Param("struct") Struct struct);
}
当我调用
session.getMapper(DataStatisticMapper.class).getDataQtyList(...some parameters)
我在控制台中得到了如下结果输出:
<== Columns: PROJECT, PRJ_COUNT, TAR_COUNT, SITE_COUNT, PARAM_COUNT
<== Row: project A, 1, 1, 0, 0
<== Row: project B, 1, 1, 0, 0
根据上面的输出,预期结果应该是一个List [Map, Map, ...],但实际结果是[null, null]。似乎结果没有映射到 HashMap。如何在此查询中将结果类型设置为 HashMap?
也许使用了一些注释,但我没有找到它们。
非常感谢。
最佳答案
我得到了相同的 [null, null] 试图处理一些动态生成的 sql。 mybatis manual 提到了SqlBuilder,但是并没有提示如何使用sql。我认为您的问题可以通过添加 @Results 和 @Result 注释来解决。如果结果列始终相同,那应该可以工作,例如参见 @Results example 末尾的示例
在我的使用中,我不知道有哪些列,所以这就是我最终所做的。
在我的映射器 xml 文件中:
<update id="executeUpdate">
${stmt}
</update>
<select id="executeQuery" resultType="java.util.Map">
${stmt}
</select>
${} 而不是 #{} 将按原样插入字符串而不是将其视为 jdbc ?范围。这是这个解决方案的关键。在您的情况下,这将是 @SelectProvider 返回的 sql,您将添加一个 @Param("stmt") 以传递要运行的实际 sql。
在xml文件对应的mybatis界面中:
void executeUpdate(DynamicSqlDao.ParameterObject po);
List<Map<String,Object>> executeQuery(DynamicSqlDao.ParameterObject po);
ParameterObject 是一个简单的 bean:
@Data
public class ParameterObject
{
String stmt;
Map<String,Object> param;
}
(@Data 来自 Project Lombok 并生成 getter/setter)
我现在可以像这样调用我的界面“dao”:
Map<String,Object> pmap = new HashMap<String,Object>();
pmap.put("apa", "banan");
ParameterObject po = new ParameterObject();
po.stmt = stmt;
po.param = pmap;
List<Map<String,Object>> result = dao.executeQuery(po);
ParameterObject 可能只是一个带有 sql 语句保留名称的 Map。既然我已经发布了这个,请其他人发布一个更优雅的解决方案......:)
关于mybatis - 在 MyBatis 中,如何为 SelectProvider 指定结果类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7132184/
这是我的第一篇文章,用我糟糕的英语...... 我使用的是MyBatis3.0 在查询中,我使用 SqlBuilder 的方法如下: public class DataStatisticSqlBuil
当我尝试使用 MyBatis 创建动态查询时,成功生成了 sql,但 SQL 占位符中的参数没有被替换。 Mapper @SelectProvider 定义 @SelectProvider(type
我正在尝试使用 @SelectProvider 通过在 IN 子句中使用标签 foreach 来创建动态 SQL。我知道如何在映射器中使用 @Select 注释来使用它。 问题是,当我将 SQL 转换
我是一名优秀的程序员,十分优秀!