最初は、MyBatisの追加、削除、変更、およびチェックは複数のパラメーターを渡し、パラメーター名で値を直接割り当てることができると思っていましたが、バグの後でそれを見つけることができません。
例を挙げてください
//这个是用来更新最大成绩的函数
public interface ScoreDao {
@Update("update scores set top_score=#{score} where id=#{id}")
public int updateTopScore(int id,int score);
}
この関数には複数のパラメーターが必要であり、その後クレイジーなエラー
org.apache.ibatis.exceptions.PersistenceException
原因:org.apache.ibatis.binding.BindingException:パラメーター 'score'が見つかりません
解決策:
パラメーターの位置を直接使用してください
public interface ScoreDao {
@Update("update scores set top_score=#{0} where id=#{1}")
public int updateTopScore(int id,int score);
}
理由:複数のパラメーターが渡されると、mybatisは自動的にマップにカプセル化されるため、キーはインデックス
Map <Integer、Object> map = new HashMap();
なので、マップをパラメーターとして定義する
か、オブジェクトとしてカプセル化することもできます。
@Update("update scores set top_score=#{topScore} where id=#{id}")
public int updateTopScore(Score score);
私はそれをScoreオブジェクトとしてカプセル化しました。
また、#{}の属性は属性名を記述するのではなく、getの小文字の最初の文字を削除するgetterメソッドを記述することに注意してください。
たとえば
private Integer topScorehaha;
public Integer getTopScore() {
return topScorehaha;
}
#{topScorehaha}の代わりに#{topScore}
しかし、私の推奨方法:
@paramを変更してパラメーターの名前を指定しないようにmybatisに指示できます
@Update("update scores set top_score=#{score} where id=#{id}")
public void updateTopScore(@Param("id")int id,@Param("score")int score) ;
要約:
パラメーターは次の状況にある可能性があります:
1.単一パラメーター:
基本タイプ:値#{書き込み}、パラメーターが1つしかないため、すべてが内部にある可能性があります。mybatisは直接対応します。
2.複数のパラメーター:
値:#{パラメーター名}は無効です
使用可能:0、1
理由:複数のパラメーターが渡されるため、mybatisは自動的にマップにカプセル化され、キーはインデックスです
Map <Integer、Object> map = new HashMap ();
3. mybatisに@paramを変更してパラメーターの名前を指定しないように指示できます
4.独自のクラスを使用します
5.マップ
私の記事の内容に誤りがある場合は、訂正してください。私は、ssmフレームワークを学習したばかりの初心者です。ありがとうございます。