๐Ÿ’โ€โ™€๏ธ XML config๋ž€,
xml ํŒŒ์ผ์„ ์„ค์ • ํŒŒ์ผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ


๐Ÿ’โ€โ™€๏ธ JAVA config๋ž€,
Java์˜ Class ํŒŒ์ผ์„ ์„ค์ • ํŒŒ์ผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ

๐Ÿ“Œ ์ดˆ๊ธฐ Setting

  • lib ํด๋”์— ojdbc8.jar / mybatis-3.5.11.jar ํŒŒ์ผ ์‚ฝ์ž…
  • Classpath์— ojdbc8.jar / mybatis-3.5.11.jar ํŒŒ์ผ ์ถ”๊ฐ€

๐Ÿ“Œ Ref. mybatis.jar ํŒŒ์ผ ์ถ”๊ฐ€ ๋ฐฉ๋ฒ•

๐Ÿ™‹โ€ ์ž ๊น ! ์™œ ๋‘ ๊ฐ€์ง€ ํŒŒ์ผ์„ ๋ชจ๋‘ ์ถ”๊ฐ€ํ•ด์•ผํ•˜๋‚˜์š”?

  • Mybatis๊ฐ€ ๊ตฌํ˜„ํ•ด๋†“์€ ๊ฒƒ์„ ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€ํ•ด์•ผํ•˜๋ฏ€๋กœ, lib ํด๋”์— mybatis api๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ Environment import
  • ๋˜ํ•œ jdbc๋„ ๊ฑฐ์ณ์„œ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ojdbc8๋„ lib ํด๋”์— ์ถ”๊ฐ€ํ•ด์•ผํ•จ

๐Ÿ‘€ XML config ๋ฐฉ์‹

๐Ÿ‘‰ mybatis-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>
  <environments default="dev">
    <environment id="dev">
    <!-- JDBC์™€ MANAGED ๋‘˜ ์ค‘ ํ•˜๋‚˜ ์„ ํƒ ์‚ฌ๋Šฅ
    	JDBC : ์ˆ˜๋™ ์ปค๋ฐ‹, MANEGED : ์ž๋™ ์ปค๋ฐ‹ -->
      <transactionManager type="JDBC"/>
      <!-- POOLED์™€ UNPOOLED ์„ ํƒ ๊ฐ€๋Šฅ
      	POOLED : ์ปค๋„ฅ์…˜ ํ’€ ์‚ฌ์šฉ, UNPOOLED : ์ปค๋„ฅ์…˜ํ’€ ๋ฏธ์‚ฌ์šฉ -->
      <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="C##GREEDY"/>
        <property name="password" value="GREEDY"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/greedy/section02/xmlconfig/mapper.xml"/>
  </mappers>
</configuration>

๐Ÿ‘‰ Application Class

public class Application {

