MyBatisの追加、削除、変更、関数のチェック、複数のパラメーター、値の受け渡し

最初は、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フレームワークを学習したばかりの初心者です。ありがとうございます。

21件のオリジナル記事を公開しました ・いい ね0です 訪問721

おすすめ

転載: blog.csdn.net/D1124615130/article/details/104524778