📝

はじめてのSpringBoot9 ~JDBC:update(更新処理)~

2020/12/27に公開

はじめに

はじめまして
私はJavaを研修で少しかじった程度でSpringBootを使用した開発に参加し、てんやわんやしております森田和華です。
全く分からない中から少しずつ調べて実装をしていますが、自分の学習の為にも記事にして残しておこうと思い作成しております。
参考にしていただける際はそのあたりを念頭に置いたうえで参考にしていただければと思います。
もし私の記事を読んでおかしなところなどありましたらご指摘いただけると嬉しいです。

環境

SpringBootバージョン:2.4.0
Javaバージョン:8
DB:MySQL 8.0
IDE:eclipse

今回の目標

今回は
・update(更新処理)
について調べます。

updateの実装例

それぞれINSERT,UPDATE,DELETEの実装例は以下になります。
特にsqlの中身によって実装方法の違いはなく記述することが出来ます。

JDBCtestRepository.java
//追記部分のみ記載
public Boolean InsertBook(int delflg){

	Boolean successFlg = false;
	String sql ="INSERT \r\n"
		+ "INTO book_sample \r\n"
		+ "VALUES ( \r\n"
		+ "    5\r\n"
		+ "    , 'わかばちゃんと学ぶ Git使い方入門'\r\n"
		+ "    , '本書は、マンガと実践で学ぶGitの入門書です。Gitの概念はもちろん、GitHubやBitbucketについても丁寧に解説しています。これからGitを使い始める人にオススメの1冊です。'\r\n"
		+ "    ,'技術書'\r\n"
		+ "    ,:delflg\r\n"//バインドパラメータは:カラム名で指定
		+ ");";
	Map<String,Object> params =new HashMap<String,Object>();
	params.put("delflg", delflg); //カラム名とパラメータをセット
	int updateCount = namedParameterJdbcTemplate.update(sql,params); //戻り値は更新対象レコード数
	if(updateCount>0)//0の時は更新が上手くいかなかったと判断できる
	{
		successFlg=true;
	}
		return successFlg;
	}

public Boolean UpdateBook(int id,int delflg){

	Boolean successFlg = false;
	String sql ="UPDATE book_sample\r\n"
				+ "SET delflg=:delflg\r\n"
				+ "WHERE id=:id;";
	MapSqlParameterSource map = new MapSqlParameterSource()
				.addValue("id",id)
				.addValue("delflg", delflg);

	int updateCount = namedParameterJdbcTemplate.update(sql,map); //戻り値は更新対象レコード数
	if(updateCount>0)//0の時は更新が上手くいかなかったと判断できる
	{
		successFlg=true;
	}
		return successFlg;
	}

public Boolean DeleteBook(int id,int delflg){

	Boolean successFlg = false;
	String sql ="DELETE FROM book_sample \r\n"
			+ "WHERE\r\n"
			+ "    id = :id \r\n"
			+ "    AND delflg = :delflg;"; //バインドパラメータは:カラム名で指定
	MapSqlParameterSource map = new MapSqlParameterSource()
			.addValue("id",id)
			.addValue("delflg", delflg);

	int updateCount = namedParameterJdbcTemplate.update(sql,map); //戻り値は更新対象レコード数
	if(updateCount>0)//0の時は更新が上手くいかなかったと判断できる
	{
		successFlg=true;
	}
		return successFlg;
	}
SampleContoroller.java
//追記部分のみ記載
model.addAttribute("insert",jdbcTestRepository.InsertBook(0));
model.addAttribute("update",jdbcTestRepository.UpdateBook(1,1));
model.addAttribute("delete",jdbcTestRepository.DeleteBook(1,1));
sample.html
//追記部分のみ記載
<div th:if="${insert ne null}" th:text="'insertは'+${insert}" ></div>
<div th:if="${update ne null}" th:text="'updateは'+${update}" ></div>
<div th:if="${delete ne null}" th:text="'deleteは'+${delete}" ></div>

動作確認

それぞれのDB操作は無事に完了したようです。

更新結果0件

updateメソッドでは更新件数0件ではEmptyResultDataAccessExceptionの例外は発生せず、戻り値として0件が返却されます。
この戻り値を利用して更新が上手くいったかいかなかったか判断することが出来ます。

次回

今までのデータは取得時はMapだったので利用するときはEntityにSetしていくという動作が必要でしたがどうも取得結果を変換してくれる機能があるようですので、
次回は【取得結果の変換処理】について調べていきたいと思います。

参考文献

Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発 (著 株式会社NTTデータ)
https://www.shoeisha.co.jp/book/detail/9784798142470

Discussion