	public static void main(String[] args) {
		
		String resource = "com/greedy/section02/xmlconfig/mybatis-config.xml";
		
		try {
			InputStream inputStream = Resources.getResourceAsStream(resource); 
            								// : resource์„ ์ž…๋ ฅ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ฝ์–ด์˜ด
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 
            												// ์„ค์ • ํŒŒ์ผ์„ ์ฝ์–ด์˜ค๋Š” inputStream์„ ์ „๋‹ฌ
			
			SqlSession sqlSession = sqlSessionFactory.openSession(false);
			
			java.util.Date date = sqlSession.selectOne("mapper.selectSysdate"); 
            // : mapper๋ผ๋Š” namespace์˜ selectSysdate์ธ ๊ตฌ๋ฌธ ์กฐํšŒํ•  ๊ฒƒ
			// selectOne, selectList, selectMap, insert, update, delete ๋“ฑ ์‚ฌ์šฉ๊ฐ€๋Šฅ
			System.out.println(date);
			
			sqlSession.close();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

๐Ÿ‘‰ mapper.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="mapper">
  <select id="selectSysdate" resultType="java.util.Date"> 
    				<!-- : ์กฐํšŒํ•  ํƒ€์ž…์ด Dateํƒ€์ž…์ž„์„ ๋ช…์‹œ -->
    SELECT
    		SYSDATE
    	FROM DUAL
  </select>
</mapper>

๐Ÿ‘€ JAVA config ๋ฐฉ์‹

๐Ÿ‘‰ Application Class

public class Application {

	/* ์ ‘์†์ •๋ณด */
	private static String DRIVER = "oracle.jdbc.driver.OracleDriver";
	private static String URL = "jdbc:oracle:thin:@localhost:1521:xe";
	private static String USER = "C##GREEDY";
	private static String PASSWORD = "GREEDY";
	
	public static void main(String[] args) {

		Environment environment = 
				new Environment("dev" 							// ํ™˜๊ฒฝ ์ •๋ณด ์ด๋ฆ„
								, new JdbcTransactionFactory()	// ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €์˜ ์ข…๋ฅ˜ ๊ฒฐ์ •
								, new PooledDataSource(DRIVER, URL, USER, PASSWORD)); // ์ ‘์† ์ •๋ณด ๋‚˜์—ด ํ•ด์ฃผ๊ธฐ
		
		/* ์ƒ์„ฑํ•œ ํ™˜๊ฒฝ ์„ค์ • ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค ์„ค์ • ๊ฐ์ฒด ์ƒ์„ฑ */
		Configuration configuration = new Configuration(environment); 
        // environment๋ฅผ ์ „๋‹ฌํ•˜๋ฉด์„œ ์„ค์ • ๊ฐ์ฒด ์ƒ์„ฑ
		
		/* ์„ค์ • ๊ฐ์ฒด์— ๋งคํผ ๋“ฑ๋ก */
		configuration.addMapper(Mapper.class);
		
		/* ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ• 1 */
		/* SqlSessionFactory : sqlSession ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํŒฉํ† ๋ฆฌ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค 
		 * SqlSessionFactoryBuilder : SqlSessionFactory ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์˜ ํ•˜์œ„ ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋นŒ๋“œ ์—ญํ•  ์ˆ˜ํ–‰ 
		 * build() : ์„ค์ •์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” Configuration ํƒ€์ž…์˜ ๊ฐ์ฒด ํ˜น์€ ์™ธ๋ถ€ ์„ค์ • ํŒŒ์ผ๊ณผ ์—ฐ๊ฒฐ๋œ ์ŠคํŠธ๋ฆผ์„
		 * 			๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋ฉด SqlSessionFactory ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ */
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration); // configuration๋ฅผ ์ „๋‹ฌํ•˜๋ฉด์„œ ์„ค์ • ๊ฐ์ฒด ์ƒ์„ฑ
		
		/* openSession() : sqlSession ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ, boolean ํƒ€์ž…์„ ์ธ์ž๋กœ ์ „๋‹ฌ
		 * false : Connection ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž… ๊ฐ์ฒด๋กœ DML ์ˆ˜ํ–‰ ํ›„ auto commit์— ๋Œ€ํ•œ ์˜ต์…˜์„ false๋กœ ์ง€์ •(๊ถŒ์žฅ)
		 * true : Connection ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž… ๊ฐ์ฒด๋กœ DML ์ˆ˜ํ–‰ ํ›„ auto commit์— ๋Œ€ํ•œ ์˜ต์…˜์„ true๋กœ ์ง€์ •
		 * */
		SqlSession sqlSession = sqlSessionFactory.openSession(false);
		
		/* getMapper() : Configuration์— ๋“ฑ๋ก๋œ ๋งคํผ๋ฅผ ๋™์ผ ํƒ€์ž…์— ๋Œ€ํ•ด ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ */
		Mapper mapper = sqlSession.getMapper(Mapper.class);
		
		/* Mapper ์ธํ„ฐํŽ˜์ด์Šค์— ์ž‘์„ฑ ๋œ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ฟผ๋ฆฌ ์‹คํ–‰ */
		java.util.Date date = mapper.selectSysdate();
		
		System.out.println(date);
		
		/* close() : SqlSession ๊ฐ์ฒด ๋ฐ˜๋‚ฉ */
		sqlSession.close(); 

	}
}

๐Ÿ“Œ Ref.

* DB์ ‘์†์— ๊ด€ํ•œ ํ™˜๊ฒฝ ์„ค์ • 
  - JdbcTransactionFactory() : ์ˆ˜๋™ ์ปค๋ฐ‹
  - ManagedTransactionFactory()	: ์ž๋™ ์ปค๋ฐ‹ 
  - PooledDataSource : Connection Pool ์‚ฌ์šฉ (๋ณดํ†ต ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์˜ต์…˜)
  - UnPooledDataSource : Connection Pool ๋ฏธ์‚ฌ์šฉ

๐Ÿ‘‰ Mapper Interface

public interface Mapper {
	
	@Select("SELECT SYSDATE FROM DUAL")
	java.util.Date selectSysdate(); // Select๋œ ํƒ€์ž…์„ Date๋กœ ๋ฐ›์•„์˜ด

}
profile
Tiny little habits make me

0๊ฐœ์˜ ๋Œ“๊ธ€