본문 바로가기

백엔드/Spring

Spring (1)

1. Controller 

 

Controller는 웹 브라우저의 요청을 전담하여 처리

Controller가 Service 호출

 

 

- controller를 사용하기 위해 필요한 어노테이션 (클래스에서 사용가능)

 

@Controller
@RequestMapping(value = "/공통주소")
@RequiredArgsConstructor //무조건 필요한건 아님
@Slf4j

 

 

@RequiredArgsConstructorfinal로 매퍼 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