SQL LOG

log4j.properties―
1 # Global logging configuration
2 log4j.rootLogger=ERROR, stdout
3
4 # SqlMap logging configuration...
5 #log4j.logger.com.ibatis=DEBUG
6 #log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
7 #log4j.logger.com.ibatis.sqlmap.engine.cache.CacheModel=DEBUG
8 #log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientImpl=DEBUG
9 #log4j.logger.com.ibatis.sqlmap.engine.builder.xml.SqlMapParser=DEBUG
10#log4j.logger.com.ibatis.common.util.StopWatch=DEBUG
11#log4j.logger.java.sql.Connection=DEBUG
12#log4j.logger.java.sql.Statement=DEBUG
13#log4j.logger.java.sql.PreparedStatement=DEBUG
14#log4j.logger.java.sql.ResultSet=DEBUG
15
16# Console output...
17log4j.appender.stdout=org.apache.log4j.ConsoleAppender
18log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
19log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n


ref:
Japanese translation of iBATIS Developer's Guide.

ONWEB_EN
http://ibatisnet.sourceforge.net/DevGuide.html
ONWEB_EN_PDF
http://ibatis.apache.org/docs/java/pdf/iBATIS-SqlMaps-2_en.pdf
ONWEB_JP_PDF
https://issues.apache.org/jira/secure/attachment/12359316/iBATIS-SqlMaps-2_ja.pdf
DOWNLOAD_JP_PDF
http://svn.apache.org/repos/asf/ibatis/trunk/java/ibatis-2/ibatis-2-docs/ja/iBATIS-SqlMaps-2_ja.pdf

to use LobHandler

==goal==
insert/select BCLob data into/from DB.

==exception==
IllegalStateException

==solution==
set oracleLobHandler and simpleNativeJdbcExtractor
then di the lobHandler into the sqlMapClient.

==log==
Caused by:
java.lang.IllegalStateException: No LobHandler found for configuration - lobHandler property must be set on SqlMapClientFactoryBean
at org.springframework.orm.ibatis.support.AbstractLobTypeHandler.(AbstractLobTypeHandler.java:78)
at org.springframework.orm.ibatis.support.AbstractLobTypeHandler.(AbstractLobTypeHandler.java:70)
at org.springframework.orm.ibatis.support.BlobSerializableTypeHandler.(BlobSerializableTypeHandler.java:52)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1263)
at com.ibatis.sqlmap.engine.builder.xml.SqlMapParser$12.process(SqlMapParser.java:252)
... 91 more

Dynamic Mapped Statement

for 動的なSQL

==================================================
■動的部分タグ
動的に作成される部分を示すタグ。

タグ
<'dynamic>
[省略可能]動的に作成される個所を囲むタグ。

属性
prepend
タグの条件が成立した場合に、先頭に付加する内容を記述。

ex.
<'update id="updateUser" parameterClass="ibatis.User">
UPDATE USER
SET NAME = #name#
<'dynamic>
<'isNotNull prepend="," property="age">
AGE = #age#
<'/isNotNull>
<'/dynamic>
WHERE id = #id#
<'/update>

==================================================
■比較タグ
property(比較元プロパティ) と compareValue(比較先の値) または property と compareProperty(比較先プロパティ) を比較する条件を表すタグ。
条件が成立した場合、タグの内側の処理を行う。

タグ
<'isEqual>
比較した値が等しいかどうか判定。
<'isNotEqual>
比較した値が等しくないかどうか判定。
<'isGreaterThan>
比較した値が大きいかどうか判定。
<'isGreaterEqual>
比較した値が大きい、または等しいかどうか判定。
<'isLessThan>
比較した値が小さいかどうか判定。
<'isLessEqual>
比較した値が小さい、または等しいかどうか判定。

属性
prepend
タグの条件が成立した場合に、先頭に付加する内容を記述。
property
[必須]比較元のプロパティ名を指定。
compareValue
比較先の値を指定。
compareProperty
比較先のプロパティ名を指定。
※compareValue か comparePropertyのどちらかを指定すること。

ex.
プロパティ"age"に格納されている値が、"25"より大きい場合、AND AGE = age という条件を追加:
<'isGreaterEqual prepend="AND" property="age" compareValue="25" >
AGE = #age#
<'/isGreaterEqual>

