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)
我不知道为什么会发生这个错误。
这是我在mapper中的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
答案 0 :(得分:2)
&#34; MyBatis-3-User-Guide&#34;说: resultType:将从此语句返回的预期类型的完全限定类名或别名。请注意,对于集合,这应该是集合包含的类型,而不是集合本身的类型。使用resultType或resultMap,而不是两者。
答案 1 :(得分: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);
答案 2 :(得分:0)
1楼是正确的,但我想说resultType = ""
尊重数据库中的一行但不是全部,也许您可以从用户选择count(user_id)
,现在是resultType = 'long'
,如果你选择两个以上的结果,您可以使用resultType = 'map'
或自己的地图,resultType = 'yourselfMap'
答案 3 :(得分: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>
答案 4 :(得分:0)
在我的情况下,在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