① JDBC를 통해 데이터베이스에 엑세스하는 작업을 캡슐화
② 일반 SQL쿼리, 저장 프로시저 및 고급 매핑을 지원
③ 모든 JDBC코드 및 매개변수의 중복작업을 제거
① 프로그램 코드와 SQL 분리 가능
프로그램에 있는 SQL쿼리들을 모두 한 구성파일로 구성
② 수정의 편리함
기존 JDBC방식과 달리 SQL문을 XML파일에 작성 -> 코드가 줄어듦
SQL문만 따로 관리 = 수정이 편리
③ 작업효율과 가독성 상승
DBCP를 사용하기 때문에 JDBC만 사용하는 것보다 더 좋음
1) 다운받아 압축풀기
MyBatis
2) build path 잡기
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<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="org/mybatis/example/BlogMapper.xml" />
</mappers>
</configuration>
public class SqlMapConfig {
private static SqlSessionFactory factory;
// 클래스 초기화 블럭 : 클래스가 처음 로딩될 때 한번만 수행
static {
try {
//config.xml이 읽히지 않았을 때의 try~catch
String resource = "./com/codingbox/mybatis/config.xml";
// xml 파일 읽기
Reader reader = Resources.getResourceAsReader(resource);
// 주소를 읽어와서 MyBatis 프레임워크를 사용할 수 있는 SqlSessionFactory 객체를 얻음
factory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getFactory() {
return factory;
}
}
<?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="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
💡 예시
<?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="Member">
<select id="checkId" parameterType="string" resultType="_int">
SELECT
count(*) FROM TBL_MEMBER tm WHERE USERID = #{userid}
</select>
<!-- 멤버빈 객체를 통으로 받아와서 파라미터 타입으로 -->
<insert id="join" parameterType="com.codingbox.vo.MemberBean">
INSERT INTO TBL_MEMBER VALUES
(#{userid}, #{userpw}, #{username}, #{userphone},
#{zipcode}, #{addr}, #{addrdetail}, #{addrdetc})
</insert>
<select id="login" parameterType="hashmap"
resultType="com.codingbox.vo.MemberBean">
SELECT * FROM TBL_MEMBER tm WHERE USERID = #{userid} AND
USERPW = #{userpw}
</select>
</mapper>
① config.xml랑 연결
public class MemberDao {
// 전역변수로 SqlSessionFactory, SqlSession 선언
SqlSessionFactory factory = SqlMapConfig.getFactory();
SqlSession sqlSession;
// 기본 생성자로 factory에서 세션 열어주기 = 커넥션 만들기
public MemberDao() {
sqlSession = factory.openSession(true);
}
}
② sql 호출 -> 클래스 내부에서 메소드 만들기
sqlSession.insert("namespace값.id값", 파라미터);
sqlSession.selectOne("namespace값.id값", 파라미터);
sqlSession.update("namespace값.id값", 파라미터);
sqlSession.delete("namespace값.id값", 파라미터);
💡 예시
package com.codingbox.dao;
import java.util.HashMap;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import com.codingbox.mybatis.SqlMapConfig;
import com.codingbox.vo.MemberBean;
public class MemberDao {
SqlSessionFactory factory = SqlMapConfig.getFactory();
SqlSession sqlSession;
public MemberDao() {
sqlSession = factory.openSession(true);
}
public boolean checkId(String userid) {
System.out.println(userid);
boolean result = false;
int cnt = 0;
cnt = sqlSession.selectOne("Member.checkId", userid);
if( cnt == 1) {
result = true;
}
System.out.println(cnt);
return result;
}
public boolean join(MemberBean member) {
boolean result = false;
if(sqlSession.insert("Member.join", member)==1) {
result = true;
}
return true;
}
public MemberBean login(String userid, String userpw){
HashMap<String, String> dates = new HashMap<>();
dates.put("userid", userid);
dates.put("userpw", userpw);
// 키값에 사용자가 입력했던 id와 pw가 각각 이름에 입력 (이름 - 내용)
// if. arrayList로 하면 0에 id와 pw, 1에 id와 pw
MemberBean member = sqlSession.selectOne("Member.login", dates);
return member;
}
}
🙆♀️ 알아두기
- sql 타입별 리턴 결과
select : select문에 해당하는 결과
insert : 1 (다중 insert문도 마찬가지)
update : update된 행의 개수 반환 (없으면 0)
delete : delete된 행의 개수 반환 (없으면 0)
① 사용할 api 검색
ex. 우편번호 api
다음 우편번호 api
② 코드 확인
💡 예시
<input type="text" id="sample6_postcode" placeholder="우편번호">
<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<script>
function sample6_execDaumPostcode() {
... 메소드 블라블라 ...
}
</script>
③ 알맞은 곳에 끼워넣기
💡 예시
1. join_view.jsp 파일에 붙여넣기
<input type="text" id="sample6_postcode" placeholder="우편번호">
2. join_view.jsp 파일 => </body>후에 붙여넣기
<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<script src="user.js"></script>
3. user.js 파일에 붙여넣기
function sample6_execDaumPostcode() {
... 메소드 블라블라 ...
}
// js파일 이므로 script 제거
👍 결과