==================================================
■状態判定タグ
property(比較元プロパティ) の値が null かどうか、空かどうか、利用可能かなどの条件を表すタグ。
条件が成立した場合、タグの内側の処理を行う。

タグ
<'isPropertyAvailable>
比較元プロパティが利用可能かどうかを判定。
<'isNoPropertyAvailable>
比較元プロパティが利用可能かどうかを判定。
<'isNull>
比較元プロパティの値が null かどうか判定。
<'isNotNull>
比較元プロパティの値が null ではないかどうか判定。
<'isEmpty>
プロパティの値をCollection, String, String.valueOf のいずれかとして評価し null または "" , size() <' 1)かどうか判定。
<'isNotEmpty>
プロパティの値をCollection, String, String.valueOf のいずれかとして評価し null または "" , size() <' 1)ではないかどうか判定。

属性
prepend
タグの条件が成立した場合に、先頭に付加する内容を記述。
property
[必須]比較元のプロパティ名を指定。

==================================================
■オブジェクト存在判定タグ
property(比較元プロパティ)が null かどうかの条件を表すタグ。
条件が成立した場合、タグの内側の処理を行う。

タグ
<'isParameterPresent>
比較元プロパティ(オブジェクト)が null かどうかを判定。
<'isNotParameterPresent>
比較元プロパティ(オブジェクト)が null ではないかどうかを判定。

属性
prepend
タグの条件が成立した場合に、先頭に付加する内容を記述。

==================================================
■繰り返しタグ
繰り返し処理を行うタグ。

タグ
<'iterate>
プロパティにjava.util.Listを指定し、繰り返し処理を行う。

属性
prepend
タグの条件が成立した場合に、先頭に付加する内容を記述。
property
[必須]繰り返し処理の対象となるパラメータのプロパティ名(java.util.List)を指定。
open
繰り返し処理のブロックの前につける文字列を指定。
close
繰り返し処理のブロックの終わりにつける文字列を指定。
conjunction
繰り返し処理の間に追加する文字列を指定。
ex.
Listに格納されている値を条件として追加:
<'iterate prepend="AND" open="(" close=")" property="idList" conjunction="OR">
NAME = #nameList[]#
<'/iterate>
==================================================


ref:
http://www.geocities.jp/woodstock_tomo/programing/java/j_ibatis_dms.html

list & iterate

<'select id="getUsers" parameterClass="list" resultClass="ibatis.User">
SELECT
ID,
NAME,
AGE
FROM USER
WHERE ID IN
<'iterate open="(" close=")" conjunction=",">
#[]#
<'/iterate>
<'/select>

パラメータで渡したリストの数だけ繰り返し処理が実行される。

呼び出し側の例

List users = new ArrayList();
users.add("1");
users.add("3");
List<'User> list = (List)sqlMap.queryForList("getUsers", users);
System.out.println(list.size());


ref:
http://634.ayumu-baby.com/ibatis/

sql mapping

□'$'
条件式(=, like, and, orなど)やソート順指定(asc, desc)などのパラメータ以外の動的な設定
ex. $変数名$
----------
<'select id="getSortUser" parameterClass="string" resultClass="ibatis.User">
SELECT
ID,
NAME,
AGE
FROM USER
ORDER BY AGE $VALUE$
<'/select>
----------
List list = sqlMap.queryForList("getSortUser", "asc");
----------

□'#'
javaObjectParameterの埋め込み
ex. #パラメータ#
----------
<'insert id="insertUser" parameterClass="ibatis.User">
INSERT INTO USER (
ID,
NAME,
AGE
) VALUES (
#id#,
#name:VARCHAR:NO_ENTRY#,
#age:NUMERIC:0#
)
<'/insert>
----------
※ID:必須。
※NAME:可変文字列型で、パラメータが空の場合はNULLを挿入。
※AGE:数値型で、パラメータが空の場合は0を挿入。


□<'![CDATA[]]>
特殊記号のエスケープ処理
ex. <'![CDATA[文字列]]>
----------
<'select id="getUsersByAge" parameterClass="string" resultClass="ibatis.User">
SELECT
ID,
NAME,
AGE
FROM
USER
WHERE
<'![CDATA[AGE > #value#]]>
<'/select>
----------

