2016년 11월 22일 화요일

mybatis mapper 동적 설정


spring 등 여타 framework 에서 sql query xml 을 mybatis 에 설정 하는 방법은
@MapperScan annotation 을 활용하거나 mybatis 의 scan 등을 활용해 mapper 를 손쉽게 설정 할 수 있다.

하지만 독립적으로 mybatis 를 사용하면서 로직에 따라 동적으로 mapper 를 등록해야 하는 일이 생겼는데 
공식 reference site 에 딱히 방법이 나와 있지 않아 난감해진적이 있었다.
그때 해결했던 이력을 남겨본다.

핵심만 말하자면
mybatis 라이브러리안에 XMLMapperBuilder 라는 class 를 활용해 해결할 수 있다.

아래는 test 했던 난잡한 sample code 이다. 그래도 작은 도움은 될거라 생각된다.

/**
 * Created by fall1999y on 2016. 6. 23..
 */

public class SessionFactoryProvider {
    private static final String mapperFiles[] = {"mybatis/sql/testsql.xml", "mybatis/sql/samplesql.xml"};

    public SqlSessionFactory produceFactory() {
        String resource = "mybatis/mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {

            throw new RuntimeException("Fatal Error.  Cause: " + e, e);
        }
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        for (String mapperFile : mapperFiles) {
            InputStream in = getClass().getClassLoader().getResourceAsStream(mapperFile);
            Configuration configuration = sqlSessionFactory.getConfiguration();
            if (in != null) {
                XMLMapperBuilder xmlMapperBuilder = new XMLMapperBuilder(in, configuration, mapperFile, configuration.getSqlFragments());
                xmlMapperBuilder.parse();
            } else {
                System.err.println("Error file not loaded " + mapperFile);
            }
        }
        return sqlSessionFactory;
    }

    public static void main(String[] args) {
        SessionFactoryProvider provider = new SessionFactoryProvider();
        SqlSessionFactory factory = provider.produceFactory();
        SqlSession s = factory.openSession();

        TestMapper mapper = s.getMapper(TestMapper.class);
        System.out.println(mapper.selectTestTable());
        SampleMapper sampleMapper = s.getMapper(SampleMapper.class);
        System.out.println(sampleMapper.selectSampleTable());
    }
}


참고로 아래는 독립적인 mybatis 에서 xml scan 하는 설정이다. (mybatis.xml)
<mappers>
    <package..
부분만 보면 이해가 가능하다.

<?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>
    <properties resource="properties/db.properties" />
    <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>
        <environment id="development2">
            <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>
        <package name="net.vjvj.mapper"/>
    </mappers>
</configuration>

2016년 8월 17일 수요일

mac 맥 에서 finder(탐색기) 단축키 지정

mac 에선 windows 처럼 finder(탐색기)를 바로 호출하는 단축키가 없다.
alfred 의 workflows 를 이용하면 단축키(ctrl+option+e) 를 생성할수 있다.

Alfred Preferences -> Workflows -> 좌측하단 + 버튼 -> Templates -> Files and Apps -> Lunch file group from hotkey 를 선택하면 추가되는 화면이 아래와 같다.


아래와 같이 설정 하면 된다.


hotkey 부분 설정



Launch Apps / Files 부분 설정 (finder 를 단축키로 열었을때 기본으로 열리게 할 디렉터리를 finder 에서 drag and drop 으로 추가)






2016년 8월 1일 월요일

chrome 주소창 focus 상태에서 page focus 이동

크롬에서 페이지 주소를 입력할때 command + L (mac  기준) 을 입력하면
주소창으로 포커스가 이동된다.


주소창에 포커스가 있을때 이걸 다시 page 포커스로 이동 시키는 마땅한 단축키가 없다.
이때 주소창 상에
javascript: 라고 입력하면 다시 page 로 focus 가 이동한다.




크롬 검색엔진 을 이용한 약간의 트릭으로 단축키 처럼 같은 기능을 구현할 수 있다.

⌘ + , (설정) > 검색 > 검색엔진 관리 > 기타 검색엔진  에서
새 검색엔진을 등록 하면된다.

예:) [새 검색엔진추가]        [키워드]            [URL]
       포커스                        ff                       javascript:


위 와 같이 등록하고 ff 만 입력하면 위에서 설명한 javascript: 를 입력한 기능과 같은 기능을 실행한다.




맥 키보드 단축키로 창 이동 및 창 크기 조정

Window Wrangler

활성창을 이동 시키거나 크기를 조절할때 마우스를 사용해야만 하는데
위 유틸리티를 사용하면 키보드 만으로 쉽게 창 제어가 가능

(유틸을 사용하지 않고 맥 기본 기능으로 할 수 도 있지만 시끄럽고 매끄럽지 않음 - voiceover 활용)

Spectacle

