[DB] MyBatis

seonjeong·2023년 2월 21일
0

DB

목록 보기
1/7
post-thumbnail

🔥 MyBatis란?

  • 자바 오브젝트와 SQL사이의 자동 매핑 기능을 지원하는 ORM(Object relational Mapping)프레임워크
  • SQL을 별도의 파일로 분리해서 관리
  • 데이터의 입력, 조회, 수정, 삭제(CRUD)를 보다 편하게 하기 위해 xml로 구조화하여 Mapper 설정 파일을 통해서 JDBC를 구현

config.xml : DB를 연동하기 위한 설정값들과 mapper.xml을 등록하기 위한 xml
mapper.xml : SQL 구문을 담고 있는 xml


🔥 특징

1. 쉬운 접근성과 코드의 간결함

- JDBC의 모든 기능을 Mybatis가 대부분 제공한다.
- 복잡한 JDBC코드를 걷어내며 깔끔한 소스코드를 유지할 수 있다.
- 수동적인 파라미터 설정과 쿼리 결과에 대한 맵핑 구문을 제거할 수 있다.

2. SQL문과 프로그래밍 코드의 분리

- SQL에 변경이 있을 때마다 자바 코드를 수정하거나 컴파일하지 않아도 된다

3. 다양한 프로그래밍 언어로 구현 가능


🔥 초기설정 및 쿼리문 작성

🧾 config.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>
	<environments default="developerment">
		<environment id="developerment">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">	<!-- 데이터베이스의 풀, 영역-->
				<property name="driver" value="com.mysql.cj.jdbc.Driver"/>	<!-- DB에 대한 정보 -->
				<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
				<property name="username" value="root"/>
				<property name="password" value="1234"/>
			</dataSource>
		</environment>
	</environments>
	
	<mappers>
		<mapper resource="mybatis/mapper.xml"/>
	</mappers>
</configuration>	

🧾 mapper.xml

<select id="외부에서 접근할 문자열" parameterType="object" resultType="object">
  <!-- 쿼리문 -> #{문자열(값)} / ${숫자} -->
  select id, name, email
  where id = ''					
</select>
  • 소스코드
<?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">
	
<!-- Query -->
<mapper namespace="mybatis.mapper">
	<insert id="addmember" parameterType="dto.MemberDto">
		insert into member(id, pwd, name, email, auth)
		value(#{id}, #{pwd}, #{name}, #{email}, 3)
	</insert>
	
	<select id="getMember" parameterType="java.lang.String"
		resultType="dto.MemberDto">
		select id, pwd, name, email, auth
		from member
		where id = #{id}
	</select>
	<!-- parameterType 생략 가능 -->
	<select id="allMember" resultType="dto.MemberDto">	
		select * from member
	</select>
	
	<delete id="deleteMember" parameterType="String">
		delete from member
		where id = #{id}
	</delete>
	
	<update id="updateMember" parameterType="dto.MemberDto">
		update member
		set name = #{name}, email = #{email}
		where id = #{id}
	</update>
</mapper>

🧾 MainClass.java

// 설정파일 read 
InputStream is = Resources.getResourceAsStream("mybatis/config.xml");

// SqlSessionFactory 객체를 생성
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);

// SqlSession 객체를 취득
SqlSession session = factory.openSession();
  • mapper.xml에 작성했던 쿼리문 실행
// insert
MemberDto dto = new MemberDto("abc", "123", "무민", "abc@naver.com", 0);

int count = session.insert("addmember", dto);
if(count > 0) {
	session.commit();
	System.out.println("추가성공!");
}else {
	session.rollback();
	System.out.println("추가실패!");			
}

// select (1개의 데이터)
String id = "abc";
MemberDto dto = session.selectOne("getMember", id);
System.out.println(dto.toString());

// select (다수의 데이터)
List<MemberDto> list = session.selectList("allMember");
for (MemberDto m : list) {
	System.out.println(m.toString());
}




참고

https://velog.io/@woody_/Mybatis-%EC%B4%88%EA%B8%B0-%EC%84%A4%EC%A0%95-%EB%B0%8F-xml-%ED%8C%8C%EC%9D%BC-%EC%84%A4%EC%A0%95
https://velog.io/@changyeonyoo/Mybatis%EB%9E%80-%EC%9E%A5%EC%A0%90-%ED%8A%B9%EC%A7%95-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8

profile
🦋개발 공부 기록🦋

0개의 댓글