当前位置: 首页 > 知识库问答 >
问题:

使用MyBatis选择整数列

叶经略
2023-03-14

我试图使用MyBatis从包含整数的表中获取单个列。我假设将其提取为一个列表(尽管在这一点上我可能错了!)

这是我的mapper.xml

<select id="getPersonIds" resultType="java.util.List">
    SELECT PersonId
        FROM TestDB.users
</select>

这是我的映射器界面

package com.paulmjohnson.Mappers;
import java.util.List;

public interface PersonMapper {

    List<Integer> getPersonIds();

}

我的DAO:

public List<Integer> getPersonIds() {
        SqlSession session = MyBatisUtil.getSqlSessionFactory().openSession();
        logger.info("Getting Person IDs");
        List<Integer> personIds = session.selectList("com.paulmjohnson.Mappers.PersonMapper.getPersonIds");
        session.close();
        return personIds;
}

我如何称呼它:

PeopleDAO peopleDAO = new PeopleDAO();
List<Integer> personIds = peopleDAO.getPersonIds();

MyBatis似乎正在创建我期望的SELECT查询:

2019-12-26 09:39:06,677 [main] [DEBUG] c.p.Mappers.PersonMapper.getPersonIds - ==>  Preparing: SELECT PersonId FROM TestDB.users 
2019-12-26 09:39:06,678 [main] [DEBUG] c.p.Mappers.PersonMapper.getPersonIds - ==> Parameters: 

当我运行它时,我得到了这个:

Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.lang.UnsupportedOperationException
### The error may exist in person-mapper.xml
### The error may involve com.paulmjohnson.Mappers.PersonMapper.getPersonIds
### The error occurred while handling results
### SQL: SELECT PersonId             FROM TestDB.users
### Cause: java.lang.UnsupportedOperationException
    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:149)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:135)
    at com.paulmjohnson.DAO.PeopleDAO.getPersonIds(PeopleDAO.java:82)
    at com.paulmjohnson.UsingBuckets.main(UsingBuckets.java:105)
Caused by: java.lang.UnsupportedOperationException
    at org.apache.ibatis.reflection.wrapper.CollectionWrapper.findProperty(CollectionWrapper.java:48)
    at org.apache.ibatis.reflection.MetaObject.findProperty(MetaObject.java:85)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createAutomaticMappings(DefaultResultSetHandler.java:493)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyAutomaticMappings(DefaultResultSetHandler.java:517)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:402)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:354)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:328)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:301)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:194)
    at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:65)
    at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)
    at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)
    at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
    at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
    at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
    at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)
    ... 4 more

我敢肯定我在做一些非常愚蠢的事情!

共有1个答案

周威
2023-03-14

在您的映射器中。您拥有的xml应该改为使用。

 类似资料:
  • 我试图将Apache Camel(2.20.0)与mybatis组件一起使用。更具体地说,我必须将一个大集合或记录从数据库导出到文件。我想防止内存问题,所以我想使用consumer.useIterator选项。我的路线是: 谢谢你。

  • 这不仅仅是一个简单的问题,我的英语没有我想要的那么好...我会尽力的。 我必须指定@results注释和每个@result,还是可以使用java模型类?我尝试了@resultmap(value={“mycompany.model.preingest”}),但它不起作用。 最重要的是,如文档中所述,使用SQL builder可以访问方法参数,并将它们作为最终对象 但是如果我把这些final放在我的方

  • 这可能是一个直接的问题,但我尝试了很多选择,但都不起作用。我给出了以下细节供大家参考。Mybatis xml配置:- Postgres功能:- 映射器配置:- 错误面对:- aused:org.apache.ibatis.type.TypeException:使用JdbcType数组为参数#1设置非空时出错。尝试为此参数设置不同的JdbcType或不同的配置属性。原因:java.lang.Clas

  • 问题内容: 目标是用数字表示的char值替换SQL查询中返回的整数值。例如: 标记为“端口”的表属性定义为1-4之间的整数。1 =篮球,2 =曲棍球,等等。下面是数据库表,然后是所需的输出。 数据库表: 所需的输出: 将这些整数值转换为String值的最佳实践是什么?在传递给程序之前使用SQL转换值?使用脚本语言来更改程序中的值?更改数据库设计? 问题答案: 数据库应该保存这些值,并且您应该执行连

  • MyBatis代码不加载枚举类型(版本:3.4.4)。 在MySQL数据库中,我有一个带有“cartype”字段的表,它是INT(11)类型。在Java中,我创建了一个用于处理汽车类型的枚举: Car mapper xml如下所示(不包含所有数据): 最后,我的豆子看起来如下: bean也包含getters和setters。 当我尝试在java中获取汽车时,它抛出以下异常:

  • Mybatis如下: 这个代码对我不适用。我错过了什么?