'Spring Framework' 카테고리의 다른 글
log4jdbc-remix 설정 (0) | 2014.08.01 |
---|---|
jstl fn 문자열 함수 (0) | 2014.07.28 |
스마트 에디터 (0) | 2014.07.22 |
페이징 (0) | 2014.07.16 |
[Mybatis] XML 파일에 부등호 포함 쿼리 넣을 때 주의점. (0) | 2014.07.07 |
log4jdbc-remix 설정 (0) | 2014.08.01 |
---|---|
jstl fn 문자열 함수 (0) | 2014.07.28 |
스마트 에디터 (0) | 2014.07.22 |
페이징 (0) | 2014.07.16 |
[Mybatis] XML 파일에 부등호 포함 쿼리 넣을 때 주의점. (0) | 2014.07.07 |
https://code.google.com/p/log4jdbc-remix/ -> 현재 remix 프로젝트는 종료가 되었다.
https://code.google.com/p/log4jdbc-log4j2/ -> remix 프로젝트에서 사용을 추천하는 것
log4jdbc-remix 설정 방법
http://hnsnmn.blogspot.kr/2014/02/spring-sql.html
SQL Log 직관적으로 볼수 있는 방법이 존재하지 않을까 해서 구글링 해보니 역시나..ㅋㅋog4jdbc-remix 입니다. 설치전에 집고 넘어가야 하는 부분이 있는데, maven repository와 jdk 1.6에서만 지원 가능합니다. 이점 유의하시고 진행해야 될거 같네요. 설치법은 우선 간단합니다.
log4j, slf4j, log4jdbc, log4jdbc-remix를 다운 받아서 클래스 패스 설정을 하시면 됩니다. log4jdbc, slf4j, log4jdbc : http://code.google.com/p/log4jdbc/ log4jdbc-remix : http://code.google.com/p/log4jdbc-remix/ 이렇게 lib파일을 등록 했으면 이제 log4j.xml 설정을 합니다.
좀 다른 부분이 logger name이 기존하고는 좀 다른것을 확인하실 수 있을겁니다. 다음으로는 applicationContext.xml에서 dataSource를 변경합니다.
http://beyondj2ee.tumblr.com/post/14507640070/spring-powerful-sql
(1) Maven인 경우
<dependency>
<groupId>org.lazyluke</groupId>
<artifactId>log4jdbc-remix</artifactId>
<version>0.2.4</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>
(2) classpath로 설정 하는 경우
log4j, slf4j, log4jdbc, log4jdbc-remix를 다운 받아서 클래스 패스 설정을 하시면 됩니다.
log4jdbc, slf4j, log4jdbc : http://code.google.com/p/log4jdbc/
log4jdbc-remix : http://code.google.com/p/log4jdbc-remix/
log4j.xml 설정 하기
<?xml version=”1.0” encoding=”UTF-8”?>
<!DOCTYPE log4j:configuration PUBLIC “-//LOGGER” “log4j.dtd”>
<log4j:configuration xmlns:log4j=”http://jakarta.apache.org/log4j/”>
<appender name=”console” class=”org.apache.log4j.ConsoleAppender”>
<param name=”Target” value=”System.out” />
<layout class=”org.apache.log4j.PatternLayout”>
<param name=”ConversionPattern”
value=”[%d{yyyy-MM-dd HH:mm:ss}] %-5p: %c - %m%n” />
</layout>
</appender>
<logger name=”jdbc.resultsettable” additivity=”false”>
<level value=”info” />
<appender-ref ref=”console” />
</logger>
<logger name=”jdbc.audit” additivity=”false”>
<level value=”warn” />
<appender-ref ref=”console” />
</logger>
<logger name=”jdbc.resultset” additivity=”false”>
<level value=”warn” />
<appender-ref ref=”console” />
</logger>
<logger name=”jdbc.sqltiming” additivity=”false”>
<level value=”warn” />
<appender-ref ref=”console” />
</logger>
<!— Root Log Level —>
<root>
<priority value=”info” />
<appender-ref ref=”console” />
</root>
</log4j:configuration>
Spring Datasource 설정 하기
<!— datasource —>
<jdbc:embedded-database id=”hsqlDataSource”
type=”HSQL”>
<jdbc:script location=”classpath:schema.sql” />
</jdbc:embedded-database>
<!— sql spy —>
<bean id=”dataSource” class=”net.sf.log4jdbc.Log4jdbcProxyDataSource”>
<constructor-arg ref=”hsqlDataSource” />
<property name=”logFormatter”>
<bean class=”net.sf.log4jdbc.tools.Log4JdbcCustomFormatter”>
<property name=”loggingType” value=”MULTI_LINE” />
<property name=”margin” value=”19” />
<property name=”sqlPrefix” value=”SQL:::” />
</bean>
</property>
</bean>
http://goodwilldd.blogspot.kr/2012/06/mybatis-query.html
myBatis query 로그 출력하기
myBatis 의 query를 콘솔에 찍는 많은 방법이 있지만
사용해본 것 중에 가장 간단하고 편한 방법을 소개하고자 한다.
log4jdbc-remix(log4jdbc 를 참고) 라는 것이다.
설정하는 방법은 다음과 같다.
<!-- log4jdbc -->
<dependency>
<groupId>org.lazyluke</groupId>
<artifactId>log4jdbc-remix</artifactId>
<version>0.2.7</version>
</dependency>
위 내용을 pom.xml 에 추가한다.
다음에는 2가지 방법이 있는데, 편한 방법으로 적용하면 된다.
우선 공통 적용 사항은 log4j.xml에
<logger name="jdbc.resultsettable" additivity="false">
<level value="info" />
<appender-ref ref="console" />
</logger>
resulttable을 보여주는 부분
<logger name="jdbc.sqlonly" additivity="false">
<level value="info" />
<appender-ref ref="console" />
</logger>
쿼리를 출력하는 부분(debug로 설정하면 자세히 나온다)을 추가한다.
해당 부분에 대한 자세한 내용은 log4jdbc set up your logger 를 참고한다.
첫 번째, 방법은 jdbc.properties를 다음과 같이 변경한다.
jdbc.driverClass=net.sf.log4jdbc.DriverSpyjdbc.url=jdbc:log4jdbc:mysql://000.000.000.000:3306/xxxx
jdbc.username=xxxx
jdbc.password=xxxx
두 번째, 방법은
<bean id="logDataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
<constructor-arg ref="기존DATASOURCE ID" />
<property name="logFormatter">
<bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
<property name="loggingType" value="MULTI_LINE" />
<property name="sqlPrefix" value="SQL:::" />
</bean>
</property>
</bean>
변경 후, myBatis 설정에서 기존에 datasource id를 logDataSource 로 변경해주는 방법이다
SecurityContextHolder 와 SecurityContext에 대한 개념 (0) | 2014.08.06 |
---|---|
jstl fn 문자열 함수 (0) | 2014.07.28 |
스마트 에디터 (0) | 2014.07.22 |
페이징 (0) | 2014.07.16 |
[Mybatis] XML 파일에 부등호 포함 쿼리 넣을 때 주의점. (0) | 2014.07.07 |
fn:contains(string, sbustring)
string이 substring을 포함하면 return True
fn:containsIgnoreCase(string, sbustring)
대소문자 관계없이 string이 substring을 포함하면 return True
fn:endsWith(string, suffix)
string이 suffix로 끝나면 return True
fn:escapeXml(string)
stting에 XML과 HTML에서 특별한 의미를 가진 문자들이 있으면,
XML엔티티 코드로 바꿔준뒤 문자열 반환
fn:indexOf(string, sbustring)
string에서 substring이 처음으로 나타나는 인덱스 반환
fn:join(array, separator)
array요소들을 separator를 구분자로 하여 연결해서 반환
fn:length(item)
item이 배열이나 컬렉션이면 요소의 객수를 문자열이면 문자의 객수를 반환
fn:replace(string, before, after)
string내에 있는 before 문자열을 after 문자열로 모두 변경해서 반환
fn:split(string, separator)
string내의 문자열 separetor에 따라 나누어서 배열로 구성해서 반환
fn:startsWith(string, prefix)
string이 prefix로 시작하면 return True
fn:substring(string, begin, end)
string에서 begin인덱스에서 시작해서 end인덱스에 끝나는 부분의 문자열 반환
fn:substringAfter(string, sbustring)
string에서 substring이 나타나는 이후의 문자열 반환
fn:substringBefore(string, sbustring)
string에서 substring이 나타나는 이전의 문자열 반환
fn:toLowerCase(string)
string을 모두 소문자로 바꿔 리턴
fn:toUpperCase(string)
string을 모두 대문자로 바꿔 리턴
fn:trim(string)
string앞뒤의 공백을 모두 제거하여 반환
=================================================
2010-12-25
${fn:substring(bean.mem_bir, 0, 4) } = 2010
${fn:substring(bean.mem_bir, 5, 7) } = 12
${fn:substring(bean.mem_bir, 8, 10) } = 25
${fn:substringBefore(bean.mem_mail, '@') } = thdnf1004
${fn:substringAfter(bean.mem_mail, '@') } = nate.com
SecurityContextHolder 와 SecurityContext에 대한 개념 (0) | 2014.08.06 |
---|---|
log4jdbc-remix 설정 (0) | 2014.08.01 |
스마트 에디터 (0) | 2014.07.22 |
페이징 (0) | 2014.07.16 |
[Mybatis] XML 파일에 부등호 포함 쿼리 넣을 때 주의점. (0) | 2014.07.07 |
log4jdbc-remix 설정 (0) | 2014.08.01 |
---|---|
jstl fn 문자열 함수 (0) | 2014.07.28 |
페이징 (0) | 2014.07.16 |
[Mybatis] XML 파일에 부등호 포함 쿼리 넣을 때 주의점. (0) | 2014.07.07 |
페이징 로직 (0) | 2014.07.07 |
페이징에 필요한 요소
pageNo
현재 페이지
limitList
한 페이지당 보여줄 글의 개수
block
현재 페이지의 블럭
ex. 현재 페이지가 20페이지면 블럭은 두번째 블럭
[11][12][13][14][15][16][17][18][19][20] <- 2번째 블럭
limitPage
한 블럭에 보여줄 페이지의 개수
totalCount
총 레코드의 개수
페이징 하기
현재 상태
pageNo = 1;
block = 1;
totalCount = 100;
limitList = 10;
limitPage = 10;
1. 현재 페이지에서 현재 블럭 구하기
block = ceil(pageNo/limitPage);
* ceil 올림 함수
2. 현재 블럭의 시작 페이지와 끝 페이지
// 시작 페이지 - 1블럭일때 1, 2블럭일때 11
startPage = (block-1)*limitPage + 1;
// 끝 페이지 - 마지막 블럭에서 페이지가 총 페이지 수 보다 커지면 안됨
endPage = startPage + limitPage - 1;
if(endPage > totalPage) endPage = totalPage;
3. 총 페이지 수 구하기
totalPage = ceil(totalCount/limitList);
4. 페이지 출력하기
for (i = startPage; i <= endPage; i++) {
if(pageNo == i) i //진하게 출력하기
else i // 나머지들은 그냥 출력
}
5. 블럭 이동
[prev] 1 2 3 4 5 6 7 8 9 10 [next]
// 현재의 블럭이 최소 블럭인지 검사
if(block <= 1) "";
else [prev];
// 현재의 블럭이 마지막 블럭인지 검사
totalBlock = ceil(totalPage/limitPage);
if(block >= totalBlock) "";
else [next];
6. DB에서 가져오기
select * from board order by no desc limit start, limitList;
// startRow와 limitList를 설정해 주어야함.
startRow = (page -1) * limitList;
가상 글 번호 뿌려주기
<c:forEach items="${board_list}" var="list" varStatus="status">
<c:out value="${총글개수-((현재페이지번호-1)*페이지당글개수+status.index)}"</c:out>
</c:forEach>
log4jdbc-remix 설정 (0) | 2014.08.01 |
---|---|
jstl fn 문자열 함수 (0) | 2014.07.28 |
스마트 에디터 (0) | 2014.07.22 |
[Mybatis] XML 파일에 부등호 포함 쿼리 넣을 때 주의점. (0) | 2014.07.07 |
페이징 로직 (0) | 2014.07.07 |
XML 파일에 부등호를 포함한 쿼리를 넣을 때 에러가 발생한다.
The content of elements must consist of well-formed character data or markup.
쿼리를 <![CDATA[]]> 내에 쓰면 해결 된다.
ex)
<select id="select_board_list" parameterType="map" resultType="kr.co.kkh.model.BoardBean" >
select * from table_name
where
column_name1 < 10 에러 발생
</select>
해결:
<select id="select_board_list" parameterType="map" resultType="kr.co.kkh.model.BoardBean" >
select * from table_name
where
<![CDATA[ column_name1 < 10 ]]>
</select>
혹은
<select id="select_board_list" parameterType="map" resultType="kr.co.kkh.model.BoardBean" >
select * from table_name
where
column_name1 < 10
</select>
> (>), < (<) 도 사용 가능하다
log4jdbc-remix 설정 (0) | 2014.08.01 |
---|---|
jstl fn 문자열 함수 (0) | 2014.07.28 |
스마트 에디터 (0) | 2014.07.22 |
페이징 (0) | 2014.07.16 |
페이징 로직 (0) | 2014.07.07 |
리스트에서 빠질 수 없는게 페이징 시스템입니다…
[1][2][3][4][5][6][7][8][9][10]
위와 같은 페이지를 누름으로써 그에 대한 리스트만 출력하는 것이지요…
이렇게 하는 이유는 전체의 리스트를 화면에 다 보여준다면 빨리 찾을 수도 없고
속도 또한 느립니다. 그래서 페이지로 구분해놓으면 찾아가기 싶게 됩니다..
여기서는 가장 기본적인 개념으로 페이징 시스템을 구현하겠습니다….
방법은 여러가지니깐 여러 각도로 시도해보는 것도 좋을 듯 합니다….
페이징 시스템에서 필요로 하는 것이
1. 현재 페이지
2. 현재 페이지의 블럭
(블럭은 페이지가 속해있는 그룹입니다. 예를 들어서 한 블럭에는 10페이지가 들어가는데 현재의
페이지가 20 페이지 라면 블럭은 두번째 블럭으로 선택이 됩니다.. 그럼 표시는
[11][12][13][14][15][16][17][18][19][20] 으로 되겠죠…
이렇게 하는 이유는 페이지 또한 무한히 많을 수 있기 때문에 페이지 자체의 페이징 시스템을
만드는 거죠. 그것이 블럭입니다. )
3. 전체 행의 개수
(이것을 알아야지만 현재 페이지가 속해 있는 블럭을 계산 할 수 있습니다. )
4. 현재 페이지의 블럭에서 시작페이지와 끝 페이지
(숫자 더하기, 빼기 계산만 하면 되기 때문에 특별한 건 없습니다.)
5. 한 페이지에 보여질 리스트 수 (limitList)
한 블럭에 보여질 페이지 수 (limitPage)
(위의 두가지가 있어야지 전체적인 계산이 됩니다… ^^ )
이상 위의 다섯가지로 일단은 페이지 시스템에 대해서 보여지는 것이 가능하구여
이제 가상으로 페이징 시스템을 만들어 보겠습니다…
1. 현재의 페이지 : 1페이지
2. 현재의 블럭 : 1블럭
3. 전체 행의 개수(total) : 100
4. limitList : 10, limitPage : 5
이렇게 네개의 구성요소로서 시작을 합니다….
리스트가 젤 처음 보여질 때 페이징 시스템은 1블럭의 1페이지를 가리키고 있어야 합니다..
1. 현재 페이지에서 현재 블럭구하는 방법
=> ceil 함수는 만약 숫자가 4.5라고 하면 올림을 하여 5가 되게 하는 함수입니다.
2. 현재 블럭의 시작 페이지와 끝 페이지
// 현재 블럭이 1블럭이라면 1이지만 2 블럭일때는 11이 되어야 합니다
// 마지막 블럭에서 페이지가 총페이지 수 보다 커지면 안되기 때문에
// 미리 총 페이지 수를 구해서 큰지 확인해줍니다.
if (
3. 총 페이지 수 구하는 방법
4. 그럼 페이징 시스템을 출력하는건 간단하죠…
for (
{
if (
else echo “[$i]“;
}
현재 페이지는 찐하게 표시해줍니다. 그럼 기본적인 페이지 표시 시스템이 끝이 납니다.
설마 여기서 끝내는건 아니겠죠.. ^^
아까 블럭이란걸 만들었기 때문에 블럭 자체도 이동할 수가 있어야 겠습니다..
보통 게시판에 보면 ◀, ▶ 이런 화살표로 표시 되거나 prev, next 라는 말로 표시되거나 합니다.
[prev] 1 2 3 4 5 6 7 8 9 10 [next]
그래서 블럭을 옮길 수 있게 됩니다..
1. 현재의 블럭이 어딘지 알고 그 앞에 블럭이 있는지 뒤에 블럭이 있는지를 계산해서 표시합니다
현재 블럭은 위에서 구했기 때문에 넘어가구여
// 현재의 블럭이 앞에 있는 아닌지 검사
if ($block <= 1) echo "";
else echo “[prev]“;
// 위의 페이징 시스템 표시
// 마지막 블럭인지 아닌지 검사
if (
else echo ["next"];
위와 같이 쉽게 구할 수 있습니다. 이건 완전히 산수네요.. ㅋㅋㅋ
이제 페이징 시스템의 마지막 단계가 남았습니다..
디비 관련 작업입니다.. ^^
정렬한 것에 대해서 그 페이지에 맞는 내용을 가져와야 하기 때문에
여기서는 디비 쿼리 명령중 limit라는게 사용됩니다.
예 : select * from test order by groupNum desc, listNum asc limit
젤 마지막에 변수 두개만 설정 해주면 되는데요,,
두가지 옵션은 처음에는 시작되는 row의 번호구여, 뒤에꺼는 몇개를 얻어올껀지 입니다
0, 5 하면 0번째에서 5개행을 얻어온다는 소리하고 같죠.. ^^
마지막 $limitList는 아까 위에 있는 변수랑 같은 거기 때문에 그 대로 주시면 되구여
$start만 계산하면 됩니다..
계산하는 방법은 1페이지 일때 1에서 10, 2 페이지 일때 11에서 20 이런식으로 된다면
디비에서 row는 0부터 시작하기 때문에 0에서 9, 10에서 19 이런식으로 됩니다. 하나 작죠.. ^^
그럼 어떻게 계산을 하느냐…
(
어디서 많이 본 공식인데..ㅋㅋ 저위에 보면 블럭의 시작페이지 구하는 공식하고 비슷한데
+1 이 빠졌네요 .. 왜 그렇냐면 1씩 작으니깐요.. ^^ 그래서 +1을 해 줄 필요가 없죠….
그래서
select * from test order by groupNum desc, listNum asc limit 0, 10;
하면 0번째 행에서 10개의 행을 얻어오는것이니 바로 리스트에 적용할 수 있겠죠..
리스트 화면에서는 이것에 대한 처리만 해주면 되구여… ^^
약간씩 복잡해 보일 수도 있지만 실상은 더하기 빼기밖에 없네요.. ^^
우리 모두 게시판을 누워서 떡 먹듯 다루는 그 날까지.. 화이팅.. ^^
ps . 예전에 개발해본적이 있는데 jsp로 다시 할라니 조금 헤멧넹…
암튼 이런 자주 사용하는 로직은 정리가 필수다..
log4jdbc-remix 설정 (0) | 2014.08.01 |
---|---|
jstl fn 문자열 함수 (0) | 2014.07.28 |
스마트 에디터 (0) | 2014.07.22 |
페이징 (0) | 2014.07.16 |
[Mybatis] XML 파일에 부등호 포함 쿼리 넣을 때 주의점. (0) | 2014.07.07 |