Mybatis學習過程中的一些問題
阿新 • • 發佈:2019-01-03
1、
異常:No enum const class org.apache.ibatis.mapping.ParameterMode.in
原因:mybatis沒有in這種parameterMode,應該為IN
<update id="editMessage" statementType="CALLABLE" parameterType="com.lianlife.bean.Message">
{call edit(
#{id,mode=in,jdbcType=INTEGER},
#{content,mode=in,jdbcType=VARCHAR}
)}
</update>
2、
異常:No enum const class org.apache.ibatis.type.JdbcType.Integer
原因:mybatis沒有Integer這種JdbcType,應為INTEGER,同理其他jdbcType都應該為大寫
<update id="editMessage" statementType="CALLABLE" parameterType="com.lianlife.bean.Message">
{call edit(
#{id,mode=IN,jdbcType=Integer},
#{content,mode=IN,jdbcType=VARCHAR}
)}
</update>
3、Mybatis保留了iBatis中通過“namespace+SQL id”的方式傳送sql並返回資料的形式不需要獲取對映器,不推薦這種方式,原因如下:
(1)sqlSession.update是功能性程式碼,不包含業務邏輯,不符合面向物件的規範
(2)使用Mapper方式IDE可以檢查JAVA語法,避免不必要的錯誤
//通過namespace+SQLid執行SQL語句,不採用
//sqlSession.update("Message.editMessage", message);
//通過mapper方式執行sql,進一步遮蔽了sqlSession物件,採用
MessageMapper messageMapper=sqlSession.getMapper (MessageMapper.class);
messageMapper.editMessage(message);
注:採用mapper方式
①mapper.xml中namespace要指向mapper介面
<mapper namespace="com.lianlife.map.MessageMapper">
<select id="queryMessage" ...></select>
<update id="editMessage"...></update>
...
</mapper>
②mapper介面中的方法名要與mapper.xml中SQL塊的id一致
package com.lianlife.map;
import java.util.List;
import com.lianlife.bean.Message;
public interface MessageMapper {
public List<Message> queryMessage(Message message);
public void editMessage(Message message);
}
4、sql列的別名與JavaBean的屬性名保持一致,mybatis就會把返回結果自動對映到JavaBean的屬性上,實現自動對映
5、《深入淺出MyBatis技術原理與實戰》是本好書