[applicationContext.xml]


<!-- ibatis -->
 <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
  <property name="configLocation">
   <value>classpath:sql/SqlMapConfig.xml</value>
  </property>
  <property name="dataSource" ref="dataSource"></property>
 </bean>
 
 <bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
  <property name="sqlMapClient" ref="sqlMapClient"/>
 </bean>

<bean id="transactionManager"
  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource" />
</bean>




[HelloDaoImpl.java]

 


import java.sql.SQLException;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.ibatis.SqlMapClientTemplate;
import org.springframework.stereotype.Repository;

import com.tistory.devdiaries.dto.Test;

@Repository("helloDaoImpl")
public class HelloDaoImpl implements HelloDao {

 @Autowired
 SqlMapClientTemplate sqlMapClientTemplate;
 
 public void setSqlMapClientTemplate(SqlMapClientTemplate sqlMapClientTemplate) {
  this.sqlMapClientTemplate = sqlMapClientTemplate;
 }

 Test test;
 
 @Override
 public List<Test> getTestList() throws SQLException {
  
  return (List<Test>)sqlMapClientTemplate.queryForList("HelloSql.getTestList", test);
 }
 
}





완전 모바일처럼 보이기 위한 북마크 URL 스크립트


1. 북마크를 연다

2. 북마크 추가를 눌러 URL 부분에 하단 스크립트를 삽입하여 저장한다

3. 북마크에 추가된 페이지를 누르면 끝



javascript: (function() {var d = document; if (d.getElementById('ifm_wrap')) {alert('이미 실행중입니다.'); return false; } var html = ''; html += '<!doctype html>'; html += '<html lang="en">'; html += '<head>'; html += '<meta charset="UTF-8">'; html += '<title>반응형 테스트</title>'; html += '<style>'; html += 'iframe::-webkit-scrollbar {'; html += 'width: 0px;'; html += 'height: 10px;'; html += '}'; html += 'html,body{margin:0;padding:0;background: transparent url("https://t1.daumcdn.net/cfile/tistory/270E724656EAD4052E") repeat;}'; html += '#ifm_wrap{margin: 80px auto 0; width: 360px; height: 640px; border: 3px solid #000; background-color: #000; border-radius: 30px; padding: 40px 0px;box-shadow:0 12px 25px rgba(0,0,0,0.25);position:relative;}'; html += '#ifm_wrap > .button{display: table;width: 100%;height: 3.5%;position: absolute;left: 0;bottom: 1%;} #ifm_wrap > .button p{width: 100%;height: 100%;display: table-cell;vertical-align: baseline;text-align: center;} #ifm_wrap > .button p span{display: inline-block;width: 30%;height: 100%;border:1px solid #7A7A7A;border-radius: 100px;background-color:#333;} #ifm_wrap.h{width: 640px;height: 360px;} #ifm_wrap.h > .button{width: 3.5%;height: 100%;left: auto;bottom: auto;right: 1%;} #ifm_wrap.h > .button p{width: 100%;height: 100%;text-align: left;vertical-align: middle;} #ifm_wrap.h > .button p span{width: 100%;height: 30%;}'; html += '#ifm_wrap.h{padding:0px 40px;}'; html += '#ifm_wrap .btn{display:block;}'; html += '#ifm_wrap,#rw{transition: all 0.35s ease-out;}'; html += '#rw{background-color: #fff}'; html += '#buttons{z-index:1;min-width:978px;text-align: center; padding: 10px; width: 100%; height: 30px; background-color: #f1f1f1; position: fixed; left: 0; top: 0; border-bottom: 1px solid #ccc;}'; html += '#buttons button{border: 1px solid #000; border-radius: 12px; padding: 2px 13px; background-color: #000; color: #fff;}'; html += '</style>'; html += '</head>'; html += '<body id="body">'; html += '<div id="buttons">'; html += '<button>360*640</button>'; html += '<button>320*533</button>'; html += '<button>320*598</button>'; html += '<button>360*640</button>'; html += '<button>400*640</button>'; html += '<button>400*683</button>'; html += '<button>320*568</button>'; html += '<button>320*480</button>'; html += '<button>384*640</button>'; html += '<button>439*585</button>'; html += '<button>%ED%9A%8C%EC%A0%84</button>'; html += '</div>'; html += '</body>'; html += ''; html += '</html>'; html += ''; document.write(html); d.body.insertAdjacentHTML('beforeend', '<div id="ifm_wrap"><div class="button"> <p id="dv_btn"> <span></span> </p> </div><iframe src="about:blank" id="rw" frameborder="0" scrolling="yes" style="overflow:hidden;margin: 0 auto;width:100%;height:100%;display: block;"></iframe></div>'); var ifrm = d.getElementById('rw'); ifrm.src = window.location.href; function ifr_resize(w, h) {var ifrm = document.getElementById('ifm_wrap'); var ifrm_style = ifrm.style; var getComputedStyle = window.getComputedStyle(document.getElementById('ifm_wrap'), null); if (w == '%ED%9A%8C%EC%A0%84') {var ori_res = (String(getComputedStyle.getPropertyValue('width')) + '*' + String(getComputedStyle.getPropertyValue('height'))).split('*'); ifrm_style.width = ori_res[1]; ifrm_style.height = ori_res[0]; if (ifrm.getAttribute('class') == 'null' || ifrm.getAttribute('class') == 'h') {ifrm.setAttribute('class', 'v'); } else {ifrm.setAttribute('class', 'h'); } } else {ifrm.setAttribute('class', ''); ifrm_style.width = w + 'px'; ifrm_style.height = h + 'px'; } } d.getElementById('buttons').addEventListener('click', function(e) {if (e.target && e.target.nodeName == 'BUTTON') {var size = e.target.innerText.split('*'); ifr_resize(size[0], size[1]); } }); d.getElementById('dv_btn').addEventListener('click', function(e) {if (e.target && e.target.nodeName == 'SPAN') {ifrm.contentWindow.location.reload(); } }); })();

