[Spring] 0605

nahae·2024년 6월 5일

spring

목록 보기
2/4

삽입

Dao

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());
		
	}

Service

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

@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 -> 데이터 입력 후 값 넘기기

조회

Dao

//	전체 조회
	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로 리스트를 통으로 리턴

Service

//	전체 조회
	public List<StudentVo> list(){
		return studentDao.list();
	}

Controller

//	폼 입력 화면 => 단순 리턴
	@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 연결
	}

View

<%@ 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>

0개의 댓글