JAVA

myBatis 설정(Properties 파일 설정 방식)

cattaku 2020. 2. 17. 12:15

DB의 정보들을 관리하기위해 myBatis를 아래와 같이 적용하였다.

1. myBatis관련 라이브러리를 추가하기위해 maven의 pom.xml에 아래의 내용 등

 

2. DB연결정보를 /프로젝트명/src/main/resources/db.properties 에 추가

 driver=org.gjt.mm.mysql.Driver

 url=jdbc:mysql://접속IP/데이터베이스명

 username=DB계정아이디

 password=DB계정패스워드

 

3. myBatis Config파일 생성(/프로젝트명/src/main/resources/config/mybatis/mybatis-config.xml)

config파일은 어짜피 SqlSessionManager클래스를 만들어서 명시하니 임의로 이름을 정해줘도 상관없다(나의 경우는 mybatis-config.xml로 )

    - cacheEnabled : 설정에서 각 mapper 에 설정된 캐시를 전역적으로 사용할지 말지에 대한 여부 

        : true | false 

        : default : true  

    - lazyLoadingEnabled : 늦은 로딩을 사용할지에 대한 여부.  

        사용하지 않는다면 모두 즉시 로딩할 것이다.  

        : true | false 

        : default : true  

    - aggressiveLazyLoading : 활성화 상태로 두게 되면 늦은(lazy) 로딩 프로퍼티를 가진 객체는  

        호출에 따라 로드될 것이다. 반면에 개별 프로퍼티는 요청할때 로드된다.  

        : true | false  

        : default : true  

    - multipleResultSetsEnabled : 한개의 구문에서 여러개의 ResultSet 을 허용할지의 여부 

        (드라이버가 해당 기능을 지원해야 함)  

        : true | false  

        : default : true  

    - useColumnLabel  칼럼명 대신에 칼럼라벨을 사용. 드라이버마다 조금  

        다르게 작동한다. 문서와 간단한 테스트를 통해 실제  

        기대하는 것처럼 작동하는지 확인해야 한다.   

        : true | false  

        : default : true  

    - useGeneratedKeys : 생성키에 대한 JDBC 지원을 허용. 지원하는  

        드라이버가 필요하다. true 로 설정하면 생성키를  

        강제로 생성한다. 일부 드라이버(예를들면, Derby)에서는 이 설정을 무시한다.   

        : true | false  

        : default => false 

     - autoMappingBehavior : MyBatis 가 칼럼을 필드/프로퍼티에 자동으로  

        매핑할지와 방법에 대해 명시. PARTIAL은 간단한  

        자동매핑만 할뿐, 내포된 결과에 대해서는 처리하지  

        않는다. FULL 은 처리가능한 모든 자동매핑을 처리한다.  

        : NONE, PARTIAL, FULL  

        : default : PARTIAL  

    - defaultExecutorType : 디폴트 실행자(executor) 설정. SIMPLE 실행자는  

        특별히 하는 것이 없다. REUSE 실행자는  

        PreparedStatement 를 재사용한다. BATCH 실행자는  

        구문을 재사용하고 수정을 배치처리한다.   

        : SIMPLE, REUSE, BATCH 

        : default : SIMPLE  

    - defaultStatementTimeout : 데이터베이스로의 응답을 얼마나 오래 기다릴지를  

        판단하는 타임아웃을 셋팅  

        : 양수  

        : default : 셋팅되지않음(null)  

==============================================

