1. Controller
Controller는 웹 브라우저의 요청을 전담하여 처리
Controller가 Service 호출
- controller를 사용하기 위해 필요한 어노테이션 (클래스에서 사용가능)
@Controller
@RequestMapping(value = "/공통주소")
@RequiredArgsConstructor //무조건 필요한건 아님
@Slf4j
@RequiredArgsConstructor은 final로 매퍼 or 서비스 객체 생성할 때 필요하고
쓰지 않은 상태에선 @Autowired를 사용하면 된다.
@Slf4j는 로그찍을 때 필요하다
<예시: @RequiredArgsConstructor 사용 시>
@Controller
@RequestMapping(value = "/member")
@RequiredArgsConstructor
public class HomeController {
final MemberService memberService;
}
<예시: @Autowired 사용 시>
@Controller
@RequestMapping(value = "/member")
public class HomeController {
@Autowired MemberService memberService;
}
<예시: @Slf4j 사용 시>
log.info("로그 테스트");
- 메소드에 쓰일 어노테이션
@GetMapping(value="/주소")
@PostMapping(value="/주소")
@RequestMapping(value = "/주소", method= {RequestMethod.GET, RequestMethod.POST})
@RequestMapping은 클래스, 메소드 둘 다 사용가능하다
@GetMapping, @PostMapping은 무조건 메소드에서만 사용가능하다
그리고..
@GetMapping은 조회 할 때 사용되고
@PostMapping는 새로운 데이터 추가할 때, 암호화가 필요한 작업(로그인)할 때 사용된다
<예시: @GetMapping, @PostMapping 사용 시>
/* MemberController.java */
@Controller
@RequestMapping(value = "/member")
public class MemberController {
@Autowired MemberService memberService;
//회원가입
@GetMapping(value="/join.do")
public String joinGET() {
log.info("member=>{}", "joinGET");
return "/member/join"; //join.html로 이동
}
@PostMapping(value="/join.do")
public String joinPOST( @ModelAttribute Member obj) {
log.info("join.do POST => {}", obj.toString());
//매퍼 호출
int ret = memberService.insertMemberOne(obj);
if(ret == 1){// 성공시 홈으로
return "redirect:/home.do";
}
return "redirect:join.do"; //실패시 회원가입으로
}
}
<예시: @RequestMapping 사용 시>
RequestMapping은 GET, POST 따로 사용가능하기도 하고 둘 다 사용가능하기도 하다
/* MemberController.java */
@Controller
@RequestMapping(value = "/member")
public class MemberController {
@Autowired MemberService memberService;
//회원가입
@RequestMapping(value = "/join.do", method = {RequestMethod.GET})
public String joinGET() {
log.info("member=>{}", "joinGET");
return "/member/join"; //join.html로 이동
}
@RequestMapping(value = "/join.do", method = {RequestMethod.POST})
public String joinPOST( @ModelAttribute Member obj) {
log.info("join.do POST => {}", obj.toString());
//매퍼 호출
int ret = memberService.insertMemberOne(obj);
if(ret == 1){// 성공시 홈으로
return "redirect:/home.do";
}
return "redirect:join.do"; //실패시 회원가입으로
}
}
2. DTO
dto는 데이터베이스에서 데이터를 얻어 Service, Controller로 보낼 때 사용하는 객체임
- DTO에서 쓰는 어노테이션
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
5개도 줄여서
@Data
@Data만 쓰기도 한다
ToString으로 데이터가 잘 주고 받는지 확인을 할 때 보고싶지않은 값은 exclude={"필드이름"}을 사용해주면 된다
이럴 땐 무조건 5개를 다 적어줘야한다 그땐 @Data로 퉁쳐선 안된다
@Getter
@Setter
@ToString(exclude= {"password"})
@NoArgsConstructor
@AllArgsConstructor
public class Member {
private String id;
private String password;
private String newpassword;
private String name;
private int age;
private Date regdate;
private String role;
}
3-1. Service
Service는 데이터베이스에서 접근하는 mapper를 이용해서 결과값 받아옴
- Service에서 쓰는 어노테이션
@Service
Service는 interface
@Service
public interface MemberService {
//회원가입
public int insertMemberOne(Member obj);
}
3-2. ServiceImpl
@Service
@RequiredArgsConstructor
public class MemberServiceImpl implements MemberService{
final MemberMapper memberMapper;
//회원가입
@Override
public int insertMemberOne(Member obj) {
try {
return memberMapper.updateMemberOne(obj);
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
}
4-1. Mapper
- Mapper에서 쓰는 어노테이션
@Mapper
Mapper는 interface
Service와 Mapper만 interface고 나머지는 class임
@Mapper
public interface MemberMapper {
// 회원가입
@Insert({ " INSERT INTO member( id, password, name, age, role ) ",
" VALUES ( #{obj.id}, #{obj.password}, #{obj.name}, #{obj.age}, #{obj.role} " })
public int insertMemberOne(@Param("obj") Member obj);
}
4-2. Mapper.java - Mapper.xml
Mapper.java는 Mapper.xml에 작성된 sql문을 호출하기 위한 인터페이스
Mapper.xml을 따로 써주는 경우엔 @Param 필요없음
/*Mapper.java*/
@Mapper
public interface MemberMapper {
// 회원가입
public int insertMemberOne(Member member);
// 한 명 조회 (로그인)
public Member selectMemberOne(Member member);
}
id - 해당 구문을 호출할 때 사용되는 값, SQL을 구분하는 유일한 식별자 (필수)
parameterType - 해당 구문에 전달 될 파라미터의 패키지 경로를 포함한 전체 클래스명이나 별칭
resultType - 해당 구문의 리턴하는 타입의 패키지 경로를 포함한 전체 클래스명이나 별칭 (SELECT문에서 사용)
/*Mapper.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="com.example.mapper.MemberMapper">
<!--회원가입-->
<insert id="insertMemberOne" parameterType="com.example.dto.Member">
INSERT INTO member( id, password, name, age, role )
VALUES ( #{id}, #{password}, #{name}, #{age}, #{role} )
</insert>
<!--한 명 조회-->
<select id="selectMemberOne" parameterType="com.example.dto.Member" resultType="com.example.dto.Member">
SELECT id, name, age, role FROM member WHERE id=#{id} AND password=#{password}
</select>
</mapper>
5. html
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>회원가입</title>
</head>
<body>
<form th:action="@{/member/join.do}" method="post">
아이디 : <input type="text" name="id" autofocus /><br />
암호 : <input type="text" name="password" /><br />
이름 : <input type="text" name="name" /><br />
나이 : <input type="number" name="age" /><br />
권한 : <input type="text" name="role" value="customer" /><br />
<input type="submit" value="회원가입" />
</form>
</body>
</html>
**여기는 환경설정 파일
/*application.porperties*/
#포트번호 9090 설정
server.port=9090
#컨텍스트 path
server.servlet.context-path=/ROOT
#DB연동
spring.datasource.driver-class-name= db명
spring.datasource.url= db주소
spring.datasource.username= 아이디
spring.datasource.password= 비번
참조 - https://dalpaeng00.tistory.com/83
'백엔드 > Spring' 카테고리의 다른 글
Spring (2) (0) | 2023.05.18 |
---|---|
Spring 설정 (0) | 2023.04.28 |