[Spring Boot 게시판] 4일차

김정현·2022년 9월 28일
0

SPRINGBOOT게시판

목록 보기
4/36

1. SQL을 xml로 이전

ArticleRepository.xml

<mapper namespace="com.kjh.exam.demo.repository.ArticleRepository">
	<insert id="writeArticle">
	INSERT INTO article 
	SET regDate = NOW(), 
	updateDate = NOW(), 
	title = #{title}, 
	`body`= #{body}
	</insert>
	
	<select id="getArticle" resultType="Article">
	SELECT * FROM article 
	WHERE id = #{id}
	</select>
	
	<select id="getArticles" resultType="Article">
	SELECT * FROM article
	</select>
	
	<delete id="deleteArticle">
	DELETE FROM article 
	WHERE id = #{id}
	</delete>

	<update id="modifyArticle">
	UPDATE article SET updateDate = NOW(), 
	title = #{title}, 
	`body`= #{body} 
	WHERE id = #{id}
	</update>

	<select id="getLastInsertId" resultType="int">
	SELECT LAST_INSERT_ID()
	</select>

</mapper>
  • 기존에는 Mapper 인터페이스에 어노테이션을 이용해 SQL문을 작성하였으나 XML파일로 이전

  • Mapper 인터페이스 : Mapper 설정 파일(xml)에 있는 SQL 쿼리문을 호출하기 위한 인터페이스

  • XML파일로 작성시 namespace인터페이스의 전체 경로를 기입해줘야 한다. 이 xml 파일과 해당 인터페이스를 매핑

  • 인터페이스와 xml 파일을 연동해두고 쿼리문의 ID와 인터페이스에 동일한 메소드를 만들어둠으로써 해당 메소드를 호출하면 자동으로 쿼리문이 실행되도록 해주는 방식

  • resultType속성은 MyBatis에서 쿼리문 수행후 메서드 반환타입을 지정하는 속성

  • getArticles 메소드는 list값을 반환받도록 되있다. 하지만 mapper에서의 리턴값은 Article이다.

  • 한 행을 객체로 보기때문에 한 행을 객체 Article로 담은 뒤 mybatis가 알아서 리스트로 넣어주기 때문

2. articleModify시 입력된 정보만 수정될 수 있도록(파라미터가 모두 넘어오지 않을시)

	<update id="modifyArticle">
		UPDATE article		
		<set>
		updateDate = NOW(),
		<if test="title != null">title = #{title},</if>
		<if test="body != null">`body`= #{body}</if>
		</set>		
		WHERE id = #{id}
	</update>
  • http://localhost:8081/usr/article/doModify?id=7&title=제목수정
  • 위의 url요청시 body의 정보가 빠져있다. 이때 title만 수정하기 위해 if태그 사용
  • update쿼리문에서 set을 태그로 사용할수있다.
  • if태그의 test 속성 값으로 조건식을 삽입

3. 회원가입 기능추가, MemberController,Service,Repository 추가

1. UsrMemberController

@Controller
public class UsrMemberController {

	@Autowired
	MemberService memberService;

	// 액션 메소드
	@RequestMapping("usr/member/doJoin")
	@ResponseBody
	public String doJoin(String loginId, String loginPw, String name, String nickname,
			String cellphoneNum, String email) {
		memberService.doJoin(loginId, loginPw, name, nickname, cellphoneNum, email);
		return nickname+"님 회원가입 했습니다.";
	}

2. MemberService

@Service
public class MemberService {

	MemberRepository memberRepository;

	@Autowired
	MemberService(MemberRepository memberRepository) {
		this.memberRepository = memberRepository;
	}

	public void doJoin(String loginId, String loginPw, String name, String nickname, String cellphoneNum,
			String email) {
		memberRepository.doJoin(loginId, loginPw, name, nickname, cellphoneNum, email);

	}

3. MemberRepository

@Mapper
public interface MemberRepository {

	void doJoin(String loginId, String loginPw, String name, String nickname,
			String cellphoneNum, String email);

}

4. MemberRepository.xml

	<insert id="doJoin">
		INSERT INTO `member`
		SET regDate = NOW(),
		updateDate = NOW(),
		loginId = #{loginId},
		loginPw = #{loginPw},
		`name` = #{name},
		nickname = #{nickname},
		cellphoneNum = #{cellphoneNum},
		email = #{email};
	</insert>
  • ArticleController, ArticleService, ArticleRepository과 방식이 동일하다.

0개의 댓글