λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Study/JSP

[JSP] Mybatis

by hong- 2022. 11. 18.

πŸ™πŸ»  MyBatis

: κ°œλ°œμžκ°€ μ§€μ •ν•œ SQL, ν”„λ‘œμ‹œμ €, 고급맀핑을 μ§€μ›ν•˜λŠ” μ˜μ†μ„± ν”„λ ˆμž„μ›Œν¬

객체와 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ§€ν•‘ν•˜λŠ” μ˜μ†μ„± ν”„λ ˆμž„μ›Œν¬λ‘œ,

JDBC둜 μ²˜λ¦¬ν•˜λŠ” 상당 λΆ€λΆ„μ˜ μ½”λ“œμ™€ νŒŒλΌλ―Έν„° μ„€μ • 및 κ²°κ³Ό 맀핑을 λŒ€μ‹ ν•΄μ£ΌλŠ” ν”„λ ˆμž„μ›Œν¬ μž…λ‹ˆλ‹€.

 

βœ”οΈ μ˜μ†μ„± : Persistnece μ΄λž€

ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ˜λ”λΌλ„ 사라지지 μ•ŠλŠ” λ°μ΄ν„°μ˜ νŠΉμ„±μ„ μ˜λ―Έν•©λ‹ˆλ‹€.

RDBMS ν˜Ήμ€ 파일 μ‹œμŠ€ν…œ λ“± 별도 λ°μ΄ν„°λ² μ΄μŠ€μ— 영ꡬ적으둜 μ €μž₯ν•˜μ—¬ 데이터가 μ˜μ†μ„±μ„ κ°€μ§‘λ‹ˆλ‹€.

βœ”οΈ ORM (Object Relationship Mapping) μ΄λž€

객체와 RDBMSλ₯Ό μžλ™μœΌλ‘œ λ§€ν•‘ν•΄μ£ΌλŠ” κ²ƒμœΌλ‘œ JPA, Hibernate, JDBC 등이 μžˆμŠ΅λ‹ˆλ‹€.

객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ 객체λ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ, κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λŠ” ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•˜μ—¬ μƒν˜Έκ°„ ν•„λ“œ 뢈일치 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ‘‰πŸ» λ•Œλ¬Έμ— MyBatis와 같은 ORM을 톡해 객체와 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ—°λ™ν•˜μ—¬ SQL문을 μƒμ„±ν•˜λ―€λ‘œμ¨ μ΄λŸ¬ν•œ λ¬Έμ œμ μ„ ν•΄κ²°ν•©λ‹ˆλ‹€.


πŸ“ Mybatis νŠΉμ§•

1) SQLλ¬Έκ³Ό μ½”λ“œλ₯Ό 뢄리

μžλ°” μ½”λ“œμ— λ³΅μž‘ν•˜κ²Œ μ–½ν˜€μžˆλ˜ SQL문을 XMLνŒŒμΌμ— λ³„λ„λ‘œ λΆ„λ¦¬ν•˜μ—¬ μ½”λ“œμ˜ 간결함과 νŽΈλ¦¬ν•¨μ„ ν–₯상 μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

2) JDBC κΈ°λŠ₯ 제곡

JDBCκ°€ μ§€μ›ν•˜λŠ” 거의 λͺ¨λ“  κΈ°λŠ₯듀을 μ§€μ›ν•˜μ—¬ JDBC둜 μ²˜λ¦¬ν–ˆλ˜ μ½”λ“œμ™€ νŒŒλΌλ―Έν„° 등을 λ§€ν•‘ν•˜μ—¬ νŽΈλ¦¬ν•¨μ„ ν–₯상 μ‹œν‚΅λ‹ˆλ‹€.

 

3) λ‹€μ–‘ν•œ μ–Έμ–΄ 지원

JAVA 뿐만 μ•„λ‹ˆλΌ Ruby, C# λ“± λ‹€μ–‘ν•œ μ–Έμ–΄λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.


πŸ“ Mybatis μ£Όμš” μ»΄ν¬λ„ŒνŠΈ

1) SqlSessionFactoryBuilder

 - SQLSessionFactoryλ₯Ό μƒμ„±ν•˜λŠ” 클래슀

2) SqlSessionFactory (interface)

 - SqlSession 객체λ₯Ό μ‹€ν–‰ν•˜λŠ” νŒ©ν† λ¦¬ 클래슀

3) SqlSessionFactoryBean

 - config νŒŒμΌμ„ λ°”νƒ•μœΌλ‘œ SqlSessionFactoryλ₯Ό μƒμ„±ν•˜λŠ” 클래슀

