package org.fastcatsearch.db; import java.io.IOException; import java.io.InputStream; import java.sql.SQLException; import java.util.List; import java.util.Map; import org.apache.ibatis.builder.xml.XMLMapperBuilder; import org.apache.ibatis.datasource.pooled.PooledDataSource; import org.apache.ibatis.io.Resources; import org.apache.ibatis.mapping.Environment; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory; import org.junit.Test; public class MyBatisTest { @Test public void testStartProgramatically() throws InterruptedException, IOException { String url = "jdbc:derby:/Users/swsong/TEST_HOME/fastcatsearch2_shard/node1/db/plugin"; PooledDataSource dataSource = new PooledDataSource("org.apache.derby.jdbc.EmbeddedDriver", url, "", ""); Environment environment = new Environment("ID", new JdbcTransactionFactory(), dataSource); Configuration configuration = new Configuration(environment); addSqlMappings(configuration, "org/fastcatsearch/db/TestMapper.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration); System.out.println("Open session...."); SqlSession session = sqlSessionFactory.openSession(); System.out.println("Open session....Done"); TestMapper setDictionaryMapper = session.getMapper(TestMapper.class); System.out.println("Got mapper!"); // for(int i= 0;i < 20; i++){ // // //SetDictionaryVO vo = (SetDictionaryVO) session.selectOne("org.fastcatsearch.db.SetDictionaryMapper.selectWord", i); // Map<String, Object> vo = setDictionaryMapper.selectWord(i); // if(vo != null){ // // for(Map.Entry<String, Object> entry : vo.entrySet()){ // System.out.println(entry.getKey() + "= " + entry.getValue()); // } // } // } //SetDictionaryVO vo = (SetDictionaryVO) session.selectOne("org.fastcatsearch.db.SetDictionaryMapper.selectWord", i); List<Map<String, Object>> list = setDictionaryMapper.selectList(0, 15, "%a%"); if(list != null){ for(int i=0;i<list.size(); i++){ Map<String, Object> vo = list.get(i); System.out.println("------------"); for(Map.Entry<String, Object> entry : vo.entrySet()){ System.out.println(entry.getKey() + "= " + entry.getValue()); } } } session.close(); } /* * 결론 : session open은 처음에만 jdbc가 접속때문에 시간이 걸리고, 다음부터는 open에 시간이 거의 걸리지 않음. * 즉, 사용후 close하는것이 좋음. * */ @Test public void testSessionCloseAndOpen() throws InterruptedException, IOException { String url = "jdbc:derby:/Users/swsong/TEST_HOME/fastcatsearch2_shard/node1/db/plugin"; PooledDataSource dataSource = new PooledDataSource("org.apache.derby.jdbc.EmbeddedDriver", url, "", ""); Environment environment = new Environment("ID", new JdbcTransactionFactory(), dataSource); Configuration configuration = new Configuration(environment); addSqlMappings(configuration, "org/fastcatsearch/db/TestMapper.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration); long lap = System.nanoTime(); for(int k =0;k <10; k++){ System.out.println("Open session...."); SqlSession session = sqlSessionFactory.openSession(); System.out.println("Open session....Done"); TestMapper setDictionaryMapper = session.getMapper(TestMapper.class); System.out.println("Got mapper!"); //SetDictionaryVO vo = (SetDictionaryVO) session.selectOne("org.fastcatsearch.db.SetDictionaryMapper.selectWord", i); List<Map<String, Object>> list = setDictionaryMapper.selectList(0, 15, null); if(list != null){ for(int i=0;i<list.size(); i++){ Map<String, Object> vo = list.get(i); // System.out.println("------------"); for(Map.Entry<String, Object> entry : vo.entrySet()){ // System.out.println(entry.getKey() + "= " + entry.getValue()); } } } session.close(); System.out.println("lap time = "+(System.nanoTime() - lap)/1000000); lap = System.nanoTime(); } } @Test public void testOpenTwice() throws InterruptedException, IOException, SQLException { String url = "jdbc:derby:/Users/swsong/TEST_HOME/fastcatsearch2_shard/node1/db/plugin"; PooledDataSource dataSource = new PooledDataSource("org.apache.derby.jdbc.EmbeddedDriver", url, "", ""); Environment environment = new Environment("ID", new JdbcTransactionFactory(), dataSource); Configuration configuration = new Configuration(environment); addSqlMappings(configuration, "org/fastcatsearch/db/TestMapper.xml"); System.out.println("----1----"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration); SqlSession session = sqlSessionFactory.openSession(); TestMapper setDictionaryMapper = session.getMapper(TestMapper.class); Map<String, Object> vo = setDictionaryMapper.selectWord(1); System.out.println(vo); session.close(); System.out.println(sqlSessionFactory.getConfiguration().getEnvironment().getDataSource().getConnection()); System.out.println("----2----"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration); session = sqlSessionFactory.openSession(); setDictionaryMapper = session.getMapper(TestMapper.class); vo = setDictionaryMapper.selectWord(1); System.out.println(vo); session.close(); } private static void addSqlMappings(Configuration conf, String mapperFilePath) { InputStream is = null; try { //is = new FileInputStream(mapperFilePath); is = Resources.getResourceAsStream(mapperFilePath); XMLMapperBuilder xmlParser = new XMLMapperBuilder(is, conf, "mapper.xml", conf.getSqlFragments()); xmlParser.parse(); } catch (IOException ex) { ex.printStackTrace(); } finally { if(is != null){ try { is.close(); } catch (IOException e) { } } } } }