<?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>

    <!-- db 정보 파일을 로드한다. -->

    <settings>

         <setting name="cacheEnabled" value="true" />

         <setting name="lazyLoadingEnabled" value="false" />

         <setting name="multipleResultSetsEnabled" value="true" />

         <setting name="useColumnLabel" value="true" />

         <setting name="useGeneratedKeys" value="false" />

         <setting name="autoMappingBehavior" value="PARTIAL" />

         <setting name="defaultExecutorType" value="SIMPLE" />

         <setting name="defaultStatementTimeout" value="25000" />

         <setting name="safeRowBoundsEnabled" value="false" />

         <setting name="mapUnderscoreToCamelCase" value="false" />

         <setting name="localCacheScope" value="SESSION" />

         <setting name="jdbcTypeForNull" value="OTHER" />

         <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" />

     </settings>

     <typeAliases>

         <typeAlias alias="hMap" type="java.util.HashMap" />

         <typeAlias alias="UsersVO" type="com.bccc.vo.UsersVO" />

     </typeAliases>

    <!-- db 연결 -->

    <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>

    <!-- sql 맵퍼 -->

    <mappers>

        <mapper resource="config/mybatis/sqlmapper/commonMapper.xml" />

    </mappers>

</configuration>

======================================= 

 

4. SQL문을 관리할 Mapper 파일 생성(/프로젝트명/src/main/resources/config/mybatis/sqlmapper/commonMapper.xml)

Mapper 파일은 mybatis-config.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="sql.commonMapper">

  <select id="selectUser" parameterType="String" resultType="UsersVO">

    SELECT * 

     FROM USERS 

    WHERE USER_ID = #{user_id}

  </select>

 </mapper>

 

5. mybatis-config 설정을 읽어와 처리하는 SqlSessionManager 클래스파일 생성(/프로젝트명/src/main/java/com/bccc/common/SqlSessionManager.java)

package com.bccc.common;

 

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 SqlSessionManager {

 

public static SqlSessionFactory sqlSession;

 

static {

String resource = "config/mybatis/mybatis-config.xml";

Reader reader;

 

try {

reader = Resources.getResourceAsReader(resource);

sqlSession = new SqlSessionFactoryBuilder().build(reader);

} catch (IOException e) {

e.printStackTrace();

}

}

 

public static SqlSessionFactory getSqlSession() {

return sqlSession;

}

 

}

 

 

 

6. SQL로 조회된 데이터를 담을 Value Object 클래스 생성 (/프로젝트명/src/main/java/com/bccc/vo/UsersVO.java)

package com.bccc.vo;

public class UsersVO {

 

String user_seq="";

String user_id="";

String passwd="";

int user_level = 0;

String user_name="";

String tell_no="";

String cell_no="";

String email="";

String updt_date="";

String reg_date="";

 

public String getUser_seq() {

return user_seq;

}

public void setUser_seq(String user_seq) {

this.user_seq = user_seq;

}

public String getUser_id() {

return user_id;

}

public void setUser_id(String user_id) {

this.user_id = user_id;

}

public String getPasswd() {

return passwd;

}

public void setPasswd(String passwd) {

this.passwd = passwd;

}

public int getUser_level() {

return user_level;

}

public void setUser_level(int user_level) {

this.user_level = user_level;

}

public String getUser_name() {

return user_name;

}

public void setUser_name(String user_name) {

this.user_name = user_name;

}

public String getTell_no() {

return tell_no;

}

public void setTell_no(String tell_no) {

this.tell_no = tell_no;

}

public String getCell_no() {

return cell_no;

}

public void setCell_no(String cell_no) {

this.cell_no = cell_no;

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

public String getUpdt_date() {

return updt_date;

}

public void setUpdt_date(String updt_date) {

this.updt_date = updt_date;

}

public String getReg_date() {

return reg_date;

}

public void setReg_date(String reg_date) {

this.reg_date = reg_date;

}

 

public String getData() {

String data = user_seq + "," +

                  user_id + "," +

                  passwd + "," +

                  user_name + "," +

                  tell_no + "," +

                  cell_no + "," +

                  email + "," +

                  updt_date + "," +

                  reg_date ;

return data;

}

 

}

 

7. 데이터를 관리할 DefaultDAO 클래스 생성(/프로젝트명/src/main/java/com/bccc/common/DefaultDAO.java)

내 경우는 session관리를 한곳에서 하기위해 DB를 컨트롤하는 유형을 DefaultDAO에 선언해두고

실제 서비스DAO클래스에서는DefaultDAO를  extends 해서 사용했다 

 

import java.util.List;

import java.util.Map;

 

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

 

import com.bccc.vo.UsersVO;

 

 

public class DefaultDAO {

 

private SqlSessionFactory sqlSessionFactory = SqlSessionManager.getSqlSession();

 

/**

     * 생성자

     */

