as-is는 아래와 같았음, 그런데 자바에서는 user_id 같은 언더바 사용보다는 userId같은 카멜케이스를 지향한다고 함, 하지만 나는 db에서 user_id를 사용하고 있기 때문에.. 변경이 필요
<?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="egovframework.let.main.data.UserMapper">
<select id="selectAllUsers" resultType="egovframework.let.main.data.User">
SELECT id,
user_id,
pass,
name,
role,
status,
etc
FROM user
</select>
<select id="selectUserByLogin" resultType="egovframework.let.main.data.User" parameterType="map">
SELECT id,
user_id,
pass,
name,
role,
status,
etc
FROM user
WHERE name = #{name}
AND pass = #{pass}
</select>
<insert id="userCreate" parameterType="egovframework.let.main.data.User">
INSERT INTO user(
id,
user_id,
pass,
name,
role,
status,
etc)
VALUES (
#{id},
#{user_id},
#{pass},
#{name},
#{role},
#{status},
#{etc}
)
</insert>
</mapper>
User.java는 아래와 같이 userId로 선언
package egovframework.let.main.data;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
private String id;
private String userId;
private String pass;
private String name;
private String role = "user";
private String status = "active";
private String etc;
}
Mapper는 아래와 같이 변경
Java에서 user_id라는 데이터베이스 컬럼 이름을 userId라는 Java 필드 이름으로 매핑하려면, MyBatis의 결과 매핑(Result Mapping) 기능을 사용하거나, JPA와 같은 ORM 프레임워크를 사용할 때는 애노테이션을 사용해 매핑할 수 있습니다.
여기서는 MyBatis를 사용할 경우 방법을 설명하겠습니다.
MyBatis에서 매핑하는 방법
MyBatis에서는 resultMap을 사용하여 데이터베이스 컬럼과 Java 객체의 필드 사이의 매핑을 명시적으로 정의할 수 있습니다.
MyBatis XML 매퍼에서 resultMap 사용:
UserMapper.xml 파일에서 resultMap을 정의하여 매핑할 수 있습니다.
아래처럼 resultMap을 작성 시 user_id라는 데이터베이스 컬럼이 Java의 userId 필드로 매핑됩니다. resultMap을 통해 각 컬럼과 필드 간의 관계를 명시적으로 정의할 수 있습니다.
myBatis에서 #{} 안에 들어가는 이름은 Java 코드에서 사용되는 필드 이름이나 매개변수 이름과 일치해야 합니다.
resultType vs resultMap
<select> 태그에서 resultType과 resultMap을 혼용하는 것에 주의해야 합니다. resultType은 클래스 이름을 사용하고, resultMap은 resultMap의 id를 참조합니다. 이 두 가지는 서로 다른 역할을 하므로, 혼동하지 않아야 합니다.
<?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="egovframework.let.main.data.UserMapper">
<resultMap id="userResultMap" type="egovframework.let.main.data.User">
<id column="id" property="id" />
<result column="user_id" property="userId" />
<result column="pass" property="pass" />
<result column="name" property="name" />
<result column="role" property="role" />
<result column="status" property="status" />
<result column="etc" property="etc" />
</resultMap>
<select id="selectAllUsers" resultMap="userResultMap">
SELECT id,
user_id,
pass,
name,
role,
status,
etc
FROM user
</select>
<select id="selectUser" resultMap="userResultMap" parameterType="map">
SELECT id,
user_id,
pass,
name,
role,
status,
etc
FROM user
WHERE 1=1
<if test="userId !=null">
AND user_id = #{userId}
</if>
<if test="name !=null">
AND name = #{name}
</if>
<if test="pass !=null">
AND pass = #{pass}
</if>
</select>
<insert id="userCreate" parameterType="egovframework.let.main.data.User">
INSERT INTO user(
id,
user_id,
pass,
name,
role,
status,
etc)
VALUES (
#{id},
#{userId},
#{pass},
#{name},
#{role},
#{status},
#{etc}
)
</insert>
</mapper>'개인공부' 카테고리의 다른 글
| 데이터 타입, 데이터 구조 (0) | 2025.01.07 |
|---|---|
| [JAVA, POSTMAN, ANNOTATION] @RequestBody, @RequestParam 테스트 시 차이점 (1) | 2024.08.15 |
| [java]제네릭 타입, 여러가지 객체를 담을 수 있는 타입으로 공통적으로 쓰일 response 만들기 (0) | 2024.08.15 |
| [vuetify]class="text-xs-center" 는 vuetify 1에서 사용하던것 (1) | 2024.08.11 |
| [vue.js+prettier]prettier적용 (0) | 2024.08.11 |