창의 크기를 단축키 하나로 좌측 50% 우측 50% 상단 50% 창크기 최대 등 설정된 크기로 지정할수 있고
활성창을 다른 모니터로 옮기는데 유용


위 두 유틸을 사용하여 창 관련 거의 모든 제어는 windows os 처럼 할 수 있음

두 유틸다 권한이 필요하기 때문에

시스템 환경설정 > 보안 및 개인 정보 보호 > 손쉬운 사용 의 우측 영역에 해당 app check 


※ windows 에서 창을 오른쪽 화면 끝으로 끌어다 놓으면 창의 크기가 우측 50%가 되는 기능이 있는데
이것은 tuck 이라는 util 을 사용하면 되나 
키보드로 다되는 기능이라 
딱히 필요 하진 않아서 사용하지는 않음


위 사이트에 tuck 이라는 util (기타 util 도 괜찮아 보이지만 유료인듯해 사용하지는 않음)






 

2016년 7월 30일 토요일

맥 - 마우스 우클릭 단축키 만들기 (windows context menu key)

일반 배열 키보드나 맥북이 아닌 대다수의 노트북 키에는 있는
Context Menu Key(보통 우측 alt 키 또는 우측 윈도우키 오른쪽에 위치) 가 있고 이 키는 마우스 우클릭 했을때의 기능을 한다.
이미지 출처 : http://scls.typepad.com/.a/6a00d8341d32e053ef010536ce6920970b-800wi
이미지 출처 : 구글이미지검색 http://i.stack.imgur.com/szIYh.png


하지만 맥에서는 딱히 이 기능을 가진 키도 없고 단축키도 없다.

위 기능을 구현하는 방법중에 하나는 karabiner 를 사용하면 된다.
karabiner 의 private.xml (http://blog.vjvj.net/2016/05/os-x_16.html) 에

<autogen>__KeyToKey__ KeyCode::RETURN, ModifierFlag::OPTION_R, PointingButton::RIGHT</autogen>

위 코드를 추가하면
우측  option 키 + return 를 치면 context menu key 의 역할을 하는 단축키를 만들어 낼수 있다.


--- 추가
너무 쉽게 생각한듯하다.
위 방법은 포커스가 가 있는 곳의 우클릭 기능을 하지 않고
현재 마우스 위치 있는곳에서 우클릭 기능을 한다.

가령 포커스는 파인더에 가 있어도 마우스 커서는 크롬에가 있다면
마우스 우클릭 기능은 크롬에서의 마우스 우클릭을 한것처럼 된다.

그래서 alfred 에서 관련 workflow 를 만들어논 것을 찾았다.
http://www.alfredforum.com/topic/3147-rightclick-%E2%80%94-do-a-right-click-on-finder-files-with-the-keyboard/

option + \  키로 맵핑했다.
위 워크플로우는 finder 에서는 잘되는데 다른곳에는 잘 안된다.


그래서 당분간 더 좋은 방법을 찾기전까진 두 방법을 상호보완적으로 사용해야할것 같다.




2016년 7월 13일 수요일

[Intellij] Always Select Opend File / 구 Auto Scroll from Source (eclipse Link With Editor 와 유사한 기능)


eclipse Link With Editor
이클립스 에디터에서 소스를 작성하거나 할때 navigation 이 에디터의 소스 위치로 이동하는 기능



이미지 출처 : http://ddoong2.com/739

------------------

intellij 에서도 위와 유사한 기능을 제공하고 있다.

2019.3 이후 명칭
Always Select Opened File


-------------------

2019.3 이전 명칭
Autoscroll from Source


navigation 에서 상단 톱니바퀴 모양의 아이콘을 클릭하면 위와 같은 패널이 나오고
위 패널의 메뉴중 "Autoscroll from Source" 를 선택하면 설정이 완료된다.

2016년 7월 12일 화요일

intellij 단축키 Jump to Source

Intellij Project Navigation (단축키 cmd + 1) 에서 파일을
열때 보통 enter 키로 여는데 이렇게 열면 커서(포커스)가 계속  Project Navigation 에 남아 있는다.
이게 유용할때도 있지만(연속적으로 파일을 훑어볼때..) 파일을 열고 코딩을 하려면 최소 esc키를 한번 누른 후 또는 Project Navigation을 닫은 후에 코드를 작성할 수 있다.



파일을 열고 바로 코드를 작성하려 할때 이때 사용하는 단축키가
Main menu > View > Jump to Source 이다
기본 단축키는 cmd  + ↓  or f4 키 이지만 좀더 활용도를 높이기 위해 cmd + enter 추가했다.
cmd + enter 키는 다른 단축키에 할당이 되어있지만 project navigation 상에는 할당되어 있지않아
사용가능하다.

Intelij 설정 및 plugin

1. preferences... (settings...) Appearance & Behavior > Appearance - Window Options        ✓   Show memory indicator Editor ...