'Common' 카테고리의 다른 글

[wallpaper] 눈편한 색  (0) 2016.01.29
한글 Putty  (0) 2015.01.06
Have a fun ! 해커 타이핑  (0) 2014.01.22
[스킨] 티스토리용  (0) 2013.11.01
[Window Error] werfault.exe 응용프로그램 오류  (0) 2013.05.20

MERGE [ hint ]
   INTO [ schema. ] { table | view } [ t_alias ]
   USING { [ schema. ] { table | view }
         | subquery
         } [ t_alias ]
   ON ( condition )
WHEN MATCHED THEN
UPDATE SET column = { expr | DEFAULT }
           [, column = { expr | DEFAULT } ]...
[ DELETE where_clause ]
WHEN NOT MATCHED THEN
INSERT [ (column [, column ]...) ]
VALUES ({ expr [, expr ]... | DEFAULT })


  • INTO : DATA가 UPDATE되거나 INSERT 될 테이블 또는 뷰를 지정.
  • USING : 비교할 SOURCE 테이블 또는 뷰나 서브쿼리를 지정, INTO절의 테이블과 동일하거나 다를 수 있다.
  • ON : UPDATE나 INSERT를 하게 될 조건으로, 해당 조건을 만족하는 DATA가 있으면 WHEN MATCHED 절을 실행하게 되고, 없으면 WHEN NOT MATCHED 이하를 실행하게 된다.
  • WHEN MATCHED : ON 조건절이 TRUE인 ROW에 수행 할 내용 (UPDATE, DELETE포함 될 수 있음)
  • WHEN NOT MATCHED : ON 조건절에 맞는 ROW가 없을 때 수행할 내용 (INSERT)


'Database > Oracle' 카테고리의 다른 글

[Error] 오라클 Error 모음  (0) 2014.08.04
[DB] 오라클 버전 정보 확인 쿼리  (0) 2014.08.04
[Oracle] SUBSTR, INSTR  (0) 2013.12.05
[OUTER JOIN] sql outer join  (0) 2013.12.04
Outer Join (LEFT, RIGHT, FULL OUTER JOIN)  (0) 2013.12.03



$('#chargeEmail3').change(function(){

$('#chargeEmail3 option:selected').each(function() {

if($(this).val() == 'self'){

$('#chargeEmail2').val('');

$('#chargeEmail2').attr("disabled", false);

} else if ($(this).val == 'select'){

$('#chargeEmail2').val('');

$('#chargeEmail2').attr("disabled", false);

} else {

$('#chargeEmail2').val($(this).text());

$('#chargeEmail2').attr("disabled", true);

}

});

});



<tr>

<th scope="row"><label for="chargeEmail">담당자  이메일</label></th>

<td>

<div class="item">

<input type="text" id="chargeEmail" name="chargeEmail" class="in_text" style="width:100px;" value="" maxlength="20" title="이메일 아이디" /> @

<input type="text" id="chargeEmail2" name="chargeEmail2" class="in_text" style="width:100px;" value="" maxlength="20" title="이메일 아이디" />

<select name="chargeEmail3" id="chargeEmail3" title="직접선택" style="width:160px;">

<option value="self">직접입력</option>

<option value="naver.com">naver.com</option>