    public DefaultDAO() {

        // default constructor

    }

    

    /**

     * 다수의 row 를 조회하여 반환

     * 

     * @param sqlID namespace 를 포함한 sql ID

     * @return 결과 데이터 리스트

     */

    protected List queryForList(String sqlID, Map map) {

    SqlSession session = sqlSessionFactory.openSession();

try {

return session.selectList(sqlID, map);

} catch (Exception e) {

session.rollback();

e.printStackTrace();

} finally {

session.close();

}

return null;

    }

    

    /**

     * 특정VO객체에 단일데이터를 조회하여 반환

     * 

     * @param sqlID namespace 를 포함한 sql ID

     * @return 결과 데이터 리스트

     */

    protected Object queryForVO(String sqlID, Map map) {

    SqlSession session = sqlSessionFactory.openSession();

try {

return session.selectOne(sqlID, map);

} catch (Exception e) {

session.rollback();

e.printStackTrace();

} finally {

session.close();

}

return null;

    }

 

}

 

8. DefaulDAO 클래스를 상속받은 일반 서비스 DAO클래스 생성(/프로젝트명/src/main/java/com/bccc/dao/MainDAO.java)

package com.bccc.dao;

 

import java.util.HashMap;

import java.util.Map;

 

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

 

import com.bccc.common.DefaultDAO;

import com.bccc.common.SqlSessionManager;

import com.bccc.vo.UsersVO;

 

public class MainDAO extends DefaultDAO{

 

private SqlSessionFactory sqlSessionFactory = SqlSessionManager.getSqlSession();

 

public UsersVO getSelectUsers( String id) {

Map pMap = new HashMap();

pMap.put("user_id", id);

try {

UsersVO resultVO = (UsersVO)queryForVO("sql.commonMapper.selectUser",pMap);

return resultVO;

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

 

}

 

9. 조회된 데이터 확인(/프로젝트명/src/main/java/com/bccc/controller/MainController.java)

단순데이터 확인을 위해 Service 클래스를 구현하지않고 바로 Control 클래스에서 DAO를 호출하여 데이터를 확인했음

package com.bccc.controller;

 

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.servlet.ModelAndView;

 

import com.bccc.common.DefaultController;

import com.bccc.dao.MainDAO;

import com.bccc.vo.UsersVO;

 

/**

 * 메인화면 페이지 컨트롤러

 * 

 * @author <a href="mailto:haengro@gmail.com">최행로</a>

 * @version

 * @since

 * @created 2013. 8. 27.

 */

@Controller

public class MainController extends DefaultController {

 

    /**

     * 테스트 페이지 이동

     * 

     * @return ModelAndView ModelAndView 객체

     */

    @RequestMapping(value = "/index.do")

    public String bcccMain2() {

        MainDAO mainDAO = new MainDAO();

        UsersVO resultVO = mainDAO.getSelectUsers("test");

        System.out.println("result : " + resultVO.getData());

        return "/index";

    }

 

    /**

     * 메인 페이지 이동

     * 

     * @return ModelAndView ModelAndView 객체

     */

    @RequestMapping(value = "/main.do")

    public ModelAndView bcccMain() {

        ModelAndView mav = new ModelAndView();

 

        MainDAO mainDAO = new MainDAO();

 

        UsersVO resultVO = mainDAO.getSelectUsers("test");

        System.out.println("result : " + resultVO.getData());

        return mav;

    }

}

https://m.blog.naver.com/PostView.nhn?blogId=haengro&logNo=40196434095&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

myBatis 설정(Properties 파일 설정 방식)

DB의 정보들을 관리하기위해 myBatis를 아래와 같이 적용하였다. 1. myBatis관련 라이브러리를 추가하...

blog.naver.com