728x90
저번 글에 mybatis 관련 설정을 했다
이젠 domain, dao, service, controller, mapper 코드 등을 작성한 후 관계 설정을 해주면 된다
dao 인터페이스 , dao 클래스
//MemberDAO 인터페이스
package org.tukorea.wonjoon.persistence;
import java.util.List;
import org.tukorea.myweb.domain.StudentVO;
public interface MemberDAO {
public void add(StudentVO student) throws Exception;
public List<StudentVO> readList() throws Exception;
public StudentVO read(String id) throws Exception;
public void delete(String id) throws Exception;
public void update(StudentVO student) throws Exception;
}
기본 crud 인터페이스 작성해주고
//MemberDAOImpl
package org.tukorea.wonjoon.persistence;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.tukorea.myweb.wonjoon.StudentVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class MemberDAOImpl implements MemberDAO {
@Autowired
private SqlSession sqlSession;
private static final String namespace = "org.tukorea.wonjoon.mapper.StudentMapper";
public StudentVO read(String id) throws Exception {
StudentVO vo = sqlSession.selectOne(namespace+".selectByid", id);
return vo;
}
public List<StudentVO> readList() throws Exception {
List<StudentVO> studentlist = new ArrayList<StudentVO>();
studentlist = sqlSession.selectList(namespace + ".selectAll");
return studentlist;
}
public void add(StudentVO vo) throws Exception {
sqlSession.insert(namespace + ".insert", vo);
}
public void delete(String id) throws Exception {
sqlSession.delete(namespace + ".delete", id);
}
public void update(StudentVO student) throws Exception {
sqlSession.update(namespace + ".update", student);
}
}
dao 인터페이스에 대한 클래스 작성을 해줌
mapper의 namspace를 통하여 sqlSession에 접근을 해준다
그리고 dao에 관한 내용을
//root-context.xml
<context:component-scan base-package="org.tukorea.wonjoon.persistence" />
스프링 빈 등록을 해줌
mapper 생성과 sql문 작성
//studentMapper.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="org.tukorea.wonjoon.mapper.StudentMapper">
<insert id="insert">
insert into student (id, passwd, username, snum, depart, mobile, email) values
(#{id}, #{passwd}, #{username}, #{snum}, #{depart}, #{mobile}, #{email})
</insert>
<select id="selectByid" resultType="org.tukorea.wonjoon.domain.StudentVO">
select * from student where id = #{id}
</select>
<select id="selectAll" resultType="org.tukorea.wonjoon.domain.StudentVO">
<![CDATA[
select * from student
]]>
</select>
<update id="update">
update student set id =#{id}, passwd =#{passwd}, username =#{username}, snum =#{snum}, depart =#{depart}, mobile =#{mobile}, email =#{email} where id = #{id}
</update>
<delete id="delete">
delete from student where id = #{id}
</delete>
</mapper>
root-context.xml 의 mapperLoactions 속성에 파일 위치 설정 해두었다
mapper는 sql 문을 저장하는 곳임 , mapper를 통해 sql문과 객체를 연결
파일명은 mapper 인터페이스명으로 함
위 코드 중 CDTA 는 xml 내의 sql 문장에 특수 문자가 있으면 태그와 혼동되는데 이를 사용하면 일반 텍스트로 직접 기술 가능
여기서 SQL 삽입 값의 연계 방법은?
--> #{바인드 변수 명} 을 이용한 바인드 변수 지정
- 파라미터가 자바빈즈 객체일 경우 #{num}은 getNum() 혹은 setNum()을 의미
- 파라미터가 하나이고, 기본 자료형이나 문자일 경우 값을 그대로 전달
- 파라미터가 Map일 경우 #{num}은 Map 객체의 키 값이 'num'인 값을 찾음
추가로 mapper의 sql 반환 값에 따라 dao 객체의 메서드 타입이 결정된다
- insert : void
- update : void
- delete : void
- read : 자동적으로 객체와 매핑
회원 정보 관리 기능 정상 동작 단위 테스트
//MemberDAOTest
package org.tukorea.wonjoon.test;
...................................................
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring/root-context.xml" })
public class MemberDAOTest {
@Autowired
private MemberDAO dao;
private static Logger logger = LoggerFactory.getLogger(MemberDAOTest.class);
@Test
public void testReadByid() throws Exception {
StudentVO vo;
vo = dao.read("yang");
logger.info(vo.toString());
}
@Test
public void testReadList() throws Exception {
List<StudentVO> voList;
voList = dao.readList();
for(StudentVO svo : voList) {
logger.info(svo.toString());
}
}
}
service 인터페이스, service 클래스
//MemberService
package org.tukorea.wonjoon.service;
import java.util.List;
import org.tukorea.wonjoon.domain.StudentVO;
public interface MemberService {
public StudentVO readMember(String id) throws Exception;
public List<StudentVO> readMemberList() throws Exception;
public void addMember(StudentVO student) throws Exception;
public void deleteMember(String id) throws Exception;
public void updateMember(StudentVO student) throws Exception;
}
//MemberServiceImpl
..............................................................................................................................
@Service
public class MemberServiceImpl implements MemberService {
@Autowired
private MemberDAO memberDAO;
public StudentVO readMember(String id) throws Exception {
return memberDAO.read(id);
}
public List<StudentVO> readMemberList() throws Exception{
return memberDAO.readList();
}
public void addMember(StudentVO student) throws Exception {
memberDAO.add(student);
}
public void deleteMember(String id) throws Exception {
memberDAO.delete(id);
}
public void updateMember(StudentVO student) throws Exception {
memberDAO.update(student);
}
}
이렇게 인터페이스, 클래스 작성 후 스프링 빈 등록
<context:component-scan base-package="org.tukorea.wonjoon.service" />
컨트롤러 작성
//MemberController
package org.tukorea.wonjoon.controller;
import org.tukorea.wonjoon.domain.StudentVO;
import org.tukorea.wonjoon.service.MemberService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller
@RequestMapping(value="/member")
public class MemberController {
private static final Logger logger = LoggerFactory.getLogger(MemberController.class);
@Autowired(required=true)
private MemberService memberService;
}
//MemberController 중
@RequestMapping(value = {"/register"}, method = RequestMethod.GET)
public String createMemberGet() throws Exception {
logger.info(" /register URL GET method called. then forward member_register.jsp.");
return "member/member_register";
}
@RequestMapping(value = {"/register"}, method = RequestMethod.POST)
public String createMemberPost( @ModelAttribute("student") StudentVO vo) throws
Exception {
memberService.addMember(vo);
logger.info(vo.toString());
logger.info(" /register URL POST method called. then createMember method executed.");
return "redirect:/member/list";
}
url요청이 들어 오면 get 매핑 하고 해당 url로 리다이렉트
post 요청이 들어오면 정보 전달 뒤 jsp 페이지 반환
컨트롤러도 스프링 빈까지 등록하면 끗!!!
//servlet-context.xml
<context:component-scan base-package="org.tukorea.wonjoon.controller" />
728x90
'Backend > Spring' 카테고리의 다른 글
[Spring] AOP(Aspect Oriented Programming) (0) | 2023.06.09 |
---|---|
[Spring] Mybatis (0) | 2023.06.09 |