-
[spring] spring-boot : MVC 어노테이션(Mapper,Repository,Service,Controller)JAVA 2021. 8. 16. 18:20
Model: controller, Service, Mapper/Repository 와의 상호 작용
RestController : Service와 상호작용
Service: Mapper, Reopstiory와 상호작용
Mapper/Reopstiory: SqlSesion 및 DB와 상호작용
Mapper / Repository
- Mybatis를 사용하여 데이터를 처리하는 부분입니다. (+xml 사용)
- Mapper 어노테이션을 사용하여 xml에 namespace와 매핑, 메서드의 명과 xml에 각 id와 매핑시킴
- Repostiory 어노테이션을 사용하여 Service나 Controller 에서 DI 될 수 있도록 한다.
프로젝트명: memboard
package: com.example.memboard
1. pom.xml
라이브러리 넣기
el, jstl, servlet
<!-- 톰캣파서 --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <!-- jstl 라이브러리 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <!-- tomcat --> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-annotations-api</artifactId> <version>${tomcat.version}</version> </dependency> <!--tomcat-jsp-api--> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jsp-api</artifactId> <version>${tomcat.version}</version> </dependency> <!--tomcat-embed-el--> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-el</artifactId> <version>${tomcat.version}</version> </dependency> <!--javax.servlet.jsp.jstl-api--> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>javax.servlet.jsp.jstl-api</artifactId> <version>1.2.1</version> </dependency> <!-- tomcat-jdbc --> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jdbc</artifactId> <version>${tomcat.version}</version> </dependency> <!--tomcat-embed-core--> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>${tomcat.version}</version> </dependency> <!-- tomcat-embed-jasper --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <version>${tomcat.version}</version> </dependency> <!--JDBC --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <version>1.4.1.RELEASE</version> </dependency> <!--MyBatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <!-- mybatis-spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.2</version> </dependency>
spring-boot pom 예외사항
C:\Program Files\Java\jdk1.8.0_40\jre\lib\ext
해당 폴더에 추가한 lib 은 충돌이 나므로 pom 에 추가하지 말아야 한다.
mysql-connector 은 이미 java 에 추가했으므로 pom 에 넣지 않아야 한다.!
<!-- MYSQL --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency>
2. application.property
spring-boot 에는 따로 root-context 나 application-context 가 없다.
root-context = 주로 DB 설정함(SqlFactory 등등)
application-context = tiles.xml 경로,클래스,순서 설정했었음이 프로퍼티가 그 역할을 한다.
server.port:8989 #tomcat 이 Servers 항목에 따로 없고 여기에서 설정해야함. spring.mvc.view.prefix=/WEB-INF/views spring.mvc.view.suffix=.jsp #주석이며 실제로는 엔터로 공백만들면 안된다. spring.datasource.driver-class-name=com.mysql.jdbc.Driver #Datasource 설정 spring.datasource.url=jdbc:mysql://localhost:3306/ch20 spring.datasource.username=root spring.datasource.password=12345
3. MemboardApplication.java
기본 클래스(프로젝트명+Application 으로 자동생성됨)
경로: com.example.memboard
작업: MyBatis 사용 코딩, SqlSessionFactory 빈 생성(위에서 설정한 Datasource를 이용)
@Bean: 스프링에 필요한 객체를 생성
sqlSessionFactory() : MyBatis 의 sqlSessionFactory 를 반환한다.
스프링부트가 실행될 때 dataSource 객체를 이 메서드 실행시 주입해서 결과를 만들고
그 결과를 스프링내 빈으로 사용하게 된다.package com.example.memboard; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import javax.sql.DataSource; import org.springframework.context.annotation.Bean; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; @SpringBootApplication public class MemboardApplication { public static void main(String[] args) { SpringApplication.run(MemboardApplication.class, args); }//main-end //SqlSessionFactory 설정 @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource)throws Exception{ SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource); return sqlSessionFactoryBean.getObject(); } }
4. MemberVO.java or MemberDTO.java
경로(패키지): com.example.memboard.dto
public class MemberDTO { private String id; private String pw; private String name; private String email; private String tel; private String zipcode; private String addr; private String addr2; private Date regdate; public MemberDTO() { } public String getId() { return id; } public void setId(String id) { this.id = id; } //getter,setter생략 }
5. Interface
5-1. MemberMapper.java
매퍼 연결의 인터페이스(연결) 역할
@Repository : DAO 임을 알림, 고유id역할
@Mapper : Mapper 의 인터페이스로 사용될 예정
package com.example.memboard.mapper; import org.springframework.stereotype.Repository; import org.apache.ibatis.annotations.Mapper; import org.mybatis.spring.annotation.MapperScan; import java.util.*; import com.example.memboard.dto.MemberDTO; //@Repository("com.example.memboard.mapper.MemberMapper") //해당 클래스가 데이터페이스에 접근하는 클래스임을 명시한다. //@Mapper // //인터페이스 @Repository("com.example.memboard.mapper.MemberMapper") @Mapper public interface MemberMapper { //id 중복체크, 내 정보 수정 public MemberDTO selectOne(String id) throws Exception; //회원가입 public void insertMember(MemberDTO memberDTO) throws Exception; //로그인 public MemberDTO selectLogin(Map map) throws Exception; //DB에 내 정보 수정 public void memberUpdate(MemberDTO memberDTO) throws Exception; //탈퇴 public void memberDelete(String id) throws Exception; }
5-2. MemberMapper.xml
위의 인터페이스 구현, 같은 패키지에 있어야 한다. ( 인터페이스를 상속하는 클래스처럼 )
namespace 속성 : 구현할 인터페이스의 풀네임(패키지+클래스명)
id 속성(CRUD태그) : 구현할 인터페이스내의 메서드명
<?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.memboard.mapper.MemberMapper"> <!-- id중복 체크, 내 정보 수정 --> <select id="selectOne" parameterType="String" resultType="com.example.memboard.dto.MemberDTO"> select * from member where id=#{id} </select> <!-- 회원가입 --> <insert id="insertMember"> insert into member(id,pw,name,email,tel,zipcode,addr,addr2,regdate) values(#{id},#{pw},#{name},#{email},#{tel},#{zipcode},#{addr},#{addr2},NOW()) </insert> <!-- 로그인 --> <select id="selectLogin" parameterType="map" resultType="com.example.memboard.dto.MemberDTO"> select * from member where id=#{id} and pw=#{pw} </select> <!-- DB에 내 정보 수정 --> <update id="memberUpdate" parameterType="com.example.memboard.dto.MemberDTO"> update member set pw=#{pw},name=#{name},email=#{email},tel=#{tel},zipcode=#{zipcode},addr=#{addr},addr2=#{addr2} where id=#{id} </update> <!-- 탈퇴 --> <delete id="memberDelete" parameterType="String"> delete from member where id=#{id} </delete> </mapper>
6. Service
MemberService.java
@Service("com.example.memboard.service") : 경로(패키지)&고유id역할@Resource(name="") : 해당 인터페이스의 @Repository id 값을 넣는다.
사실 인터페이스는 new 생성자로 생성하여 return 할 수 있는 대상이 아니다.
작동은 인터페이스에 연결된 MemberMapper.xml 가 하지만
일단 인터페이스를 return 하고 있으니 throws Exception 을 던지는 듯 하다.
package com.example.memboard.service; import java.util.Map; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Service; import com.example.memboard.dto.MemberDTO; import com.example.memboard.mapper.MemberMapper; @Service("com.example.memboard.service.MemberService") public class MemberService { @Resource(name="com.example.memboard.mapper.MemberMapper") MemberMapper memberMapper; //id 중복체크, 내 정보 수정 public MemberDTO getMemberService(String id) throws Exception { return memberMapper.selectOne(id); } //회원가입 public void insertMemberService(MemberDTO memberDTO) throws Exception { memberMapper.insertMember(memberDTO); } //로그인 public MemberDTO loginProService(Map map) throws Exception { return memberMapper.selectLogin(map); } //DB에 내 정보 수정 public void updateService(MemberDTO memberDTO) throws Exception { memberMapper.memberUpdate(memberDTO); } //탈퇴 public void memberDelete(String id) throws Exception { memberMapper.memberDelete(id); } }//class-end
7. Controller
MemberController.java
경로: com.example.memboard'JAVA' 카테고리의 다른 글
[spring] ORA-00911: invalid character 오류 (0) 2021.08.17 [ajax] 비동기 form 사용하기 (0) 2021.08.16 [spring] spring-boot:Spring Starter Project 시작하기 (0) 2021.08.16 [mybatis] xml 속성 정리 (0) 2021.08.15 [mybatis] xml v.s annotation (0) 2021.08.15