4) SqlSession

 - mapper.xml에 λ“±λ‘λœ SQl문을 μ‹€ν–‰ν•˜κ³  νŠΈλžœμž­μ…˜μ„ κ΄€λ¦¬ν•˜λŠ” 클래슀

 - Spring ν”„λ‘œμ νŠΈμ˜ DAO에 직접 μ ‘κ·Όν•˜μ—¬ 쿼리λ₯Ό μˆ˜ν–‰

 - Thread-not-safeν•˜μ—¬ μ‹±κΈ€ μ“°λ ˆλ“œ ν™˜κ²½μ— μ ν•©ν•˜κ³  μ“°λ ˆλ“œλ₯Ό 맀번 생성해야 함

   (1) selectOne
  • <T> T selectOne(String statement, Object parameter);
  • select문이 μ‹€ν–‰λœ ν•˜λ‚˜μ˜ 객체λ₯Ό 리턴함
  • Null λ˜λŠ” ν•œ 개 이상을 리턴할 경우 μ—λŸ¬ λ°œμƒ
   (2) selectList
  • <E> List<E> selectList(String statement, Object parameter);
  • select문이 μ‹€ν–‰λ˜μ–΄ μ—¬λŸ¬ 개의 객체가 λ‹΄κΈ΄ 리슀트λ₯Ό 리턴함
   (3) selectMap
  • <K,V> Map<K,V> selectMap(String statement, Object parameter, String mapKey);
  • κ²°κ³Ό λͺ©λ‘μ΄ Map으둜 λ³€ν™˜λ˜μ–΄ 리턴함
   (4) insert
  • int insert(String statement, Object parameter);
  • insert문이 μ‹€ν–‰λ˜μ–΄ κ²°κ³Ό λ ˆμ½”λ“œκ°€ λ°˜ν™˜λ¨
   (5) update
  • int update(String statement, Object parameter);
  • update문이 μ‹€ν–‰λ˜μ–΄ κ²°κ³Ό λ ˆμ½”λ“œκ°€ λ°˜ν™˜λ¨

   (6) delete

  • int delete(String statement, Object parameter);
  • delete문이 μ‹€ν–‰λ˜μ–΄ κ²°κ³Ό λ ˆμ½”λ“œκ°€ λ°˜ν™˜λ¨

5) SqlSessionTemplate

 - SqlSession μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받아 κ΅¬ν˜„λœ 클래슀둜 μ‹€μ œ SQL 및 νŠΈλžœμž­μ…˜ μ‹€ν–‰

 - Thread-safe ν•˜μ—¬ λ©€ν‹° μ“°λ ˆλ“œ ν™˜κ²½μ—μ„œ μ•ˆμ „

6) Spring bean XML

 - Java Object와 SQL문을 λ§€ν•‘ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ μ—¬λŸ¬ 파일의 정보λ₯Ό μ„€μ •

 - JDBC DataSource : Connection을 μƒμ„±ν•΄μ£ΌλŠ” νŒ©ν† λ¦¬ 클래슀

 -> Connection con = dataSource.getConnection( )으둜 Connection 생성


πŸ“ Mybatis ν™œμš© μ˜ˆμ‹œ

πŸ’‘ DAO

public List<userVo> getUserList(UserDto userDto);

πŸ’‘ User.xml

<mapper namespace = "com.test.service.dao.UserDao">
   <select id="getUserList" 
           parameterType = "com.test.service.dto.UserDto"
           resultType = "com.test.service.vo.UserVo">

πŸ“ [CDTA] = Character Data, λ¬Έμžν˜• 데이터

<![CDATA[]]>

 μ΄λ ‡κ²Œ μ„ μ–Έν•˜κ³  λ¬Έμžμ—΄μ„ μ±„μ›Œ λ„£μœΌλ©΄ [ ] μ•ˆμ— λ¬Έμž₯은 νŒŒμ‹±λ˜μ§€ μ•Šκ³  κ·ΈλŒ€λ‘œ λ¬Έμžμ—΄λ‘œ 좜λ ₯λ©λ‹ˆλ‹€.

 

Selectλ¬Έμ—λŠ” 쑰건을 κ±Έμ–΄ 쿼리λ₯Ό ν•˜κΈ° μœ„ν•˜μ—¬ <, > , = λ“±μ˜ 기호λ₯Ό 많이 μ‚¬μš©ν•˜κ²Œ λ˜λŠ”λ° 이것이 νŒŒμ‹± 쀑에 νƒœκ·Έλ‘œ μΈμ‹λ˜κ±°λ‚˜ ν•˜λŠ” λ“±μ˜ λ¬Έμ œκ°€ 생길 수 μžˆμŠ΅λ‹ˆλ‹€.

 

πŸ‘‰πŸ» λ•Œλ¬Έμ— 이λ₯Ό <![CDATA[ ]]> μ•ˆμ— μ›ν•˜λŠ” 쿼리문을 μ„ μ–Έν•œλ‹€λ©΄ νŒŒμ‹±ν•˜μ§€ μ•Šκ³  κ·ΈλŒ€λ‘œ λ¬Έμžμ—΄λ‘œ μΈμ‹μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.


πŸ“ νŽ˜μ΄μ§• 처리

select * from ν…Œμ΄λΈ” orders limit (A) offset (B)

 - B+1ν–‰λΆ€ν„° A개 만큼 λ³΄μ—¬μ€Œ

'Study > JSP' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[JSP] DataTables  (0) 2022.11.22
[JSP] ObjectMapper  (0) 2022.11.18
[JSP] JQuery  (0) 2022.11.18
[JSP] JSTL  (0) 2022.11.18
[JSP] Ajax  (0) 2022.11.18