19 MyBatis
p378 - build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.4'
id 'io.spring.dependency-management' version '1.1.6'
}
group = 'spring.jdbc'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
// implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3' // MyBatis 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-data-jpa' // JPA 추가
}
tasks.named('test') {
useJUnitPlatform()
}
p379 - src/main/resources/application.properties
# Application Name
spring.application.name=template
# MySQL Database Configuration
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=1234
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
# HikariCP Configuration
spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.pool-name=HikariPool
# MyBatis
mybatis.type-aliases-package=spring.jdbc.template.domain
mybatis.configuration.map-underscore-to-camel-case=true
logging.level.spring.jdbc.template.mybatis=trace
# JPA
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.orm.jdbc.bind=TRACE
p381 - src/main/java/spring/jdbc/template/mybatis/UserMapper
@Mapper
public interface UserMapper {
// 유저 저장 메서드
int save(User user);
// 유저 정보 업데이트 메서드
void update(@Param("userIdx") Long userIdx, @Param("userUpdateDto") UserUpdateDto userUpdateDto);
// 유저 ID로 찾기 메서드
Optional<User> findByIdx(Long userIdx);
// 모든 유저 찾기 메서드 (검색 조건을 이용할 수 있음)
List<User> findAll(UserListDto dto);
}
p382 ~ 386 - src/resources/spring/jdbc/template/mybatis/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="spring.jdbc.template.mybatis.UserMapper">
<!-- 유저 저장 메서드 -->
<insert id="save" parameterType="User" useGeneratedKeys="true" keyProperty="userIdx">
INSERT INTO users (userId, age)
VALUES (#{userId}, #{age})
</insert>
<!-- 유저 정보 업데이트 메서드 -->
<update id="update">
UPDATE users
SET userId = #{userUpdateDto.userId}, age = #{userUpdateDto.age}
WHERE userIdx = #{userIdx}
</update>
<!-- 유저 ID로 찾기 메서드 -->
<select id="findByIdx">
SELECT userId, userIdx, age
FROM users
WHERE userIdx = #{userIdx}
</select>
<!-- 모든 유저 찾기 메서드 (검색 조건을 이용할 수 있음) -->
<select id="findAll" parameterType="spring.jdbc.template.dto.UserListDto" resultType="User">
SELECT userId, userIdx, age
FROM users
<where>
<if test="userId != null and userId != ''">
AND userId LIKE CONCAT('%', #{userId}, '%')
</if>
<if test="minAge != null">
AND age >= #{minAge}
</if>
<if test="maxAge != null">
<![CDATA[
AND age <= #{maxAge}
]]>
</if>
</where>
</select>
</mapper>
Last updated