Tiny Bunny
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป/DB

[DB] MyBatis vs. JPA

by soonybutter 2024. 10. 16.
728x90

 

๋ฐฑ์—”๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์—๋Š” ๊ฐ€์žฅ ํ”ํ•˜๊ฒŒ MyBatis์™€ JPA๊ฐ€ ์žˆ๋‹ค.

 

MyBatis์™€ JPA์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด์ž! 

 


 

1. DB์™€ ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ 

DB์™€ ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ ์—๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.  (ํ”„๋ ˆ์ž„์›Œํฌ)

 

1) SQL Mapper 

2) ORM (Object Relational Mapping)    

 

 

SQL Mapper

: ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ SQL ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ฒด์— ๋งคํ•‘ํ•จ.

ORM (Object Relational Mapping)

: ๊ฐ์ฒด, DB๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๋งคํ•‘ํ•œ๋‹ค

 

 

-> ๋‘ ๊ธฐ์ˆ ์€ DB์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค๋Š” ๊ณตํ†ต์ ์„ ๊ฐ€์ง€์ง€๋งŒ, ์„œ๋กœ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ฐ€์ง„๋‹ค.

 


 

 

 2. MyBatis vs. JPA

 

MyBatis ๋Š” SQL Mapper ๊ธฐ์ˆ ์„ ์ œ๊ณตํ•˜๋ฉฐ,

JPA๋Š” ORM ์„ ์ œ๊ณตํ•œ๋‹ค.

 

 

 

 

MyBatis

  • JDBC ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜์—ฌ Java ์ฝ”๋“œ์—์„œ SQL๋ฌธ์„ ๋ถ„๋ฆฌํ•ด์„œ ๋ณ„๋„์˜ XML ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ณ , XML ํŒŒ์ผ- Java ํŒŒ์ผ ๋‘˜์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  • MyBatis ์—์„œ Java ๋ฉ”์†Œ๋“œ์™€ Sql์„ ์„œ๋กœ ๋งคํ•‘์‹œํ‚จ๋‹ค.
  • ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๋Š” Java ๋ฉ”์†Œ๋“œ ์„ ์–ธ, SQL๋ฌธ๋งŒ ๋งŒ๋“ค์–ด์ฃผ๋ฉด MyBatis ๊ฐ€ ์ž๋™์œผ๋กœ ์—ฐ๊ฒฐํ•ด์ค€๋‹ค.
  • SQL๋ฌธ์ด Java ํŒŒ์ผ์—์„œ ๋ถ„๋ฆฌ๋œ ํ˜•ํƒœ์ž„์œผ๋กœ ๊ด€๋ฆฌ๊ฐ€ ํŽธํ•˜๋‹ค.
  • ๋™์  SQL ์ƒ์„ฑ ๊ธฐ๋Šฅ : ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ์ž…๋ ฅ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ SQL๋ฌธ์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•จ.
  • MyBatis ๋‚ด์— if๋ฌธ, choose, when ๋“ฑ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. = ๋™์ ์ธ SQL ๋ฌธ ์ƒ์„ฑ ๊ฐ€๋Šฅ
<select id="findActiveBlogwithTitleLike"
            resultType="Blog">
            
	SELECT * FROM BLOG
	WHERE state = 'ACTIVE'
	
    <if test= "title != null" >
	AND title like #{title}

 	</if>

<select>

 

 

 

