첫 번째 SpringBoot8~JDBC: 이름이 있는 변수와 검색 결과 0건~
개시하다
초면
모리타와 화입니다. 연수 중에 자바를 조금 배웠는데 스프링북을 사용하는 개발에 참가해서 장난이 심했습니다.
전혀 알 수 없는 사소한 조사가 실시되고 있지만, 자신의 공부를 위해 사전에 기사에 남겨두고 제작하고 있다.
참고할 수 있다면 이 점을 마음에 두고 참고해 주십시오.
제 기사를 읽고 이상한 점이 있다면 지적을 받을 수 있다면 기쁘겠습니다.
컨디션
SpringBoot 버전: 2.40
Java 버전: 8
DB:MySQL 8.0
IDE:eclipse
이번 목표
이번에는 저번 거.
・queryForObject
・queryFormap
・queryForList
나는 공부하는 중에 매우 신경을 쓴다.
1. 매개변수 바인딩을 명명 변수로 설정합니다(SQL의 가독성이 낮기 때문).
2. 검색 결과가 0이면 어떻게 됩니까(오류?null?)
조사를 진행하다.
매개변수 바인딩을 명명 변수로 설정합니다.
N amedParameter JdbcTemplate 클래스
실제로 JdbcTemplate 외에 하나 더 있습니다. N am ed Parameter JdbcTemplate의 존재는 단지 간단하게 만졌을 뿐입니다. 이것을 사용하면 파라미터는 "?"를 참고하십시오.
매개 변수 이름의 장점과 단점은 다음과 같다.
<명명된 매개변수의 이점>
• 여러 개의 매개 변수를 가지고 있을 때 순서를 의식해야 하며 오류가 발생하기 쉽다
• 가독성 저하
<명명된 매개변수의 단점>
・기술 코드량 증가
실현을 해보도록 하겠습니다.
JDBCtestRepository.java
//追記部分のみ記載
@Autowired
NamedParameterJdbcTemplate namedParameterJdbcTemplate;
//指定方法その1(Map指定)
//パラメータ一つだと簡単に実装できる
public String findTitleByIdNameParam1(int id){
String sql ="SELECT title FROM book_sample where id = :id"; //バインドパラメータは:カラム名で指定
Map<String,Object> params =new HashMap<String,Object>();
params.put("id", id); //カラム名とパラメータをセット
return namedParameterJdbcTemplate.queryForObject(sql,params,String.class);//第二引数でパラメータを指定
}
//指定方法その2(MapSqlParameterSource指定)
//パラメータが複数の時には簡単に実装できる
public String findTitleByIdNameParam2(int id,int delflg){
String sql ="SELECT title FROM book_sample where id = :id and delflg= :delflg"; //バインドパラメータは:カラム名で指定
MapSqlParameterSource map = new MapSqlParameterSource()
.addValue("id",id)
.addValue("delflg", delflg);
return namedParameterJdbcTemplate.queryForObject(sql,map,String.class);//第二引数でパラメータを指定
}
//指定方法その3(BeanPropertySqlParameterSource指定)
//オブジェクトのプロパティをそのまま使うときは簡単に使える
public String findTitleByIdNameParam3(int id,int delflg){
String sql ="SELECT title FROM book_sample where id = :id and delflg= :delflg"; //バインドパラメータは:カラム名で指定
BookEntity bookentity = new BookEntity(id,"title","summary","classification",delflg);
BeanPropertySqlParameterSource map = new BeanPropertySqlParameterSource(bookentity);
return namedParameterJdbcTemplate.queryForObject(sql,map,String.class);//第二引数でパラメータを指定
}
SampleContoroller.java//追記部分のみ記載
model.addAttribute("title1",jdbcTestRepository.findTitleByIdNameParam1(1));
model.addAttribute("title2",jdbcTestRepository.findTitleByIdNameParam2(1,0));
model.addAttribute("title3",jdbcTestRepository.findTitleByIdNameParam3(1,0));
sample.html//追記部分のみ記載
<div th:if="${title1 ne null}" th:text="'title1は'+${title1}" ></div>
<div th:if="${title2 ne null}" th:text="'title2は'+${title2}" ></div>
<div th:if="${title3 ne null}" th:text="'title3は'+${title3}" ></div>
동작 확인
선택 부분은 이번 표시 부분이다.안전하게 표시하다.
각자 처리하고 싶은 매개 변수 데이터에서 어떤 방법을 사용해야 할지 생각해 보는 것이 좋다.
검색이 0건이면 어떻게 되나요?
이것은 방법으로 처리하는 것이 다른 것 같다.
・queryForList
예외 없이 빈 목록으로 돌아가기
• query ForList 이외
Spring은 JdbcTemplate 처리를 호출하기 전에 비정상적으로 던집니다.
따라서 ResultSetExtractor를 사용하는 것을 제외하고는 데이터가 존재하는 전제에서 실현될 것이다.
0건 때 던져진 예외는 Em p t y ResultDataAccess Exception이다.
다음번
다음
업데이트 방법
사용법을 알아보고 싶습니다.
참고 문헌
Spring Spring Framework의 자바 응용 개발에 철저히 입문(주식회사 NTT 데이터 저)
Reference
이 문제에 관하여(첫 번째 SpringBoot8~JDBC: 이름이 있는 변수와 검색 결과 0건~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/waka_morita/articles/6dfe06f89f9617텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)