<option value="hanmail.net">hanmail.net</option>

<option value="nate.com">nate.com</option>

<option value="daum.net">daum.net</option>

<option value="paran.com">paran.com</option>

<option value="gmail.com">gmail.com</option>

<option value="hotmail.com">hotmail.com</option>

<option value="yahoo.co.kr">yahoo.co.kr</option>

<option value="empal.com">empal.com</option>

<option value="lycos.co.kr">lycos.co.kr</option>

<option value="korea.com">korea.com</option>

<option value="dreamwiz.com">dreamwiz.com</option>

<option value="freechal.com">freechal.com</option>

</select>

</div>

</td>

</tr>

assertThat(name.length(), is(6))


assertThat 에서 지원하는 is() 메소드에서 int형을 parameter로 넣을 시, 에러나는 상황인데,

이부분은 


import static org.junit.Assert.*;

import static org.hamcrest.CoreMatchers.*;


위 패키지를 import 해주어야 한다.


Maven Spring dependency는 아래와 같이 추가하여야 한다.


JUnit - junit

<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.1</version> <scope>test</scope> </dependency>



Hamcrest Core - hamcrest-core

<dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-all</artifactId> <version>1.1</version> </dependency>


<dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> <version>1.1</version> </dependency>


maven 참고 url 

http://mavenhub.com/c/org/hamcrest/corematchers/dependency



 

  • 시나리오 환경
    TOMCAT 7.0 / JDK 1.7 / IBATIS / SPRING 3.0 / DBCP
  • 원인
    마지막으로 DB에 커넥션을 맺은 후 사용이 없다보니 데이터 베이스 커넥션의 부재
  • 해결책
    특정 시간마다 커넥션을 확인 하는 셋팅을 지정한다.

 

<bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.db1.driverClassName}" />
<property name="url" value="${jdbc.db1.url}" />
<property name="username" value="${jdbc.db1.username}" />
<property name="password" value="${jdbc.db1.password}" />

<!-- 특정시간 마다 validationQuery 실행 셋팅 -->
<property name="validationQuery" value="select 1" />
<property name="testWhileIdle" value="true" />
<property name="timeBetweenEvictionRunsMillis" value="7200000" />
<!-- // 특정시간 마다 validationQuery 실행 셋팅 -->
</bean>


혹은

<bean id="datasource" .. > 

...

<property name="validationQuery">

<value>SELECT 1</value>

</property>

<property name="testWhileIdle">

<value>true</value>

</property>

...

</bean>


참고 url - http://fbwotjq.tistory.com/entry/IBATIS-%EC%BB%A4%EB%84%A5%EC%85%98-%EC%97%90%EB%9F%AC



BufferedImage bimg = ImageIO.read(new File(filename));

int width          = bimg.getWidth();

int height         = bimg.getHeight();

'Server Enterprise > Java' 카테고리의 다른 글

[decompile] java decompiler  (0) 2014.12.30
[Encode] 한글 인코딩  (0) 2014.08.15
[Java] System.getProperty() 에 관하여  (0) 2013.06.14
Java 멤버와 변수에 대한 고찰  (0) 2013.01.08
POJO 개념  (0) 2013.01.05

java.io.FileNotFoundException: /usr/share/tomcat7/test.neli_webapps/uploads/2014/1394437663404_02_img.jpg (No such file or directory)

서버 오류 : uploads/ 폴더 권한을 tomcat 으로 줘야함

 

drwxr-xr-x 6 ec2-user ec2-user 4096 Mar 10 16:22 ROOT

drwxrwxr-x 2 ec2-user ec2-user 4096 Mar 10 16:46 uploads

$ sudo chown -R tomcat.tomcat *

 

drwxr-xr-x 6 tomcat tomcat 4096 Mar 10 16:22 ROOT

drwxrwxr-x 2 tomcat tomcat 4096 Mar 10 16:46 uploads


if (navigator.userAgent.match(/iPad/) == null && navigator.userAgent.match(/iPhone|Mobile|UP.Browser|Android|BlackBerry|Windows CE|Nokia|webOS|Opera Mini|SonyEricsson|opera mobi|Windows Phone|IEMobile|POLARIS/) != null){

location.href = "/m_index";

}

제일처음 

select * from board order by idx desc limit 0 , 10


제일 마지막

select * from board order by idx asc limit 0, totalRow%10

if ( totalRow%10 == 0 ) ? 10 


만약 총갯수에서 %10 을 나눈 값이 0이라면 그 전 페이지의 10개 게시물을 보여줘야 되므로

임의의 10개의 row를 보여줘야 한다.

+ Recent posts