MVC 게시판

Mybatis Mapper.xml 사용하기

beejaem 2022. 8. 11. 14:21

application.properties

spring.datasource.url=jdbc:mariadb://127.0.0.1:3306/allokal
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver

mybatis.type-aliases-package=com.spring.app.allokal.dto
mybatis.mapper-locations=/mapper/*.xml

DB연결을 위한 정보를 입력해준다.

*mybatis.mapper-locations= 는 mapping을 하기위한 xml파일의 위치를 지정해주는 역할이다. *.xml을 사용하면 해당폴더에 모든

xml파일을 조회할 수 있다.

*mybatis.type-aliases-package를 지정해두면 Mapper XML 파일에 resultType 클래스의 패키지를 안적고 클래스명만 써도 되게 해준다.

 

appication.java

@MapperScan("com.spring.app.allokal.mapper")
@SpringBootApplication
public class AllokalApplication {

   public static void main(String[] args) {
      SpringApplication.run(AllokalApplication.class, args);
   }

}

@MapperScan을 통해 어플리케이션이 실행되면 경로에 있는 매퍼를 스캔한다.

 

Mapper -> UserMapper.java

@Repository
@Mapper
public interface UsersMapper {
    LoginVO checkId(LoginVO loginVO);
    CheckVO checkOverlap(LoginVO loginVO);
    int signUp(SignupVO signupVO);
    SignupVO signUp_iq(SignupVO signupVO);

    List<FranchiseeVO> getFranchisee();
    FranchiseeVO sel_franchisee(FranchiseeVO franchiseeVO);
}

UserMapper.java에 매핑 시킬 데이터들을 선언해준다.

 

dto -> LoginVO

package com.spring.app.allokal.dto;

public class LoginVO {
    String id ;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    String pwd;
    public String getUser_num() {
        return user_num;
    }
    public void setUser_num(String user_num) {
        this.user_num = user_num;
    }
    String user_num;
}

그에 맞게 각각 dto와 interface생성

service -> UserService.java

@Repository
public interface UserService {
    LoginVO checkId(LoginVO loginVO);
    LoginVO checkOverlap(LoginVO loginVO);
    int signUp(SignupVO signupVO);
    SignupVO signUp_iq(SignupVO signupVO);
    List<FranchiseeVO> getFranchisee();
    FranchiseeVO sel_franchisee(FranchiseeVO franchiseeVO);
}

service -> UserServiceImpl.java

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UsersMapper usersMapper;

    public UserServiceImpl(UsersMapper usersMapper) {
        this.usersMapper = usersMapper;
    }

 

    //로그인
    @Override
    public LoginVO checkId(LoginVO loginVO) {
        
        if (usersMapper.checkId(loginVO) != null) {
            System.out.println("login 출력 user_num :" + usersMapper.checkId(loginVO).getUser_num());
            loginVO.setUser_num(usersMapper.checkId(loginVO).getUser_num());
        }
        return loginVO;
    }
}

아이디와 패스워드를 입력받으면 데이터 조회 후 user고유 번호를 loginVO에 담아서 리턴해준다.

controller -> LoginController.java

@RestController
@RequiredArgsConstructor
public class LoginController {

    @Autowired
    private UserService userService;


    public LoginController(UsersMapper usersMapper) {
        this.userService = userService;
    }


    @RequestMapping(value = "/login", method = RequestMethod.POST)
    @ResponseBody
    public LoginVO Login(@RequestBody LoginVO loginVO) {

        return userService.checkId(loginVO);
    }

}

service에서 데이터 처리를 대부분하기때문에 controller에서는 통신만 해주면 된다.

 

resource -> Mapper -> UserMapper.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="com.spring.app.allokal.mapper.UsersMapper">
    
    <select id="checkId" resultType="LoginVO" parameterType="String">
        SELECT user_num FROM user where id = '${id}' and pw = '${pwd}';
    </select>

</mapper>

 

id는 UserMapper.java에서 선언해준 이름과 똑같이 맞춰주어야 매핑이 된다. resultType는 결과로 받을 타입을 지정해주면 된다.

매핑 경로에 스캔이 제대로 되지않아 고생했지만, 여러 시도 끝에 MapperScan을 선언해주는 방법으로 성공..

'MVC 게시판' 카테고리의 다른 글

Multipart 사용해보기  (0) 2022.09.30
view 화면을 file로 저장하기  (0) 2022.09.30
Oauth 카카오로그인 웹  (0) 2022.01.10
Oauth 카카오 로그인 앱  (0) 2022.01.10
회원가입-3  (0) 2022.01.10