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

tag : iBatis Developer's Guide log4j

2008-08-30 01:39 : __orm__ibatis : コメント : 0 : トラックバック : 0 :

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
2008-01-31 00:29 : __orm__ibatis : コメント : 0 : トラックバック : 0 :

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
2007-12-10 01:51 : __orm__ibatis : コメント : 0 : トラックバック : 0 :

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/
2007-12-10 01:35 : __orm__ibatis : コメント : 0 : トラックバック : 0 :

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/
2007-12-10 01:26 : __orm__ibatis : コメント : 0 : トラックバック : 0 :

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>
--------------



2007-10-11 06:01 : __orm__ibatis : コメント : 0 : トラックバック : 0 :

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>
2007-10-11 05:30 : __orm__ibatis : コメント : 0 : トラックバック : 0 :

possible setting paramter

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

insert, update, delete:
id
parameterClass
parameterMap
timeout


2007-10-11 05:26 : __orm__ibatis : コメント : 0 : トラックバック : 0 :

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.

2007-10-11 05:24 : __orm__ibatis : コメント : 0 : トラックバック : 0 :

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を行うか
2007-10-11 05:17 : __orm__ibatis : コメント : 0 : トラックバック : 0 :

intro of iBatis

iBatis is
one of opensource o/r mapping tool
one of apache project
three versions; java, .net and ruby.

o/r mapping is
the mapping tool of object model and relationalDataModel.

if no orm,
you have to mapping by yourself when you get the resultset.

if using orm,
you can make the mapping info separated as a outer setting file.

differences b/w ibatis and hibernate
ibatis:
set SQL in a XML file.
a completely bottom-up approach.
easy to study.
hibernate:
a fw focused on the perpetuation of object model.
access to DB w/o SQL.
basically to-down approach.
little bit hard to study.


overview
parameterObject(input of sql): ex. javabean, xml
|
sql map: ex. sql setting file ―access to DB.
|
resultObject(a output): ex. javabean, xml

2007-10-11 05:07 : __orm__ibatis : コメント : 0 : トラックバック : 0 :
ホーム

search

ad



counter


tag cloud

category cloud