My Batis 란?
SQL을 XML파일이나 주석으로 관리하고 자동으로 매핑시켜준다.
JDBC Template는 java 객체를 매핑하기 위해서는 BeanPropertyRowMapper 같은 거 사용하거나 직접 매핑하는 것을 만들어줘야 한다.
사용법
기본적으로 DTO, Controller, Service, DAO 형식으로 작성한 JDBC Template 방식과 매우 유사하다.
My Batis 방식 또한 DTO, Controller, Service, 작성하고 DAO 대신 Mapper 하고 sql문을 작성할 xml 파일을 작성해야 한다.
DTO
@Getter
@Setter
public class UserVO {
private int id;
private String name;
private String email;
}
Controller
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/Id") //아이디로 유저 조회
public ResponseEntity<User> getUserById(@RequestParam("id") int id) {
User user = userService.getUserById(id);
return ResponseEntity.ok(user);
}
@PostMapping("/Join") //유저회원가입
public ResponseEntity<String> createUser(@RequestBody UserVo user) {
userService.createUser(user);
return ResponseEntity.ok("User created");
}
@PutMapping //유저정보수정
public ResponseEntity<String> updateUser(@RequestBody UserVo user) {
userService.updateUser(user);
return ResponseEntity.ok("User updated");
}
@DeleteMapping("/Delete}") //유저삭제
public ResponseEntity<String> deleteUser(@RequestParam("id") int id) {
userService.deleteUser(id);
return ResponseEntity.ok("User deleted");
}
}
Service
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
//유저조회
public User getUserById(int id) {
return userMapper.findById(id);
}
//회원가입
public void createUser(User user) {
userMapper.insert(user);
}
//유저정보수정
public void updateUser(User user) {
userMapper.update(user);
}
//유저삭제
public void deleteUser(int id) {
userMapper.delete(id);
}
}
Mapper
어노테이션을 사용하여 sql문을 작성하는 방법
@Mapper
public interface UserMapper {
//유저 조회
@Select("SELECT * FROM users WHERE id = #{id}")
User findById(int id);
//회원가입
@Insert("INSERT INTO users(name, email) VALUES(#{name}, #{email})")
void insert(User user);
//유저 정보수정
@Update("UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}")
void update(User user);
//회원탈퇴
@Delete("DELETE FROM users WHERE id = #{id}")
void delete(int id);
}
어노테이션을 사용하지 않을 때
@Mapper
public interface UserMapper {
//유저 조회
public User findById(int id);
//회원가입
public void insert(User user);
//유저 정보수정
public void update(User user);
//회원탈퇴
public void delete(int id);
}
어노테이션을 사용하지 않았을 경우 xml 파일 작성
application.properties에서 xml 파일의 위치를 넣어줘야 한다.
properties에 아래와 같이 작성해준 다다면
mybatis.mapper-locations=classpath:mapper/*. xml
resources파일 아래의 mapper 파일 안의 모든 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.example.demo.mapper.UserMapper"> <!--이부분은 우리가 작성한 mapper을 위치를 입력해야한다 -->
<resultMap id="UserResultMap" type="com.example.demo.model.UserVo">
<!-- 이부분에서 type 에서 userVo라는 객체로 맵핑하겠다 라는 의미이다 -->
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="email" column="email"/>
</resultMap>
<select id="findById" resultMap="UserResultMap">
SELECT * FROM users WHERE id = #{id}
</select>
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
INSERT INTO users(name, email) VALUES(#{name}, #{email})
</insert>
<update id="update">
UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}
</update>
<delete id="delete">
DELETE FROM users WHERE id = #{id}
</delete>
</mapper>
<select id="findById" resultMap="UserResultMap"> 여기서 이 걸 보면
id 값은 mapper에 작성한 메서드 명하고 같은 이름을 호출한다
resultMap은 아래 resultMap에서 id 값하고 같은 걸 알 수 있다 이 말은 아래의 방식으로 맵핑하겠다고 지정해 주는 거다.
<resultMap id="UserResultMap" type="com.example.demo.model.UserVo">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="email" column="email"/>
</resultMap>
반응형
'자바 공부 > 스프링공부' 카테고리의 다른 글
jpa를 이용하여 게시판 만들어 보기 1 (0) | 2024.08.07 |
---|---|
Jpa 사용법 (0) | 2024.08.04 |
SLF4J 스프링 로그 사용방법 (0) | 2024.05.26 |
토이프로젝트 sns 만들어보기 1 (0) | 2024.05.26 |
리액트 스프링부트를 이용한 토이프로젝트 및 공부 (0) | 2024.05.19 |