너와 나의 연결고리, JSP 🔗(11) - DBCP, Mybatis

joyfulwave·2022년 11월 29일
0




📚 DBCP

📌 DBCP(DataBase Connection Pool)

  • DBCP는 데이터베이스와 연결된 커넥션을 미리 만들어서 저장해두고 있다가 필요할 때 저장된 공간(pool)에서 가져다 쓰고 반환하는 기법을 의미해요.
  • 커넥션 풀을 이용하고 커넥션을 미리 만들어 두고 사용하기 때문에 매번 사용자가 요청할 경우 드라이버를 로드하고, 커넥션 객체를 생성해 연결하는 비효율적인 작업을 하지 않아도 돼요.
  • 즉 데이터베이스 부하를 줄일 수 있고 효율적으로 관리할 수 있도록 해줘요.

📌 JNDI(Java Naming and Directory Interface)

  • JNDI는 디렉토리 서비스에서 제공하는 데이터 및 객체를 발견하고 참고하기 위한 자바 API를 의미해요.
  • 즉, DB Pool을 미리 Naming 시켜두는 방법을 뜻해요
  • 우리가 저장해 놓은 WAS의 데이터베이스 정보에 JNDI를 설정해 놓으면 웹 어플리케이션은 JNDI만 호출하면 간단해져요.

📌 JNDI 사용이유

  • 개발을 한 사람과 실제 서비스를 운영하는 사람은 다른 경우가 많기 때문에 소스 레벨에서 설정되어 있는 것보다 WAS에서 설정되어 있는 것을 선호해요.

📌 실습해보기

⚫ JNDI 설정 - context.xml

context의 상세 내용은 [Servers]에서 해당 프로젝트의 config 폴더에서 수정할 수 있어요.

<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
--><!-- The contents of this file will be loaded for each web application --><Context>

    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
    
   <!-- 아래 내용 추가 -->
   <!--
	username, password에는 본인의 db 계정을 입력해주면 돼요.
	-->
     <Resource 
		name="jdbc/oracle"
		auth="Container"
    	type="javax.sql.DataSource"
    	driverClassName="oracle.jdbc.driver.OracleDriver"
    	url="jdbc:oracle:thin:@localhost:1521:xe"
    	username="jsp"
    	password="jsp"
    	maxActive="20"
    	maxIdle="20"
    	maxWait="-1"
    /> 
  <!-- 아래 내용 추가 끝-->
    
</Context>

⚫ DBCP 사용 - dbcp_test.jsp

<%@page import="java.sql.Date"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.InitialContext"%>
<%@page import="javax.naming.Context"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		// dbcp를 이용하는 방법
		Context context = new InitialContext(null);
		DataSource dataSource = (DataSource)context.lookup("java:comp/env/jdbc/oracle");
		Connection conn = dataSource.getConnection();
		
		String sql = "select sysdate from dual";
		
		PreparedStatement pstm = conn.prepareStatement(sql);
		ResultSet rs = pstm.executeQuery();
		
		Date date = null;
		
		if(rs.next()){
			date = rs.getDate(1);
		}
	%>
	
	<%=date %>
<%-- 	<%=conn %> --%>

</body>
</html>

⚫ 출력 결과




📚 MyBatis

📌 MyBatis

  • 객체 지향 언어인 자바의 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 할 수 있도록 도와주는 개발 프레임워크에요.
  • JDBC를 통해 데이터베이스에 엑세스 하는 작업을 캡슐화 하고 일반 SPL쿼리, 저장 프로시저 및 고급 매핑을 지원해요.
  • MyBatis에서는 프로그램에 있는 SQL 쿼리들을 한 구성파일에 구성하여 프로그램 코드와 SQL을 분리할 수 있는 장점을 가지고 있어요.
  • MyBatis는 기존 JDBC 방식과 달리 SQL문은 XML파일에 작성함으로써 코드가 줄어들고 SQL문만 따로 관리하기 때문에 수정이 편해져요.

📌 MyBatis 세팅

⚫ MyBatis 다운로드

아래 링크를 통해 마이바티스를 다운받습니다.
blog.mybatis.org/p/products.html

(1)

(2)

(3)

⚫ 프로젝트 라이브러리에 추가

(1)
[해당프로젝트] - [src] - [main] - [webapp] - [WEB-INF] - [lib] 폴더에 다운로드 받은 [mybatis-3.5.11.jar] 파일을 추가해줘요.

(2)
해당 프로젝트에 오른쪽 버튼을 클릭하여 [Propertis]에 들어갑니다.

(3)
사진과 같은 경로로 접근하여 추가한 라이브러리를 Classpath에 추가해줘요.


📌 MyBatis 결과 값

  • select
    성공 : select문에 해당하는 결과
    실패 : error
  • insert
    성공 : 1(여러건이여도 1)
    실패 : error
  • update
    성공 : update 된 행의 개수 반환(없다면 0)
    실패 : error
  • delete
    성공 : delete 된 행의 개수 반환(없다면 0)
    실패 : error

📌 MyBatis 사용하는 법

⚫ 클래스 초기화 설정 - SqlMapConfig.java

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SqlMapConfig {
	private static SqlSessionFactory factory;
	
	// 클래스 초기화 블럭(클래스가 처음 로딩될 때 한번만 수행)
	static {
		
		try {
			String resource = "./com/koreait/web/mybatis/config.xml";
			Reader reader = Resources.getResourceAsReader(resource);
			factory = new SqlSessionFactoryBuilder().build(reader);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static SqlSessionFactory getFactory() {
		return factory;
	}
}

⚫ config.xml

<?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의 상세 내용은 본인의 db 환경대로 작성해줍니다.
-->
 <configuration>
	 <environments default="development">
		 <environment id="development">
			 <transactionManager type="JDBC"/>
			 <dataSource type="POOLED">
				 <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
				 <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
				 <property name="username" value="jsp"/>
				 <property name="password" value="jsp"/>
			 </dataSource>
		 </environment>
	 </environments>
	 <mappers>
 		<mapper resource="com/koreait/web/sql/user.xml"/>
 	 </mappers>
</configuration>

⚫ sql 작성 예시 - user.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="User">
	 <select id="login" parameterType="hashmap" resultType="com.koreait.web.beans.UserBean">
	 	SELECT * FROM TBL_USER WHERE USERID = #{userid} AND USERPW = #{userpw}
	 </select>
</mapper>



포기하지 말고 JUST DO! ✔️




출처
https://media.giphy.com/media/dwmNhd5H7YAz6/giphy.gif
https://media.giphy.com/media/3o6Mb9EC7mNqXl9x7y/giphy.gif

0개의 댓글