参数设置问题
在映射文件中写了这样的一条sql
<select id="selectUserById" parameter="int" resultType="User">
select * from user
<if test="id != 0">
id = #{id}
</if>
</select>
这条sql运行后会抛出一个There is no getter for property named "id" in "class java.lang.Integer"
这样的错误
原因: mybatis默认使用ongl解析参数,在这里就变成了使用 "java.lang.Integer.id"进行取值,而这里的id是User类所以就抛出了异常
解决方案:
1.将
#{id}
替换为#{_paramter}
<select id="selectUserById" parameter="int" resultType="User"> select * from user <if test="id != 0"> id = #{_parameter} </if> </select>
- 在方法中提前声明
public void methodName(@Param(value ="id") int id,@Param(value="username") String username);
- 将
parameterType="int"
转为parameterType="User"
将id的取值顺序重新转到User.id
中即可
Mybatis事务不生效
在mybatis中transactionManager
中将类型设置为jdbc
获取session
的方式为sqlSessionFactory.openSession()
试了很多方式
sqlSessionFactory.openSession(false)
无效
设置不需要自动提交也无效。。
sqlSession.getConnection().setAutoCommit(false);
最终查出来的结果是数据库引擎不支持事务。。。
在这里顺便就简单介绍一下mysql
的几个引擎
MyISAM 适合
1) 做很多的count计算
2) 对于查询比插入频繁
3) 没有事务
MyISAM类型不支持事务处理等高级操作,强调的是性能
InnoDB 适合
1) 安全性要求较高,比如要求事务
2) 对于表数据更新和查询都比较频繁
InnoDB支持事务等高级数据库操作
网友评论