com.demo.user 패키지 생성 후
UserController 생성
package com.demo.user;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user") //클래스에 적용 - 모든 메서드에 적용된다.
public class UserController {
//localhost:8080/user/create
@GetMapping("/create")
public String create() {
return "user/create";
}
}
user 폴더 생성 후 create.jsp 생성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<header>
<h1>유저 생성하기</h1>
</header>
<main>
<form method="POST">
<p>이름 : <input type="text" name="name" /></p>
<p>이메일 : <input type="email" name="email" /></p>
<p>패스워드 : <input type="password" name="passwordd" /></p>
<p>연봉 : <input type="text" name="salary" /></p>
<p><input type="submit" value="저장" />
</form>
</main>
</body>
</html>
이렇게 수정 후 서버로 화면 출력을 하게되면 오류가 뜬다.
그 이유는 아래와 같다.
servlet-context.xml
위 패키지가 아니면 스프링에서 관리를 안해주기 때문에 user 패키지 추가해줘야함
user가 추가돼서 bookController에서
redirect 주소들은 다 /book을 추가해줘야함
package com.demo.sample;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
// 요청을 받는 컨트롤러
@Controller
@RequestMapping("/book")
public class BookController {
@Autowired
BookService bookService;
//posMapping, RequestMapping 도 있음.
//localhost:8080/create 주소로 get 요청
@GetMapping("/create")
public String create() {
//요청 시 이 메소드 실행하고 아래 jsp 뷰 페이지 표시
return "book/create"; //WEB-INF/views/book/create.jsp
}
@PostMapping("/create")
public String createPost(@RequestParam Map<String, Object> map) {
String bookId = bookService.create(map);
if (bookId == null) {
return "redirect:/book/create";
}else {
return "redirect:/book/detail?bookId=" + bookId;
}
}
//책 상세 보기 컨트롤러
@GetMapping("/detail")
public String detail(@RequestParam Map<String, Object> map, Model model) {
Map<String, Object> detailMap = bookService.detail(map);
System.out.println(detailMap);
//화면에 데이터를 전달하기 위해 Model 객체를 이용한다.
model.addAttribute("data", detailMap);//data라는 이름으로 전달(requset와 동일)
String bookId = map.get("bookId").toString();
model.addAttribute("bookId", bookId);
return"/book/detail";
}
//업데이트 하기 전 책의 정보를 update페이지에 보여준다
@GetMapping("/update")
// 책 수정 컨트롤러 , Model은 데이터 전달 객체
public String update(@RequestParam Map<String, Object> map, Model model) {
Map<String, Object> detailMap = bookService.detail(map);
model.addAttribute("data", detailMap);
return "/book/update";
}
@PostMapping("/update")
public String updatePost(@RequestParam Map<String, Object> map, Model model) {
boolean isUpdateSuccess = this.bookService.edit(map);
if(isUpdateSuccess) {
String bookId = map.get("bookId").toString();
return "redirect:/book/detail?bookId=" + bookId;
}else {
return "/book/update";
}
}
//책 삭제
@PostMapping("/delete")
public String deletePost(@RequestParam Map<String, Object> map) {
boolean isDeleteSuccess = this.bookService.remove(map);
if(isDeleteSuccess) {
return "redirect:/book/list";
}else {
String bookId = map.get("bookId").toString();
return "redirect:/book/detail?bookId="+bookId;
}
}
//책 목록 보기 컨트롤러, 검색 기능 추가함
@GetMapping("/list")
public String list (@RequestParam Map<String, Object> map, Model model) {
List<Map<String, Object>> list = this.bookService.list(map);
model.addAttribute("data", list);//data라는 이름으로 전달(requset와 동일)
if(map.containsKey("keyword")) {
model.addAttribute("keyword", map.get("keyword"));
}
return"/book/list";
}
}
그리고 book-> list jsp수정해야함
변경 후 실행하면 정상 작동함
DB 테이블 생성- user
CREATE TABLE IF NOT EXISTS user (
user_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(200) NOT NULL,
email VARCHAR(200) NOT NULL ,
password VARCHAR(200) NOT NULL ,
salary VARCHAR(200) NOT NULL DEFAULT '',
insert_date DATETIME NOT NULL DEFAULT NOW(),
PRIMARY KEY(user_id)
)
book.SQL 복사해서 user.SQL 만듬
namespace user로 변경
user_SQL.xml
<?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">
<mapper namespace="user">
<!-- 자동 증가 옵션이 있는 user_id를 만듬 -->
<!-- 유저 생성 -->
<insert id="insert" parameterType="hashMap"
useGeneratedKeys="true" keyProperty="user_id">
<![CDATA[
INSERT INTO user(name, email, password, salary)
VALUES(#{name},#{email},#{password},#{salary})
]]>
</insert>
<!-- 상세 페이지 -->
<!--파라미터로 받는 값도 hashmap 타입/ 그 결과도 hashmap로 보냄 -->
<select id="select_detail" parameterType="hashMap"
resultType="hashMap">
SELECT name, email, password, salary ,insert_date
FROM user
WHERE
user_id = #{userId}
</select>
User.DAO 생성
package com.demo.user;
import java.util.List;
import java.util.Map;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class UserDAO {
@Autowired
SqlSessionTemplate sqlSessionTemplate;
// 유저 생성 메소드
public int insert(Map<String, Object>map) {
return sqlSessionTemplate.insert("user.insert",map);
}
//유저 상세 페이지 selectDetail 메소드
public Map<String, Object> selectDetail(Map<String, Object> map){
return sqlSessionTemplate.selectOne("user.select_detail", map);
}
}
UserServiceImple 생성 -> UserService 인터페이스 자동 생성하기
package com.demo.user;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImple implements UserService{
@Autowired
UserDAO userDao;
//유저 생성 메소드
@Override
public String create(Map<String, Object> map) {
int affectRowCount = this.userDao.insert(map);
if (affectRowCount == 1) {
return map.get("user_id").toString();
}
return null;
}
// 유저 상세 보기 메소드
@Override
public Map<String, Object> detail(Map<String, Object> map){
return userDao.selectDetail(map);
}
}
package com.demo.user;
import java.util.List;
import java.util.Map;
public interface UserService {
String create(Map<String, Object> map);
Map<String, Object> detail(Map<String, Object> map);
}
UserController
package com.demo.user;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
@RequestMapping("/user") // 클래스에 적용- 모든 메서드에 적용한다.
public class UserController {
@Autowired
UserService userService;
// localhost:8080/user/create
@GetMapping("/create")
public String create() {
return "user/create";
}
//유저 생성 기능
@PostMapping("/create")
public String createPost(@RequestParam Map<String, Object> map) {
String userId = userService.create(map);
if (userId == null) {
return "redirect:/book/create";
} else {
return "redirect:/user/detail?userId=" + userId;
}
}
// 유저 상세보기
@GetMapping("/detail")
public String detail(@RequestParam Map<String, Object> map, Model model) {
Map<String, Object> detailMap = userService.detail(map);
//System.out.println(detailMap);
//화면에 데이터를 전달하기 위해 Model 객체를 이용한다.
model.addAttribute("data", detailMap);//data라는 이름으로 전달(requset와 동일)
String userId = map.get("userId").toString();
model.addAttribute("userId", userId);
return"/user/detail";
}
}
테스트하기
'BACKEND > Spring' 카테고리의 다른 글
DB 연결 - 유저 전체 목록 조회 및 검색 결과 조회(SELECT) (0) | 2023.10.21 |
---|---|
DB 연결 - 유저 수정하기 및 삭제하기(UPDATE, DELETE) (0) | 2023.10.21 |
DB 연결 - 검색 기능 추가하기 (SELECT) (1) | 2023.10.20 |
DB연결 - 책 목록 보기 (SELECT) (1) | 2023.10.20 |
DB연결 - 책 삭제하기 (DELETE) (0) | 2023.10.20 |