參數(shù)設(shè)置問題
在映射文件中寫了這樣的一條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默認(rèn)使用ongl解析參數(shù),在這里就變成了使用 "java.lang.Integer.id"進(jìn)行取值,而這里的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"轉(zhuǎn)為parameterType="User"
將id的取值順序重新轉(zhuǎn)到User.id中即可
Mybatis事務(wù)不生效
在mybatis中transactionManager中將類型設(shè)置為jdbc
獲取session的方式為sqlSessionFactory.openSession()
試了很多方式
sqlSessionFactory.openSession(false) 無效
設(shè)置不需要自動提交也無效。。
sqlSession.getConnection().setAutoCommit(false);
最終查出來的結(jié)果是數(shù)據(jù)庫引擎不支持事務(wù)。。。
在這里順便就簡單介紹一下mysql的幾個引擎
MyISAM 適合
1) 做很多的count計算
2) 對于查詢比插入頻繁
3) 沒有事務(wù)
MyISAM類型不支持事務(wù)處理等高級操作,強調(diào)的是性能
InnoDB 適合
1) 安全性要求較高,比如要求事務(wù)
2) 對于表數(shù)據(jù)更新和查詢都比較頻繁
InnoDB支持事務(wù)等高級數(shù)據(jù)庫操作