Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

wintertreey 님의 블로그

MyBatis란? Pooling기법 본문

SQL

MyBatis란? Pooling기법

wintertreey 2024. 7. 4. 20:24

MyBatis란?

MyBatis는 자바 개발자들이 데이터베이스를 쉽게 다룰 수 있도록 도와주는

오픈 소스 ORM(Object-Relational Mapping) 프레임워크이다.

 

MyBatis의 주요 장점

  1. 유연성: SQL 쿼리를 직접 작성할 수 있으므로 매우 유연하다. 또한, MyBatis는 동적 쿼리를 작성할 수 있다.
  2. 간결성: MyBatis는 SQL 쿼리와 프로그래밍 언어 코드를 분리하기 때문에 코드가 간결해져 유지보수에 용이
  3. 성능: MyBatis는 캐시 기능을 제공하여 데이터베이스 연산 속도를 높일 수 있다.
  4. 다양한 데이터베이스 지원: MyBatis는 다양한 데이터베이스에 대한 지원을 제공한다.

 


Configuration.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
 <properties resource="pack/mybatis/db.properties" />
 
  <typeAliases>
 	<typeAlias type="pack.business.DataDto" alias="dto"/>
 	<typeAlias type="pack.business.DataForm" alias="fbean"/>	
 </typeAliases>
 
 <environments default="dev">
  <environment id="dev">
   <transactionManager type="JDBC" />
   <dataSource type="POOLED">
    <property name="driver" value="${driver}" />
    <property name="url" value="${url}" />
    <property name="username" value="${username}" />
    <property name="password" value="${password}" />
   </dataSource>
  </environment>
 </environments>
 <mappers>
  <mapper resource="pack/mybatis/DataMapper.xml" />
 </mappers>
</configuration>

 

<Configuration>

mybatis 설정 파일의 최상의 요소

 

<Properties>

외부 프로퍼티 파일인 db.properites를 참조해 변수설정한다. 

db.properites에는 데이터 접속정보가 들어있다.

 

db.properties

정보관련사항은 회색하이라이팅으로 가림

 

 

<typeAliases>

별칭을 설정해줌

 

<environments>

mybatis가 사용할 환경 설정. 이름은 dev.

 

transactionManager: 트랜잭션 관리 방식을 설정. JDBC로 설정해둠.

dataSource: 데이터베이스 접속 정보를 설정. POOLED 타입으로 설정되어 있어, 데이터베이스 접속을 풀링 방식으로 관리한다. ${driver}, ${url}, ${username}, ${password}는 db.properties 파일에서 설정한 변수 값을 참조한다.

 

 

<mappers>

SQL 매퍼 파일을 설정. pack/mybatis/DataMapper.xml 파일을 참조하여 SQL 쿼리와 자바 메서드를 매핑.

 

