@Service
public class MemberServiceImpl {
}
🍒 서비스의 역할을 하는 객체를 생성할 때는 @Service
🍒 컨트롤러 역할을 하는 객체를 생성할 때는 @Controller
🍒 DAO 역할을 하는 객체를 생성할 때는 @Repository
🍒 역할없이 객체만 만들고 싶을 때 @Component (부모)
💡결합도가 높다?
1) 매 요청마다 다른 객체 생성 (다른 주소, 주도권이 개발자에게 있음)
2) 클래스명 변경시 직접적인 영향을 받아 다른 클래스명도 변경됨
⭐결합도를 낮추기 위한 방법
1) framework가 만든 객체를 내가 주입해야함 (의존성 주입)
---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
@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 {
}
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);
}
member-mapper 생성 후, mybatis-config로 돌아가서 mapper등록
member-mapper 안에 쿼리 작성
<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은 스프링이 지원하는 기능으로써, 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";
}
{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만 인터페이스 안 만드는 걸루