ref:
http://634.ayumu-baby.com/ibatis/

mapping sample

==-sqlMap.xml==
--------------
<'insert id="statementName" parameterClass="example.Product">
INSERT INTO PRODUCT (PRD_ID, PRD_DESCRIPTION, PRICE)VALUES (#id#, #description#, #price#)
<'/insert>
--------------
<'parameterMap id="insert-product-param"class="example.Product">
<'parameter property="id"/>
<'parameter property="description"/>
<'/parameterMap>
<'insert id="insertProduct" parameterMap="insert-product-param">
INSERT INTO PRODUCT (PRD_ID, PRD_DESCRIPTION) VALUES (?,?)
<'/insert>
--------------
<'select id="getPerson"
parameterClass="java.lang.Integer"
resultClass="examples.Person">
SELECT
ID AS id,
FIRST_NAME AS firstName,
LAST_NAME AS lastName,
BIRTH_DATE AS birthDate,
WEIGHT_KG AS weightInKilograms,
HEIGHT_M AS heightInMeters
FROM
PERSONWHERE ID = #value#
<'/select>
--------------
<'resultMap id="get-product-result" class="example.Product">
<'result property="id" column="PRD_ID"/>
<'result property="description" column="PRD_DESCRIPTION"/>
<'/resultMap>
<'select id="getProduct" resultMap="get-product-result">
SELECT * FROM PRODUCT
<'/select>
--------------
<'select id="getBook"
parameterClass="sample.Book"
resultClass="sample.Book">
SELECT ISBN AS isbn, TITLE AS title FROM BOOK WHERE ISBN = #isbn#
<'/select>
<'select id="getBooks"
resultClass="sample.Book">
SELECT ISBN AS isbn, TITLE AS title FROM BOOK
<'/select>
--------------
<'resultMap id="get-product-result"
class="example.Product">
<'result property="id" column="PRD_ID"/>
<'result property="description" column="PRD_DESCRIPTION"/>
<'result property="category.id" column="CAT_ID"/>
<'result property="category.description" column="CAT_DESCRIPTION"/>
<'/resultMap>
<'select id="getProduct" parameterClass="java.lang.Integer" resultMap="get-product-result">
SELECT *FROM PRODUCT, CATEGORYWHERE PRD_CAT_ID=CAT_IDAND PRD_ID = #value#
<'/select>
--------------
<'cacheModelid="product-cache"
type ="LRU"
readOnly="true"
serialize="false">
<'flushIntervalhours="24"/>
<'flushOnExecutestatement="insertProduct"/>
<'flushOnExecutestatement="updateProduct"/>
<'flushOnExecutestatement="deleteProduct"/>
<'property name="cache-size" value="1000" />
<'/cacheModel>
<'select id="getProductList" cacheModel="product-cache" resultClass="...">
SELECT * FROM PRODUCT WHERE PRD_CAT_ID = #value#
<'/select>
--------------
<'select id="dynamicGetAccountList"resultMap="account-result" >
SELECT * FROM ACCOUNT
<'isGreaterThanproperty="id" compareValue="0">
WHERE ACC_ID = #id#
<'/isGreaterThan>
ORDER BY ACC_LAST_NAME
<'/select>
--------------
<'select id="someName"resultMap="account-result" >
SELECT * FROM ACCOUNT<'dynamic prepend="WHERE">
<'isGreaterThanprepend="AND" property="id“compareValue="0">
ACC_ID = #id#
<'/isGreaterThan>
<'isNotNullprepend="AND" property="lastName">
ACC_LAST_NAME = #lastName#
<'/isNotNull>
<'/dynamic>
ORDER BY ACC_LAST_NAME
<'/select>
<'select id="someName"resultMap="account-result" >
SELECT * FROM ACCOUNT
<'dynamic prepend="WHERE">
<'isGreaterThanprepend="AND" property="id“compareValue="0">
ACC_ID = #id#
<'/isGreaterThan>
<'isNotNullprepend="AND" property="lastName">
ACC_LAST_NAME = #lastName#
<'/isNotNull>
<'/dynamic>
ORDER BY ACC_LAST_NAME
<'/select>
--------------
<'iterate prepend="AND"property="userNameList"open="("close=")"conjunction="OR">
USERNAME = #userNameList[]#
<'/iterate>
--------------
<'parameterMapid="insert-product-param" class="com.domain.Product">
<'parameter property="id" jdbcType="NUMERIC"/>
<'parameter property="description" jdbcType="VARCHAR"/>
<'/parameterMap>
--------------
<'insert id=”insertProduct”parameterClass=”sample.Product”>
INSERT INTO PRODUCT (PRD_ID, PRD_DESCRIPTION)VALUES (#id:NUMERIC#, #description:VARCHAR#)
<'/insert>
--------------
<'parameterMapid="insert-product-param" class="sample.Product">
<'parameter property=“id”jdbcType=“NUMERIC”nullValue="-9999999"/>
<'parameter property="description" jdbcType="VARCHAR" nullValue="NO_ENTRY"/>
<'/parameterMap>
--------------
<'insert id="insertProduct" parameterClass="sample.Product">
INSERT INTO PRODUCT
(PRD_ID, PRD_DESCRIPTION)
VALUES
(#id:NUMERIC:-999999#, #description:VARCHAR:NO_ENTRY#)
<'/insert>
--------------
<'insert id="insertProduct-ORACLE" parameterClass="sample.Product">
<'selectKeyresultClass="java.lang.Integer" >
SELECT STOCKIDSEQUENCE.NEXTVAL AS IDFROM DUAL
<'/selectKey>
INSERT INTO PRODUCT
(PRD_ID,PRD_DESCRIPTION)
VALUES
(#id#,#description#)
<'/insert>
--------------
<'parameterMapid="swapParameters" class=“java.util.Map" >
<'parameter property="email1" jdbcType="VARCHAR“javaType="java.lang.String" mode="INOUT"/>
<'parameter property="email2" jdbcType="VARCHAR“javaType="java.lang.String" mode="INOUT"/>
<'/parameterMap>
<'procedure id="swapEmailAddresses" parameterMap="swapParameters" >
{CALL SWAP_EMAIL_ADDRESS (?, ?)}
<'/procedure>
--------------



reusing sql statement sample

<'sqlid="selectItem_fragment">
FROM ITEMSWHERE PARENTID = 6
<'/sql>
<'select id=“selectItemCount”・・・skip・・・>
SELECT COUNT(*) AS TOTAL
<'include refid="selectItem_fragment"/>
<'/select>
<'select id="selectItem" ・・・skip・・・>
SELECT ID, NAME<'include refid="selectItem_fragment"/>
<'/select>

possible setting paramter

statement, select, procedure:
id
parameterClass
resultClass
parameterMap
resultMap
cacheModel
resultSetType
fetchSize
xmlResultName
remapResults
timeout

insert, update, delete:
id
parameterClass
parameterMap
timeout


statement-param types

there are 6 statement-param types

・statement
 for all types of SQL-statement.

・insert
 for insert-statement.

・update
 for update-statement.

・delete
 for delete-statement.

・select
 for select-statement.

・procedure
 execute precedure.

setting parameter of iBatis

parameters of sql mapping setting

maxRequests
default:512
同時に発行できる最大SQL数

maxSessions
default:128
同時に実行できる最大SqlMapClient数

maxTransactions
default:32
同時に実行できる最大transaction数

cacheModelsEnabled
default:true
CacheModelをSqlMapClientでglobalにcacheするか

lazyLoadingEnabled
default:true
延滞loadingを行うか

enhancementEnabled
default:false
ResultClassで指定したclassをCGLIB等で最適な形で作成するか

useStatementNamespaces
default:false
SQL IDを完全修飾名(namespace+sqlid)で指定するか

defaultStatementTimeout
default:-
SQL statementのtimeout秒数

classInfoCacheEnabled
default:true
class情報をcacheするか

statementCachingEnabled
default:false
prepared statementのlocal cacheを行うか

Top|Next »

HOME

09 | 2008/10 | 11
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -

QR

name:
mail:
title:
body:

N/A