스프링부트 메이븐 - MyBatis(마이바티스트) 사용법
사용한 IED는 intellij(인테리제이)
스프링부트 버전은 3.3.3 버전
자바 17 버전
mybatis를 사용하기 위한 의존성 추가하기
pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>6.1.12</version>
</dependency>
<!-- MyBatis 의존성 -->
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<!-- MySQL Connector 의존성 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.31</version>
</dependency>
폴도 구조
application.properties
spring.application.name=mybatis
spring.datasource.url=jdbc:mysql://localhost:3306/db이름
spring.datasource.username=아이디
spring.datasource.password=비밀번호
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mybatis.mapper-locations=classpath:/mappers/*.xml
mybatis.mapper-locations=classpath:/mappers/*. xml
여기에서 classpath는 리소스 폴더를 가리키는 말로 나는 리소스 폴더 아래 mappers 폴더 안의 xml 파일을
mybatis의 mapper로 사용하겠다는 의미이다 이건 자신이 원하는 위치로 변경이 가능하다.
나는 간단히 유저 회원가입 모록 조회 수정 삭제 기능만 만들 거다.
Dto
@Getter
@Setter
public class UserDto {
private String id;
private String name;
private String number;
private int age;
}
간단하게 하기 위해 id , 이름, 번호, 나이 정보만 받을 생각이다
Main 소스
package org.example.mybatis;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("org.example.mybatis.user") // 패키지 경로를 맞게 설정합니다.
public class MybatisApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisApplication.class, args);
}
}
@MapperScan("org.example.mybatis.user") 은 매퍼가 소스가 있는 위치로 설정하여 스캔할 수 있도록 하는 거다.
Controller
@Controller
public class MainController {
@Autowired
private UserService userService;
//메인페이지
@GetMapping("/")
public String index() {
return "index";
}
//유저목록조회
@GetMapping("/user/list")
public String list(Model model) {
List<UserDto> users = userService.selectUsers();
model.addAttribute("users", users);
return "list";
}
//회원가입 페이지로 이동
@GetMapping("/user/register")
public String register() {
return "register";
}
//회원가입
@PostMapping("/user/register")
public String register(UserDto users) {
userService.insertUser(users);
return "redirect:/user/list";
}
//수정페이지 진입
@GetMapping("/user/modify")
public String modify(String id,Model model){
UserDto user=userService.selectUsers(id);
model.addAttribute("user",user);
return "modify";
}
//유저 수정
@PostMapping("/user/modify")
public String modify(UserDto user){
userService.updateUser(user);
return "redirect:/user/list";
}
//유저 삭제
@GetMapping("/user/delete")
public String delete(String id){
userService.delete(id);
return "redirect:/user/list";
}
}
Service
package org.example.mybatis.user;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
private final UserMapper userMapper;
public UserService(UserMapper userMapper) {
this.userMapper = userMapper;
}
public List<UserDto> selectUsers() {
return userMapper.selectUsers();
}
public UserDto selectUsers(String id) {
return userMapper.selectOneUsers(id);
}
public void insertUser(UserDto users) {
userMapper.insertUser(users);
}
public void updateUser(UserDto user) {
userMapper.updateUser(user);
}
public void delete(String id) {
userMapper.delete(id);
}
}
Mapper.java
package org.example.mybatis.user;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMapper {
List<UserDto> selectUsers();
void insertUser(UserDto users);
UserDto selectOneUsers(String id);
void updateUser(UserDto user);
void delete(String id);
}
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="org.example.mybatis.user.UserMapper">
<resultMap id="userMap" type="org.example.mybatis.user.UserDto">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="number" column="number"/>
<result property="age" column="age"/>
</resultMap>
<select id="selectUsers" resultMap="userMap">
SELECT * FROM user
</select >
<select id="selectOneUsers" resultMap="userMap">
SELECT * FROM user WHERE id=#{id}
</select >
<insert id="insertUser" parameterType="org.example.mybatis.user.UserDto">
INSERT INTO user (id,name,number,age) VALUES (#{id}, #{name}, #{number}, #{age})
</insert>
<update id="updateUser" parameterType="org.example.mybatis.user.UserDto">
UPDATE user set name=#{name},number=#{number},age=#{age} WHERE id=#{id}
</update>
<delete id="delete">
DELETE FROM user WHERE id=#{id}
</delete>
</mapper>
<mapper namespace="org.example.mybatis.user.UserMapper">
이 코드는 mybatis의 매퍼 xml 에서 어떤 인터페이스와 연결해야 하는지를 지정하는 코드이다.
<resultMap id="userMap" type="org.example.mybatis.user.UserDto">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="number" column="number"/>
<result property="age" column="age"/>
</resultMap>
이 코드는 UserDto라는 객체를 매핑할 때 사용한다.
이때 property는 자바 객체에서의 이름이고 column은 데이터 베이스에서의 이름을 의미한다.
<select id="selectUsers" resultMap="userMap">
SELECT * FROM user
</select >
<select id="selectOneUsers" resultMap="userMap">
SELECT * FROM user WHERE id=#{id}
</select >
이렇게 값을 조회할 때에는 매핑되어서 받아와야 하기 때문에 resultMap="userMap" 어떤 걸로 매핑할지 선택할 수 있다.
여기서 id => id="selectUsers" 이거의 의미는 위의 인터페이스의 메서드 이름을 의미한다,
만약 메서드에서 어떤 값을 넘긴다면 넘긴 값의 이름 #{넘길 값} 이렇게 사용할 수 있다.
추가적으로 if문도 사용할 수 있는 게 특징이다.
<update id="updateUser" parameterType="org.example.mybatis.user.UserDto">
UPDATE user
<set>
<if test="name != null">
name = #{name},
</if>
<if test="number != null">
number = #{number},
</if>
<if test="age != null">
age = #{age}
</if>
</set>
WHERE id = #{id}
</update>
넘어오는 값이 null 아닌 경우만 업데이트할 수 있도록 수정도 가능하고 아니면 내가 원하는 id를 가진 사람만 선택할 수도 있다.
#메이븐 프로젝트
#MyBatis 스프링부트 사용법
'자바 공부 > 스프링공부' 카테고리의 다른 글
스프링 부트 웹소켓 Stomp 사용법 (0) | 2024.09.19 |
---|---|
스프링부트 Scheduled 사용법 (1) | 2024.09.17 |
Jpa를 이용하여 게시판 만들어 보기 4 (0) | 2024.08.31 |
Jpa를 이용하여 게시판 만들어 보기 3 (0) | 2024.08.19 |
Jpa를 이용하여 게시판 만들어 보기 2 (0) | 2024.08.08 |