1
org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.lang.UnsupportedOperationException
### The error may exist in kr/co/techinmotion/mybatis/mappers/dataOutputMapper.xml
### The error may involve kr.co.techinmotion.mybatis.mappers.dataOutputMapper.selectData1-Inline
### The error occurred while setting parameters
### SQL: select * from tbl_id, tbl_feed     where tbl_id.id = tbl_feed.upid     and tbl_id.token = ?
### Cause: java.lang.UnsupportedOperationException
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:107)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:98)
at kr.co.techinmotion.daoImpl.DataDaoImplMybatis.selectData1(DataDaoImplMybatis.java:47)

我不知道为什么会发生这个错误。

这是我在映射器中的 sql。

<select id="selectData1" parameterType="string" resultType="list">
    select * from tbl_id, tbl_feed  
    where tbl_id.id = tbl_feed.upid  
    and tbl_id.token = #{token}
</select>

和.. 这是 DAO。

public class DataDaoImplMybatis implements IdataDao {

    private DataDaoImplMybatis(){}

    private static DataDaoImplMybatis dao;

    public static DataDaoImplMybatis getInstance(){
        if(dao == null){
            dao = new DataDaoImplMybatis();
        }

        return dao;
    }

    SqlSessionFactory sessionFactory = SqlMapSessionFactory.getSqlSessionFactory();

    @Override
    public List<DataResult1> selectData1(String token){
        SqlSession session = sessionFactory.openSession();
        List<DataResult1> list = session.selectList("kr.co.techinmotion.mybatis.mappers.dataOutputMapper.selectData1", token);
        session.close();

        return list;
    }

}

请帮帮我。。T_T

4

5 回答 5

2

“MyBatis-3-User-Guide”说: resultType:从该语句返回的预期类型的​​完全限定类名或别名。请注意,在集合的情况下,这应该是集合包含的类型,而不是集合本身的类型。使用 resultType 或 resultMap,不能同时使用。

于 2016-04-06T06:37:21.730 回答
1

在我的情况下,在 jdbc.url 中添加了 'useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true',这解决了我的问题:)

jdbc.url=jdbc:mysql://127.0.0.1:3306/xxx?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
于 2018-10-05T02:03:06.937 回答
0

resultType不应该是列表,下面显示了修改后的类型,但是您必须确保 select 语句可以相应地映射到 DataResult1

<select id="selectData1" parameterType="string" resultType="DataResult1">
    select * from tbl_id, tbl_feed  
    where tbl_id.id = tbl_feed.upid  
    and tbl_id.token = #{token}
</select>

或者,你可以试试这个:

<select id="selectData1" parameterType="string" resultType="map">
    select * from tbl_id, tbl_feed  
    where tbl_id.id = tbl_feed.upid  
    and tbl_id.token = #{token}
</select>

以及对 java 源代码的更改

List<Map<String,Object> list = session.selectList("kr.co.techinmotion.mybatis.mappers.dataOutputMapper.selectData1", token);
于 2013-10-25T01:39:35.573 回答
0

1楼是对的,但我想说 resultType = ""尊重你数据库中的一行但不是全部,也许你可以count(user_id)从用户中选择,现在你的resultType = 'long',如果你选择两个以上的结果,你可以使用resultType = 'map'或者你自己的地图,resultType = 'yourselfMap'

于 2013-12-23T06:55:50.187 回答
0

您必须根据传递的变量类型声明变量的“jdbcType=VARCHAR”或“jdbcType=NUMERIC”才能传递空值。尝试使用这个:

<select id="selectData1" parameterType="string" resultType="map">
    select * from tbl_id, tbl_feed  
    where tbl_id.id = tbl_feed.upid  
    and tbl_id.token = #{token,jdbcType=VARCHAR}
</select>
于 2017-03-02T10:15:40.487 回答