src/main/java 밑에 DAO 패키지 만들기
앞 세 자리(com.spring.basic.)는 자동으로 찾아줌
@Repository //dao역할 빈 생성
public class StudentDao {
// dao에서는 jdbcTemplate에 연결해야함
// 주입은 setter와 생성자 주입 두 가지
@Inject //주입 --> setter에 주입(변수 이름에 넣으면 보통 setter에 주입됨 => @Autowired 동일한 표현)
private JdbcTemplate jdbcTemplate;
// 삽입
public void insert(StudentVo student) {
String sql = "insert into studnet values(?,?,?,?)";
// 필드와 순서 일치시켜서 삽입해야함
jdbcTemplate.update(sql, student.getName(), student.getAge(), student.getGradeNum(), student.getClassNum());
}
src/main/java 밑에 DAO 패키지 만들기
@Service //서비스 역할 빈 생성
public class StudentService {
// service에서는 dao에 접근해야함 > dao에 주입
@Inject //setter주입임 멤버변수니까~
private StudentDao studentDao;
// 삽입
public void insert(StudentVo student) {
studentDao.insert(student);
}
@Controller // 컨트롤러 빈 생성
public class StudentController {
// Controller에서 service에 접근 > service에서 dao접근 > dao에서 jdbcTemplate 접근
@Inject //주입
private StudentService studentService;
// 폼 입력 화면 => 단순 리턴
@RequestMapping("/input") // input이 들어오면 리턴되는 studentInput을 띄워라
public String input() {
return "studentInput"; // views -> studentInput.jsp연결
}
@RequestMapping("/insert")
public String insert(@ModelAttribute StudentVo student) {
studentService.insert(student);
return "result"; //테스트용
}
localhost:8080/basic/input -> 데이터 입력 후 값 넘기기
// 전체 조회
public List<StudentVo> list(){
String sql = "select * from student";
List<StudentVo> studentList = jdbcTemplate.query(sql, new RowMapper<StudentVo>() {
@Override
public StudentVo mapRow(ResultSet rs, int rowNum) throws SQLException {
StudentVo student = new StudentVo();
student.setName(rs.getString("name"));
student.setAge(rs.getString("age"));
student.setGradeNum(rs.getNString("gradeNum"));
student.setClassNum(rs.getNString("classNum")); //rs:조회된 데이터값
return student;
}
});
return studentList;
}
RowMapper를 1회만 사용할 것이기에 바로 객체 생성해서 이용
하나씩 가져와서 리턴한 값을 list에 넣어주고 studentList로 리스트를 통으로 리턴
// 전체 조회
public List<StudentVo> list(){
return studentDao.list();
}
// 폼 입력 화면 => 단순 리턴
@RequestMapping("/input") // input이 들어오면 리턴되는 studentInput을 띄워라
public String input() {
return "studentInput"; // views -> studentInput.jsp연결
}
@RequestMapping("/insert")
public String insert(@ModelAttribute StudentVo student) {
studentService.insert(student);
return "redirect:list"; //여기서 list는 requestMapping 주소임 list주소로 바로연결
// return "result"; //테스트용
}
// 조회
@RequestMapping("/list")
public String list(Model model) { //view에 전달될 값 만들기
List<StudentVo> list = studentService.list();
//service에 갔다가 리턴 받은 값을 모델에 저장
model.addAttribute("list", list); //view에 전달할 값
return "studentView3"; //views -> studentView3.jsp 연결
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>조회 목록</h3>
<hr>
<table border="1" width="400">
<tr>
<th>이름</th>
<th>나이</th>
<th>학년</th>
<th>반</th>
</tr>
<c:forEach var="row" items="${list}">
<!-- forEach 반복문 var:변수명 / items:반복대상-->
<!-- ${list} == controller안에 model.addAttribute("list", list) 중 앞에 있는 애 -->
<tr>
<td>${row.name}</td>
<td>${row.age}</td>
<td>${row.gradeNum}</td>
<td>${row.classNum}</td>
</tr>
</c:forEach>
</table>
<br>
<a href="input"> 등록(입력) </a>
</body>
</html>