[spring] spring 정리2

Dawon Ruby Choi·2023년 11월 13일
  1. com.kh.meatPizza.member.model.service패키지 내 MemberServiceImpl 클래스 생성 후 서비스 객체 생성
@Service
public class MemberServiceImpl {
	
}

🍒 서비스의 역할을 하는 객체를 생성할 때는 @Service
🍒 컨트롤러 역할을 하는 객체를 생성할 때는 @Controller
🍒 DAO 역할을 하는 객체를 생성할 때는 @Repository
🍒 역할없이 객체만 만들고 싶을 때 @Component (부모)

  1. ⭐내가 직접 객체생성 하는것은 결합도를 높여주는 것 (제어의 반전이 이루어지지 않음)

💡결합도가 높다?
1) 매 요청마다 다른 객체 생성 (다른 주소, 주도권이 개발자에게 있음)
2) 클래스명 변경시 직접적인 영향을 받아 다른 클래스명도 변경됨

⭐결합도를 낮추기 위한 방법
1) framework가 만든 객체를 내가 주입해야함 (의존성 주입)

  • Service 객체 생성 요청
---MemberService.java---
package com.kh.meatpizza.member.model.service;

import org.springframework.stereotype.Service;

@Service
public class MemberService {
	
}
  • 의존성 주입
@Controller
public class MemberController {
	
	@Autowired
	private MemberServiceImpl mService;

2) 인터페이스 생성

2-1) com.kh.meatpizza.member.model.service 패키지 내 MemberService 인터페이스 생성

2-2) MemberServiceImpl 클래스에 implements 구현

@Service
public class MemberServiceImpl implements MemberService {
	
}

2-3) MemberController내 MemberService로 바꿔주기


@Autowired
	private MemberService mService;

2-4) login 메서드 작성 후 interface에 login 메서드 생성 (필드의 MemberService가 인터페이스니까)

--MemberController--
	@RequestMapping("login.me")
	public String login(Member m){
		Member loginUser = mService.login(m);
		return null;
	}

2-5) 인터페이스의 추상메서드가 만들어졌기 때문에 강제로 오버라이딩해서 구체화 시켜주어야함

2-6) spring에서 mybatis 사용을 위한 기본적인 mybatis 및 sqlSession 설정
ex) mybatis-config.xml

2-7) sqlSession 설정해주고 의존성 주입 해주기

@Service
public class MemberServiceImpl implements MemberService {
	
	@Autowired
	private SqlSessionTemplate sqlSession;

💡이미 만들어진 클래스에는 직접 어노테이션 할 수 없기 때문에 bean 태그 이용 ex) org.mybatis.spring.SqlSessionTemplate
내가 직접 정의해서 객체를 만드는건 어노테이션 방식
ex) @Service
public class MemberServiceImpl

  1. DAO 클래스 파일 생성
@Service
public class MemberServiceImpl implements MemberService {
	
	@Autowired
	private SqlSessionTemplate sqlSession;
	
	⭐@Autowired
	private MemberDAO mDAO;
package com.kh.meatpizza.member.model.dao;

import org.springframework.stereotype.Repository;

@Repository
public class MemberDAO {

}
  1. dao에 login (session, m) 메소드 생성
public Member login(Member m) {
		return mDAO.login(sqlSession, m);
@Repository
public class MemberDAO {

	public Member login(SqlSessionTemplate sqlSession, Member m) {
		return sqlSession.selectOne("memberMapper.login", m);
	}
  1. member-mapper 생성 후, mybatis-config로 돌아가서 mapper등록

  2. member-mapper 안에 쿼리 작성

  • dao에서 id 확인 후 select에 넣어주기
  • resultType은 컬럼명과 setter명이 다르면 사용 불가하니까 resultmap사용
<mapper namespace="memberMapper">
	<select id="login" resultMap="memberResultSet">
		select *
		from member
		where id=#{id} and pwd=#{pwd} and member_status = 'Y'
	</select>
	<resultMap type="com.kh.meatPizza.member.model.vo.Member" id="memberResultSet">
		<result column="ENROLL_DATE" property="enrollDate"/>
		<result column="UPDATE_DATE" property="updateDate"/>
		<result column="MEMBER_STATUS" property="status"/>
		<result column="IS_ADMIN" property="isAdmin"/>
	</resultMap>
</mapper>

🍒column="오라클 컬럼명", property="setter"

Model 개요

Model은 스프링이 지원하는 기능으로써, key와 value로 이루어져있는 HashMap이다.
Model의 .addAttribute()를 통해 view에 전달할 데이터를 저장할 수 있다.
Servlet의 request.setAttribute()와 비슷한 역할을 한다.

@RequestMapping을 통해 매핑을 한 메서드의 파라미터로 Model 객체를 전달한다.
model.addAttribute("key", value)를 통해 model에 값을 저장한다.
Model은 Hashmap 형태를 띄고 있으므로, 추후 key 값을 통해 value 값에 접근할 수 있다.

@RequestMapping("/modelTest")
public String modelFunc(@RequestParam username, Model model){
    model.addAttribute("username", username);
    return "modelResult";
}

view 파일에서 model에 저장한 값 불러오기

key를통해접근할수있다.위코드를예시로들면key"username",value에는@RequestParam을통해받은변수username을넣었기때문에,{key 값}를 통해 접근할 수 있다. 위 코드를 예시로 들면 key로 "username", value에는 @RequestParam을 통해 받은 변수 username을 넣었기 때문에,{username}을 통해 변수 username에 접근할 수 있다.

<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<h1>Test</h1>
	<h2>${username }</h2>
</body>
</html>

🌠 원래 대부분 회사는 서비스 넘어갈떄 인터페이스 하나 dao 넘어갈 떄 하나가 대부분임 하지만 인터페이스 안 넣는 경우도 잇음 그래서 우리 학원은 dao만 인터페이스 안 만드는 걸루

profile
나의 코딩 다이어리🖥️👾✨

0개의 댓글