Select MyBatis 的整数列
Select Column of Integers with MyBatis
我正在尝试使用 MyBatis 从包含整数的 table 中获取单个列。我假设将其提取为列表(尽管我在这一点上可能是错误的!)
这是我的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
我很确定我在这里做了一些非常愚蠢的事情!
在你的 mapper.xml 中你有 resultType="java.util.List"
你应该改用 resultType="java.lang.Integer"
。
我正在尝试使用 MyBatis 从包含整数的 table 中获取单个列。我假设将其提取为列表(尽管我在这一点上可能是错误的!)
这是我的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
我很确定我在这里做了一些非常愚蠢的事情!
在你的 mapper.xml 中你有 resultType="java.util.List"
你应该改用 resultType="java.lang.Integer"
。