[ 쓰기, 출력, 수정, 삭제 ] 다 만들거임
1. database table 생성
(서울, 경기도, 세종, 대전, 강원도)
날짜가 unique key가 되어야함
//강우량 table
create table rainfall(
ridx int(8) not null auto_increment,
today date not null default '0001-01-01',
area_part1 char(3) not null, //int로 하면 강우량이 0일경우 안들어감
area_part2 char(3) not null,
area_part3 char(3) not null,
area_part4 char(3) not null,
area_part5 char(3) not null,
primary key(ridx),
unique key(today)
)
2. DAO (rainfall_dao.java)
package api;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class rainfall_dao {
int ridx;
String today;
String area_part1,area_part2,area_part3,area_part4,area_part5;
}
3. config.xml 의 typeAlias에 dao 추가
<typeAlias alias="rainfalldao" type="api.rainfall_dao"/>
=> server restart
4. 강우량 등록 페이지 생성 - rainfall_write.jsp (ECMA + javascript)
+ 등록일자 중복 검토 (Ajax)
<body>
<!-- name-dao랑 맞춰야함 -->
<form id="frm">
등록 일자 : <input type="date" name="today" onchange="date_check(this.value)">
<font color="red" id="error_red" style="display:none;">* 이미 등록된 일자입니다.</font><br>
서울 : <input type="text" name="area_part1" value="0" maxlength="3"><br>
경기도 : <input type="text" name="area_part2" value="0" maxlength="3"><br>
세종 : <input type="text" name="area_part3" value="0" maxlength="3"><br>
대전 : <input type="text" name="area_part4" value="0" maxlength="3"><br>
강원도 : <input type="text" name="area_part5" value="0" maxlength="3"><br><br>
<button type="button" id="btn">강수량 등록</button>
</form>
</body>
<script>
//Javascript
function date_check(day){ //value가 바뀔때마다 ajax 전송
if(day != ""){
var ajax = new XMLHttpRequest();
ajax.onreadystatechange = function(){
if(ajax.readyState==4 && ajax.status==200){
//console.log(this.response); //data가 있으면 1 없으면 0
if(this.response != 0){
document.getElementById("error_red").style.display = "inline-block";
}else{
document.getElementById("error_red").style.display = "none";
}
}
};
ajax.open("GET","./rainfall_check.do?today="+day,true);
ajax.send();
}else{ //이벤트 발생시 값을 못가져왔을 경우
var dates = frm.today.value;
if(dates != ""){
date_check(dates); //재귀함수
}
}
}
//ECMA
document.querySelector("#btn").addEventListener("click",function(){
frm.method="POST";
frm.action="./rainfall_writeok.do";
frm.submit();
})
</script>
/*--------------------- 입력날짜 중복 체크 (ajax) -----------------------*/
5. mapper.xml 에 query문 추가 (<mapper> ~ )
<!-- 입력 날짜 중복 체크 -->
<select id="ajax_select" resultType="String">
select count(*) as ctn from rainfall where today=#{today}
</select>
resultType : 실행된 결과값을 String으로 return 받겠다 (Integer,int..등 가능)
6. Controller - @GetMapping("/rainfall/rainfall_check.do") : 등록일자 중복 검토
@Resource(name = "rainfalls") //rainfalls module 호출
private rainfall_module rm;
//등록일자 중복 체크
@GetMapping("/rainfall/rainfall_check.do")
public String rainfall_check(
@RequestParam(defaultValue="", required= false) String today,
HttpServletResponse res
) throws Exception{
try {
//rainfall/rainfall_check.do?today=test로 강제 접속시 아무것도 뜨면 안됨
if(!today.equals("")) {
String checks = rm.ajax_select(today);
this.pw = res.getWriter();
//selectOne으로 처리된 module의 결과값을 받아서 front-end로 전달
this.pw.print(checks); //data가 있으면 1 없으면 0
}else {
this.pw.write("error");
}
}catch(Exception e) {
System.out.println("에러발생");
}
return null;
}
Module로부터 인자값을 넘겨받아 mapper로 전달
7. Module - rainfall_module.java 파일 생성 및 select 파트 추가
package api;
//~import 생략
@Repository("rainfalls")
public class rainfall_module {
@Resource(name="template")
private SqlSessionTemplate tm;
//ajax에 대한 data 체크
public String ajax_select(String today) {
String result = tm.selectOne("datadb.ajax_select",today);
return result;
}
}
❗ 자료형을 String 으로 받음 - mapper.xml에서 resultType을 String으로 설정해두었기 때문 ! (다른걸로 하면 에러)
/*--------------------- data 등록 insert -----------------------*/
8. mapper.xml 에 query문 추가 (<mapper> ~ </mapper> )
<insert id="rain_insert">
insert into rainfall (ridx,today,area_part1,area_part2,area_part3,area_part4,area_part5)
values ('0',#{today},#{area_part1},#{area_part2},#{area_part3},#{area_part4},#{area_part5})
</insert>
8. Controller - @PostMapping("/rainfall/rainfall_writeok.do")
PrintWriter pw = null;
@Resource(name = "rainfalls")
private rainfall_module rm;
@PostMapping("/rainfall/rainfall_writeok.do")
public String rainfall_writeok(
@ModelAttribute("fall") rainfall_dao dao,
HttpServletResponse res
) throws Exception{
res.setContentType("text/html;charset=utf-8");
this.pw = res.getWriter();
try {
//dao로 값을 받아서 module로 전달!
int callback = rm.rain_insert(dao);
if(callback > 0) {
this.pw.write("<script>"
+ "alert('정상적으로 등록 완료 되었습니다.');"
+ "location.href='./rainfall_list.do';"
+ "</script>");
}
}catch(Exception e) {
this.pw.write("<script>"
+ "alert('db 오류로 인하여 등록되지 않았습니다.');"
+ "location.href='./rainfall_write.do';"
+ "</script>");
}finally {
this.pw.close();
}
return null;
}
9. Module - rainfall_module.java 파일 생성 및 insert 파트 추가
package api;
//~import 생략
@Repository("rainfalls")
public class rainfall_module {
@Resource(name="template")
private SqlSessionTemplate tm;
//데이터 insert - int로 받아도 됨
public int rain_insert(rainfall_dao dao) {
int result = tm.insert("datadb.rain_insert",dao);
return result;
}
}
=> insert시 dao를 활용하여 setter값을 mapper로 전달하여 저장함
'CLASS > SPRING,JSTL' 카테고리의 다른 글
#9-1 / ☔ - 통계차트 수정,삭제 페이지 (0) | 2024.07.24 |
---|---|
#8-3 / ☔ - 통계차트 출력 페이지(list) , ajax(SPA)+do (0) | 2024.07.23 |
#8-1 / point table => Module (4) | 2024.07.23 |
#7-3 / mybatis DB연결 - 포인트 (insert, select ,select one,delete) (1) | 2024.07.22 |
#7-2 / mybatis(ibatis)를 이용 DAO + config,mapper,xml DB연결 (1) | 2024.07.22 |