1. userpoint table 생성
create table userpoint(
uidx int(5) not null auto_increment,
uid varchar(100) not null,
uname char(100) not null,
upoint int(5) not null,
udate timestamp not null default current_timestamp(),
primary key(uidx)
);
2. DAO 생성 - pointdao.java
package api;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class pointdao {
int uidx,upoint;
String uid,uname,udate;
}
3. point.jsp
<body>
<form id="frm" method="post" action="./pointok.do">
사용자 아이디 : <input type="text" name="uid"><br>
사용자 이름 : <input type="text" name="uname"><br>
지급할 포인트 : <input type="text" name="upoint" maxlength="5"><br>
<input type="button" value="포인트 지급" id="btn">
</form>
</body>
<script type="text/javascript">
document.getElementById("btn").addEventListener("click",function(){
frm.submit();
});
</script>
4. config.xml - <configuration></configuration> 안에 추가
<!-- DAO,VO,getter,setter 을 연결하는 역할(Module,Controller) -->
<configuration>
<!--해당 영역 추가-->
<typeAliases>
<typeAlias alias="pointdao" type="api.pointdao"/>
</typeAliases>
</configuration>
=> configuration 안에 각종 DAO클래스를 모두 등록 (단, alias 값 중복 금지)
5. mapper.xml - <mapper></mapper>안에 추가
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- sql문법에 대한 그룹 명 -->
<mapper namespace="datadb">
<!-- 해당 영역 추가 - 해당 그룹에 따른 id값으로 query문을 실행 -->
<select id="point_select" resultType="pointdao">
select * from userpoint order by uidx desc
</select>
<insert id="point_insert">
insert into userpoint (uidx,uid,uname,upoint,udate)
values ('0',#{uid},#{uname},#{upoint},now())
</insert>
</mapper>
${ } : 필드명 , 테이블명 처리 가능한 파라미터 ( 치환..? 이라고 생각하면 될듯.. 직접 가져올때는 해당 문법 사용 )
#{ } : 값을 적용시킬때 사용하는 파라미터 ( dao로 가져오는 경우 ) - 거의 얘 쓴다고 보면 됨
resultType="pointdao" : config.xml의 alias값 넣으면 됨
=> 해당 select 문 작성시 pointlist기능 제작시 배열에 넣을 필요 없음!
=> select 태그에만 사용 하는 속성!
6. @Controller - @PostMapping("/pointok.do")
package api;
//~import 생략
@Controller
public class apimain2 {
PrintWriter pw = null;
@Inject
private SqlSessionFactory sqlfact;
SqlSession se = null;
/*---- 포인트 insert ----*/
@PostMapping("/pointok.do")
public String pointok(@ModelAttribute("point") pointdao dao,HttpServletResponse res) {
res.setContentType("text/html;charset=utf-8");
try {
this.se = sqlfact.openSession();
this.se.insert("datadb.point_insert",dao);
this.pw = res.getWriter();
this.pw.write("<script>"
+ "alert('정상적으로 지급 완료되었습니다.');"
+ "location.href='./point_list.do';"
+ "</script>");
}catch(Exception e) {
System.out.println("db 접속 오류!");
}finally {
this.pw.close();
this.se.close();
}
return null;
}
/*---- 포인트 select ----*/
@GetMapping("/point_list.do")
public String point_list(Model m) {
//getter,setter로 이루어진 배열 : Interface
List<pointdao> all = null; //arrayList 사용 불가!
try {
this.se = sqlfact.openSession();
all = this.se.selectList("datadb.point_select");
m.addAttribute("all",all); //Model사용 jstl로 넘김
}catch(Exception e) {
System.out.println("database 접속 오류 발생!");
}finally {
this.se.close();
}
return null;
}
}
insert : this.se.insert(mapper.xml의 mapper namespace . 실행할쿼리문 id)
select : this.selectList( mapper.xml의 mapper namespace . 실행할쿼리문 id )
selectList : 여러개의 데이터를 dao를 이용하여 출력하는 방식
selectOne : 딱 하나의 데이터를 dao를 이용하여 출력하는 방식 (얜 받는 변수타입 arrayList 쓰는게 좋다)
7. point_list.jsp - 포인트 생성 내역 리스트 페이지
<%@page import="api.pointdao"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="cr" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>포인트 생성 내역 리스트</title>
</head>
<body>
<h3>[ 데이터 리스트 출력 ]</h3>
<ul style="list-style:none; padding : 0;">
<cr:forEach var="listdata" items="${all}">
<li style="border-bottom : 1px solid #ddd;">
<p><b>아이디</b> : ${listdata.uid}</p>
<p>고객명 : ${listdata.uname}</p>
<p>포인트 금액 : ${listdata.upoint}</p>
<p>지급일자 : ${listdata.udate}</p>
</li>
</cr:forEach>
</ul>
</body>
</html>
/* view.. */
8. mapper.xml에 추가
<select id="point_one" resultType="pointdao">
select * from userpoint where uidx=#{aa} order by uidx desc
</select>
#{aa} : 아무거나 적어도 됨
9. view 페이지 (selectOne) @Controller에 추가 - list.jsp에서 해당 li 클릭시
ex ) view 페이지로 넘길시
** 검색기능 제작시 에는 selectlist로 해야함! => 검색결과가 몇개가 될지 모름..
/*---- 포인트 select one ----*/
@GetMapping("/point_view.do")
public String point_view(Model m, String uidx) {
System.out.println(uidx);
try {
this.se = sqlfact.openSession();
pointdao pd = this.se.selectOne("datadb.point_one",uidx);
ArrayList<Object> onedata = new ArrayList<Object>();
onedata.add(pd.getUidx());
onedata.add(pd.getUid());
onedata.add(pd.getUpoint());
onedata.add(pd.getUname());
onedata.add(pd.getUdate());
System.out.println(onedata); //걍 sysout으로 확인
}catch(Exception e) {
System.out.println("DB 연결 오류!");
}finally {
this.se.close();
}
return null;
}
=> http://localhost:8080/point_view.do?uidx=3 로 접속시
[3, dndhkd, 5000, dndhkd, 2024-07-22 14:36:05] 해당 번호에 맞는 배열 잘찍힙니당..
/* delete.. */
point_list에 onlick 추가
<input type="button" value="데이터 삭제" id="btn" data="${listdata.uidx}" onclick="data_del(this)">
<script>
function data_del(val){
if(confirm('정말 삭제하시겠습니까?')){
var input = document.createElement('input');
input.type = 'hidden';
input.name = 'uidx';
input.value = '';
input.value = val.getAttribute("data");
frm.appendChild(input);
frm.submit();
}
}
</script>
mapper.xml에 추가
<delete id="point_delete">
delete from userpoint where uidx=#{del} order by uidx desc;
</delete>
@Controller에 추가 - list.jsp에서 삭제버튼 클릭시
@PostMapping("/data_del.do")
public void data_del(@ModelAttribute("point") pointdao dao,String uidx,HttpServletResponse res) {
res.setContentType("text/html;charset=utf-8");
try {
this.pw = res.getWriter();
this.se = sqlfact.openSession();
int result = this.se.delete("datadb.point_delete",uidx);
if(result > 0) {
this.pw.write("<script>"
+ "alert('데이터 삭제가 정상적으로 완료되었습니다.');"
+ "location.href='./point_list.do';"
+ "</script>");
} //else 쓸필요 x 어차피 에러나면 catch로 빠짐ㅋ
}catch(Exception e) {
System.out.println("database 오류 발생~!");
}finally {
this.pw.close();
this.se.close();
}
}
∴ getter,setter시 이런식으로 많이씀..
package api;
import java.util.ArrayList;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class pointdao {
int uidx,upoint;
String uid,uname,udate;
public ArrayList<Object> data(){
ArrayList<Object> onedata = new ArrayList<Object>();
onedata.add(this.getUidx());
onedata.add(this.getUid());
onedata.add(this.getUpoint());
onedata.add(this.getUname());
onedata.add(this.getUdate());
return onedata;
}
}
'CLASS > SPRING,JSTL' 카테고리의 다른 글
#8-2 /☔ 통계 data 관련 project 만들기 - selectOne(ajax),insert (0) | 2024.07.23 |
---|---|
#8-1 / point table => Module (4) | 2024.07.23 |
#7-2 / mybatis(ibatis)를 이용 DAO + config,mapper,xml DB연결 (1) | 2024.07.22 |
#7-1 / Mybatis 설치 및 Setting (0) | 2024.07.19 |
🎫 spring note (0) | 2024.07.19 |