DataMapper.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="dev">

 <select id="selectDataAll" resultType="dto">
  select * from sangdata order by code asc
 </select>
 
 <select id="selectDataById" parameterType="string" resultType="dto">
  select code,sang,su,dan from sangdata where code = #{code}
 </select>
 
 <insert id="insertData" parameterType="fbean">
  insert into sangdata(code,sang,su,dan) values(#{code},#{sang},#{su},#{dan})
 </insert>
 
 <update id="updateData" parameterType="fbean">
  update sangdata set sang=#{sang},su=#{su},dan=#{dan} where code=#{code}
 </update>
 
 <delete id="deleteData" parameterType="int">
  delete from sangdata where code=#{code}
 </delete>
</mapper>

 


 

++ 앞선 <environment> 부분에서 풀링방식으로 데이터베이스 접속을 관리한다고 한다.

풀링방식에 대해 추가적으로 알아보자.

 

Pooling

풀링(Pooling)은 데이터베이스 접속을 효율적으로 관리하기 위한 기법이. 기본적으로 데이터베이스 접속은 비용이 큰 작업이며, 특히 매번 새로운 접속을 맺는 것은 성능에 부담을 줄 수 있다. 이런 문제를 해결하기 위해 연결 풀링 기법이 사용된다.

 

연결 풀링의 개념

연결 풀링은 데이터베이스 접속을 미리 여러 개 생성해 두고, 필요할 때마다 이 접속을 재사용하여 데이터베이스에 접속하는 방식. 풀링 관리자는 풀에 여유 접속이 있는지 확인하고, 필요할 때 접속을 빌려주고 사용이 끝나면 다시 풀에 반환한다. 이 과정에서 접속 생성과 해제에 따른 비용을 줄일 수 있어 성능을 향상시킬 수 있다는 이득이 있다.

 

풀링 방식의 장점

  1. 성능 향상: 접속을 반복적으로 맺고 끊는 비용을 줄여서 응용 프로그램의 성능을 향상시켜준다.
  2. 자원 관리: 데이터베이스 접속을 풀에서 관리하기 때문에, 자원의 효율적인 사용과 관리가 가능.
  3. 동시 접속 처리: 다수의 클라이언트가 동시에 데이터베이스에 접속해야 할 때, 풀링을 사용하면 동시 접속을 더욱 효율적으로 처리할 수 있다.

 


ProcessDao.java

각 sql문마다 세션을 열고 닫아준다. 

package pack.business;

import java.sql.SQLException;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import pack.business.DataDto;
import pack.mybatis.SqlMapConfig;

public class ProcessDao {
	// 필요없어서 뺌. (jpro7mybatis와 다른점)
	private SqlSessionFactory factory = SqlMapConfig.getSqlSession();
	
	public List<DataDto> selectDataAll() throws SQLException{
		SqlSession sqlSession = factory.openSession(); //세션열기
		List list = sqlSession.selectList("selectDataAll");
		sqlSession.close();//세션닫기
		return list;
	}
	public DataDto selectPart(String para) throws SQLException{
		SqlSession sqlSession = factory.openSession(); //세션열기
		DataDto dto = sqlSession.selectOne("selectDataById", para);
		sqlSession.close();//세션닫기
		return dto;
	}
	
	public void insData(DataForm form) throws SQLException{
		SqlSession sqlSession = factory.openSession(); //transation 수동처리
		sqlSession.insert("insertData", form);
		sqlSession.commit(); //수동! 커밋이라고 적어야 적은값이 반영되어 콘솔창에 뜬다.
		sqlSession.close();//세션닫기
		
	}
	
	public void upData(DataForm form) throws SQLException{
		SqlSession sqlSession = factory.openSession(true); //transation 자동처리. 상단과 달리 commit 불요.
		sqlSession.insert("updateData", form);
		sqlSession.close();//세션닫기
	}
	
	//void일때 반환값없어서 개발자 확인이 어렵. del는 보이게 해보자. boolean, int 등 자유롭게 가.
	public boolean delData(int para) {
		boolean result = false;
		SqlSession sqlSession = factory.openSession();
		
		try {
			int cou = sqlSession.delete("deleteData", para);
			if(cou > 0) result = true;
			
			sqlSession.commit();
		} catch (Exception e) {
			System.out.println("delData err: "+ e);
			sqlSession.rollback();
		}finally {
			if(sqlSession != null) sqlSession.close();
		}
		return result;
	}
}

 

 

출력연습과 관련한 코드는 깃허브의 wproject5mybatis를 참고하자.

https://github.com/yoonah0327/java_source.git

 

GitHub - yoonah0327/java_source

Contribute to yoonah0327/java_source development by creating an account on GitHub.

github.com

 


https://ccomccomhan.tistory.com/130

 

[JAVA] - MyBatis란?, 마이바티스란?(예제코드) 간단하고 쉽게 이해하기

🧹 간단 정리 MyBatis를 사용하면 DB를 쉽게 다룰 수 있다. 예시) preparedstatement처럼 쿼리문을 복잡하게 입력하지 않고 실제 쿼리문과 유사하게 작성할 수 있다. preparedstatement : "UPDATE users SET name =?, e

ccomccomhan.tistory.com

 

'SQL' 카테고리의 다른 글

MyBatis 환경설정 및 이해  (0) 2024.07.03