- xml ํŒŒ์ผ ์˜ˆ์‹œ

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.my.myboard">
	
	<resultMap type="MyBoardDto" id="MyBoardMap">
		<result property="myno" column="MYNO"/>
		<result property="myname" column="MYNAME"/>
		<result property="mytitle" column="MYTITLE"/>
		<result property="mycontent" column="MYCONTENT"/>
		<result property="mydate" column="MYDATE"/>
	
	</resultMap>
	
	<select id="selectAll" resultType="com.my.model.dto.MyBoard">
		SELECT *
		FROM MYBOARD
		ORDER BY MYNO DESC
	</select>
	
	<select id="selectOne" resultMap="MyBoardMap">
		SELECT *
		FROM MYBOARD
		WHERE MYNO = ${myno}
	</select>
	
	<!-- resultType => ํ•„์š”์—†์–ด์š” -->
	<insert id="">
		INSERT INTO MYBOARD
		VALUES(SEQ_MYBOARD.NEXTVAL, #{myname), #{mytitle}, #{mycontent}, CURRENT_DATE)
	</insert>	
	
</mapper>

 

 

- xml ํŒŒ์ผ๋กœ sql ๋ฌธ์ด ๋ถ„๋ฆฌ๋œ java ํŒŒ์ผ

//์ „์ฒด์ถœ๋ ฅ
	public List<MyBoard> selectAll(){
		List<MyBoard> res = new ArrayList<>();
		SqlSession session = null;
		
		session = getSqlSessionFactory().openSession(true);
		res = session.selectList("com.my.myboard.selectAll");
		
		session.close();
		
	    return res;
	}

 

 

 

 

- MyBatis ์‚ฌ์šฉ ์•ˆํ–ˆ๋‹ค๋ฉด ์ด๋Ÿฐํ˜•ํƒœ์˜€์„ ๊ฒƒ ( Java ํŒŒ์ผ ์•ˆ์— sql ๋ฌธ ใ…‡) 

//์ „์ฒด์ถœ๋ ฅ
	public List<MyBoard> selectAll(){
		try {
			con= DriverManager.getConnection(url,username,password);
			System.out.println("02.๊ณ„์ •์—ฐ๊ฒฐ");
			
		}catch(SQLException e) {
			System.out.println("02.๊ณ„์ •์—ฐ๊ฒฐ ์‹คํŒจ");
			e.printStackTrace();
		}
		
		Statement stmt = null;
		ResultSet rs = null;
		String sql = "SELECT * FROM MYBOARD";
		List<MyBoard> res = new ArrayList<>();
		
		try {
			stmt = con.createStatement();
			System.out.println("03. query์ค€๋น„: "+sql);
			
			rs = stmt.executeQuery(sql);
			System.out.println("04. query ์‹คํ–‰ ๋ฐ ๋ฆฌํ„ด");
			
			while(rs.next()) {
				MyBoard tmp = new MyBoard(rs.getInt(1),rs.getString(2), rs.getString(3),rs.getString(4),rs.getDate(5));
				
				res.add(tmp);
			}

		}
		catch(SQLException e){
			System.out.println("3/4 ๋‹จ๊ณ„ ์—๋Ÿฌ");
			e.printStackTrace();
			
		}
		finally {
			try {
				rs.close();
				stmt.close();
				con.close();
				System.out.println("05. db์ข…๋ฃŒ \n");
			}
			catch(SQLException e) {
				System.out.println("05. db์ข…๋ฃŒ์—๋Ÿฌ");
				e.printStackTrace();
			}
		}
	    return res;
	}

 

 

 

 


 

 

JPA ( Java Persistence API )

  • Java์˜ ๊ฐ์ฒด์™€ DB์˜ entity( ํ…Œ์ด๋ธ”) ์ž์ฒด๋ฅผ ๊ทธ๋Œ€๋กœ ๋งคํ•‘ํ•ด์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ ‘๊ทผ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•จ
  • DB - ๋ฐ์ดํ„ฐ์ค‘์‹ฌ๊ตฌ์กฐ / Java - ๊ฐ์ฒด์ง€ํ–ฅ์  ๊ตฌ์กฐ ์ด ๋‘˜์‚ฌ์ด์˜ ๋ณ€ํ™˜์ด ์–ด๋ ค์› ๋Š”๋ฐ, JPA ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ค๊ณ  ์ €์žฅํ•  ์ˆ˜ ์žˆ์Œ.
  • ๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ๋งคํ•‘๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์„œ ๊ฐ์ฒด์ง€ํ–ฅ ๊ด€์ ์—์„œ ์ฝ”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•˜๋„๋ก ๋„์›€.

์ถœ์ฒ˜: https://www.elancer.co.kr/blog/detail/231?seq=231

 

  • Java์™€ DB ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ๋งคํ•‘์„ ์ž๋™ํ™” -> ๊ฐœ๋ฐœ์ž๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•  ํ•„์š” X
  • ORM ๋‚ด๋ถ€์ ์œผ๋กœ java ๋ฉ”์†Œ๋“œ์— ์ ํ•ฉํ•œ SQL ๋ฌธ์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ์ด ๋˜์–ด ์‹คํ–‰๋œ๋‹ค.

 

 

 

*ํ•™์Šต ํ›„ ์˜ˆ์ œ ์ฝ”๋“œ ์ถ”๊ฐ€ ์˜ˆ์ •

 

 

 


 

  • ๊ฐ์ฒด ์ง€ํ–ฅ์  ์ ‘๊ทผ, ๊ฐ„๋‹จํ•œ ๋งคํ•‘ -> JPA
  • ๋ณต์žกํ•œ ์ฟผ๋ฆฌ, SQL ์ œ์–ด๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ -> MyBatis 

๋ฌผ๋ก  ์ •๋‹ต์€ ์—†๊ณ , ์ด๋Ÿฐ ํŠน์„ฑ์„ ๊ฐ€์ง„๋‹ค ์ •๋„๋กœ ์ดํ•ดํ•˜์ž.

๊ฐœ๋ฐœ์ž์˜ ์„ ํ˜ธ๋„์™€ ํ”„๋กœ์ ํŠธ ํŠน์„ฑ์— ๋”ฐ๋ผ ์‚ฌ์šฉ.

728x90

TOP

Designed by ํ‹ฐ์Šคํ† ๋ฆฌ