With AI

MyBatis๋ž€?

  • -
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ MyBatis๋ž€?

MyBatis๋Š” Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ SQL์„ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ORM ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
Hibernate์ฒ˜๋Ÿผ ์™„์ „ํ•œ ORM(Object-Relational Mapping) ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ, SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๋ฉด์„œ๋„ ๊ฐ์ฒด์™€ ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ์‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”ฅ MyBatis์˜ ํŠน์ง•

โœ… 1. SQL์„ ์ง์ ‘ ์ž‘์„ฑ (SQL Mapper)

  • Hibernate ๊ฐ™์€ ORM ํ”„๋ ˆ์ž„์›Œํฌ๋Š” SQL์„ ์ž๋™ ์ƒ์„ฑํ•˜์ง€๋งŒ, MyBatis๋Š” SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋ณต์žกํ•œ SQL ์ฟผ๋ฆฌ ์ž‘์„ฑ์ด ์‰ฝ๊ณ , ์„ฑ๋Šฅ ํŠœ๋‹์ด ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

โœ… 2. XML ๋˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ SQL ๋งคํ•‘

  • XML ํŒŒ์ผ์„ ์ด์šฉํ•ด SQL์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์–ด๋…ธํ…Œ์ด์…˜์„ ํ™œ์šฉํ•œ ๋งคํ•‘๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

โœ… 3. ๋™์  SQL ์ง€์›

  • <if>, <choose>, <foreach> ๊ฐ™์€ ํƒœ๊ทธ๋ฅผ ํ™œ์šฉํ•ด ์กฐ๊ฑด๋ถ€ SQL, ๋ฐ˜๋ณต๋ฌธ ์ฒ˜๋ฆฌ ๋“ฑ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

โœ… 4. ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ง€์›

  • MyBatis๋Š” MySQL, PostgreSQL, Oracle, MSSQL ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

โœ… 5. Spring๊ณผ ์‰ฝ๊ฒŒ ํ†ตํ•ฉ ๊ฐ€๋Šฅ

  • Spring Boot์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, mybatis-spring-boot-starter๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์„ค์ •์ด ๊ฐ„ํŽธํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ›  MyBatis ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

1๏ธโƒฃ ์˜์กด์„ฑ ์ถ”๊ฐ€ (Spring Boot)

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.3.0</version>
</dependency>

2๏ธโƒฃ MyBatis ์„ค์ • (application.yml)

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password
    driver-class-name: com.mysql.cj.jdbc.Driver
  mybatis:
    mapper-locations: classpath:mapper/**/*.xml  # XML ๋งคํ•‘ ๊ฒฝ๋กœ
    configuration:
      map-underscore-to-camel-case: true  # DB ์ปฌ๋Ÿผ์„ ์นด๋ฉœ์ผ€์ด์Šค๋กœ ์ž๋™ ๋ณ€ํ™˜

3๏ธโƒฃ DTO (๋ฐ์ดํ„ฐ ๊ฐ์ฒด) ์ƒ์„ฑ

public class User {
    private Long id;
    private String username;
    private String email;
    
    // Getters & Setters
}

4๏ธโƒฃ Mapper ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM users WHERE id = #{id}")
    User findById(Long id);

    @Insert("INSERT INTO users(username, email) VALUES(#{username}, #{email})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    void insertUser(User user);
}

5๏ธโƒฃ XML Mapper ์‚ฌ์šฉ ์˜ˆ์‹œ (์„ ํƒ ์‚ฌํ•ญ)

๐Ÿ“Œ XML ํŒŒ์ผ์„ ํ™œ์šฉํ•˜๋Š” ๊ฒฝ์šฐ (resources/mapper/UserMapper.xml)

<mapper namespace="com.example.mapper.UserMapper">
    <select id="findById" resultType="com.example.domain.User">
        SELECT * FROM users WHERE id = #{id}
    </select>

    <insert id="insertUser" parameterType="com.example.domain.User" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO users(username, email) VALUES(#{username}, #{email})
    </insert>
</mapper>

6๏ธโƒฃ ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ Mapper ํ˜ธ์ถœ

@Service
public class UserService {
    private final UserMapper userMapper;

    public UserService(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    public User getUserById(Long id) {
        return userMapper.findById(id);
    }

    public void createUser(User user) {
        userMapper.insertUser(user);
    }
}
 

๐Ÿš€ MyBatis์˜ ์žฅ์  & ๋‹จ์ 

โœ… ์žฅ์ 

โœ” SQL์„ ์ง์ ‘ ์ œ์–ด ๊ฐ€๋Šฅ → ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ์ตœ์ ํ™” ์šฉ์ด
โœ” ๋™์  SQL ์ง€์› (<if>, <foreach> ๋“ฑ) → ์œ ์—ฐํ•œ ์ฟผ๋ฆฌ ์ž‘์„ฑ ๊ฐ€๋Šฅ
โœ” JDBC ์ฝ”๋“œ ์ตœ์†Œํ™” → ResultSet, PreparedStatement ๋“ฑ์„ ์ง์ ‘ ๋‹ค๋ฃฐ ํ•„์š” ์—†์Œ
โœ” Spring๊ณผ์˜ ๊ฐ•๋ ฅํ•œ ํ†ตํ•ฉ (MyBatis-Spring)

โŒ ๋‹จ์ 

โŒ SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•ด์•ผ ํ•จ → ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Œ
โŒ ๊ฐ์ฒด-๊ด€๊ณ„ ๋งคํ•‘ ๋ถ€์กฑ → Hibernate์ฒ˜๋Ÿผ ์ž๋™ ๋งคํ•‘์ด ๊ฐ•๋ ฅํ•˜์ง€ ์•Š์Œ
โŒ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” XML ๊ด€๋ฆฌ๊ฐ€ ๋ฒˆ๊ฑฐ๋กœ์šธ ์ˆ˜ ์žˆ์Œ


๐Ÿ“Œ ์ •๋ฆฌ

  • MyBatis๋Š” SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๋ฉด์„œ๋„, ๊ฐ์ฒด ๋งคํ•‘ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” SQL Mapper ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
  • Spring Boot์™€ ์‰ฝ๊ฒŒ ํ†ตํ•ฉ๋˜๋ฉฐ, ๋ณต์žกํ•œ SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ Hibernate ๊ฐ™์€ ์™„์ „ํ•œ ORM๋ณด๋‹ค๋Š” ๋” ๋งŽ์€ SQL ์ž‘์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”น ๋ณต์žกํ•œ SQL์„ ์ตœ์ ํ™”ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? → MyBatis ์ถ”์ฒœ
๐Ÿ”น ์ž๋™ ๊ฐ์ฒด ๋งคํ•‘๊ณผ ๊ด€๊ณ„ ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค๋ฉด? → JPA (Hibernate) ์ถ”์ฒœ

๋ฐ˜์‘ํ˜•

'With AI' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Java/Kotlin๊ณผ Spring ๊ด€๊ณ„  (0) 2025.02.19
React Native์™€ Flutter ์ฐจ์ด  (0) 2025.02.18
Spring Framework๋ž€?  (0) 2025.02.16
Flutter๋ž€?  (2) 2025.02.13
Firebase๋ž€?  (1) 2025.02.12
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.