데이터베이스 21

[Mybatis] <resultMap> 사용

나의 경우는, DB에서 컬럼명 규칙은 스네이크 표기법으로 file_bno 이런식으로 DB를 설정했고 JAVA는 카멜표기법으로 fileBno 이런식으로 했는데, 이렇게되면 서로 변수명이 달라서 set 매칭이 안되더라, 이럴때 방법은 여러개가 있는데 그중 하나 내가 생각한건 쿼리에서 별칭을 줘서 자바변수랑 동일하게 빼내는방법도 있는데 일회성같고 불편해서 구글링해보니 으로 사용하면 가능하다.. 또는 Mybaits .xml파일을 따로 생성해서 설정하는방법도 되는거같다 m.stock.domain.NoticesFileUploadVo" id="fileVo"> SELECT * FROM NOTICESFILE WHERE FILE_NOTICES_BNO = #{bno}

[Mybaits] <selectKey> 속성

SQL 수행작업 중 insert된 이후에 알 수 있는 값 또는, 생성된 값을 바로 가져와서 select 쿼리를 보내야 하는 경우가 있다. 주로 생성하고 난 후의 인덱스(번호)를 가져와 작업해야 하는 상황에서 많이 사용한다. 이런경우 java에서 insert 쿼리를 실행하고 값을 받은 후 값을 가지고 다시 쿼리를 DB에 전송하는 방법이 있다. 하지만, 불필요한 여러번의 DB 입출력은 시간이 느려진다는 단점이 있다. 그때, selectKey를 사용하여 바로 적용할 수 있다. 마이바티스, 아이바티스 두개 다 적용이 가능하다. selectKey는 DB에 명령을 한번만 보내며, 우선 입력한 값의 결과값을 다음 쿼리로 바로 return 시켜주는 것이다. 아래 예제는 selectKey의 기본 사용법이다. SELECT..

[Mybaits] 마이바티스 #{}과 ${}의 차이

ex) (ID = admin) ▶ mybatis mapper SELECT ID FROM test WHERE ID = #{ID} Oracle로 넘어온 쿼리 SELECT ID FROM test WHERE ID = ? 실제 수행 쿼리 SELECT ID FROM test WHERE ID = 'admin' ▷'$'란? Statement를 의미합니다. ex) (num = 77) ▶ mybatis mapper SELECT ID FROM test WHERE num= ${num} Oracle로 넘어온 쿼리 SELECT ID FROM test WHERE num = 77 실제 수행 쿼리 SELECT ID FROM test WHERE num = 77 ▷ '#'과 '$'의 차이 '#'을 사용하게 된다면 오라클에서 변수를 바인드..

[Oracle] Sequence 증가이상

증상: sequence 생성 이후 seq_name.nextval로 생성되는 숫자가 1, 2, 3 으로 순차적으로 증가하는 것이 아니라 10, 20씩 늘어나는 경우가 있다. 이유: sequence에 cache 옵션이 선택되었기 때문이다. cache 옵션을 사용하면 속도를 증가시키기 위해 sequence 번호를 한 번에 여러 개씩 메모리에 올려놓고 작업을 한다. 이것을 사용하면 매번 sequence 번호를 생성하는 것보다 빠르기 때문이다. 이러한 경우에 DB를 중지시키거나 전원이 off 되는 경우에 메모리에 있던 번호가 삭제되기 때문에 이러한 증상이 발생된다. 즉 cache 옵션이 20개씩 시퀀스 번호를 생성하도록 설정되어 있다면 한번에 1부터 20까지 시퀀스 번호를 생성한다. 이 상태에서 DB를 중지하고 ..

[Oracle] 오라클 SELECT문 별칭(Alias)

연산은 그렇다 쳐도 별칭은 아주아주 많이 쓰이고 중요하기 때문에 꼭 알고 넘어가도록하자. -연산 Oracle SELECT 쿼리문으로 데이터를 불러올때 연산이 가능하다. SELECT first_name,family_name, salary/10000 FROM test 이런식으로 숫자로 이루어진 컬럼에 연산을 가해 불러올수있다. 하지만 이런식으로 사용할경우 컬럼명이 salary 가 아니라 salary/10000 이라는 컬럼명으로 불러와지는 현상을 볼 수 있는데 이걸 해결하기 위해서 별칭(AS)을 사용하면 된다. (물론 as 로 소문자로도 사용 가능하다, 그리고 생략 역시 가능한데 웬만해서는 써주는게 좋다. 가독성 좋게) -별칭(Alias) - SELECT [컬럼명] AS [별칭] FROM [테이블명] SELE..

데이터베이스 2021.03.09

[Mybatis] 마이바티스 parameterType와 resultType차이

프로젝트를 하면서 프론트단에서 동적으로 무작위로 변경되는 데이터를 검색해주려 할때 어떤방식으로 쿼리에 데이터를 넣어야 될지 고민하고 있을떄 스프링에선 @RequestParam 으로 무작위된 데이터를 String stk_nm 이란 변수에 매핑을 해서 넣어주고 , 마이바티스에선 parameterType 속성을 사용해서 string 값의 파라미터가 들어올거다 하고 알려준것이다 1 2 3 4 5 6 7 public List GetNewsLiST(@RequestParam("stknm")String stk_nm){ log.info(service.getNewsList(stk_nm)); return service.getNewsList(stk_nm); } Colored by Color Scripter cs 1 2 3 s..

[Mybatis] 마이바티스 에서 #{}과 ${}의 차이

1. #는 쿼리가 수행될때 아래와 같이 된다 1 2 3 4 5 6 7 8 9 SELECT * FROM USER WHERE col = ? parameter : [값] cs ?에 bind된 값이 들어가게된다. 이쿼리의 컴파일된 내용을 재사용할수 있고, 파라미터에 따라 대입해주므로 효율적 내부적으로 preparedStatement 객체에서 ? 에 들어갈 파라미터의 값을 set 해줌으로써 사용이 된다. * preparedStatement는 한번 수행한 쿼리를 캐싱하는 객체 사용 용도 >> #일 경우, 값에 사용한다. 2. $는 쿼리가 수행될 때, 다음과 같이 된다 사용 용도 >> $일 경우는 컬럼명이 동적으로 바뀌어야 할 때 사용한다. 또는 테이블명. myBatis : ${컬럼명} = #{값} iBatis : ..

[Oracle] 오라클 데이터 타입

* 오라클컬럼의 데이터 타입형 데이터 유형 데이터형 설명 문자형 CHAR(n) 고정 길이 문자. 최대 2000byte (디폴트 값 1byte) 문자형 VARCHAR2(n) 가변 길이 문자. 최대 4000byte (디폴트 값 1byte) 오라클에서 한글은 한글자에 3byte , 영어or특수문자는 1byte 차지한다 숫자형 NUMBER[ (p, [s])] p (1~38 디폴트값은 38)와 s (-84~127 디폴트값은 0) 십진수 기준 날짜형 DATE BC 4712년 1월 1일 부터 9999년 12월 31일까지 년,월,일,시,분,초까지 입력가능 1 2 select vsize('가나다') as byteSize from dual Colored by Color Scripter cs CHAR 와 , VARCHAR2..