I think you should remove the
jdbcType-attribute from the typeHandler-tag, see:
http://www.mail-archive.com/[email protected]/msg03985.html
Niels
From: Paul Allen
[mailto:[EMAIL PROTECTED]
Sent: woensdag 3 mei 2006 19:05
To: [email protected]
Subject: RE: boolean type handler
---------------------------------------------------------------------------
Here's my SQL Map Config.
---------------------------------------------------------------------------
<sqlMapConfig >
<typeHandler jdbcType= "VARCHAR" javaType= "java.lang.Boolean"
callback=
"clo.is.sample.ibatis.CharBooleanHandler"
/>
<sqlMap resource= "clo/is/sample/ibatis/UserAccount.xml"
/>
<sqlMap resource= "clo/is/sample/ibatis/ProjUser.xml"
/>
</sqlMapConfig >
---------------------------------------------------------------------------
Here's part of ProjUser.XML
---------------------------------------------------------------------------
<typeAlias alias= "projUser" type= "org.birdsource.core.db.ProjUser"
/>
<insert id= "insertProjUserComplete" parameterClass ="projUser" >
INSERT INTO PROJ_USER
(
PROJ_ID, USER_ID, PROJ_PERIOD_ID, GROUP_ID,
GIFT_USER_ID, PAID, FEE_ID, BEGIN_DT,
END_DT, AUTH_GROUP, AUTH_VAL1, AUTH_VAL2,
AUTH_VAL3, AUTH_VAL4, CREATE_USER_ID, CREATE_DT,
EDIT_USER_ID, EDIT_DT,
REGISTRY_DT,
ENABLED,
NOTES,
MULTI_USE,
REQUEST_ID, TRANSACTION_ID
) VALUES (
#projID:VARCHAR#, #userID:VARCHAR#, #projPeriodID:VARCHAR#,
#groupID:VARCHAR#,
#giftUserID:VARCHAR#,
#paid,jdbcType=VARCHAR,javaType=java.lang.Boolean#,
#feeID:VARCHAR#, #beginDate:DATE#,
#endDate:DATE#, #authGroup:VARCHAR#, #authVal1:VARCHAR#,
#authVal2:VARCHAR#,
#authVal3:VARCHAR#, #authVal4:VARCHAR#, #createUserID:VARCHAR#,
#createDate:DATE:SYSDATE#,
#editUserID:VARCHAR#, #editDate:DATE:SYSDATE#,
#registryDate,jdbcType=DATE,javaType=java.util.Date#,
#enabled,jdbcType=VARCHAR,javaType=java.lang.Boolean#,
#notes:VARCHAR#,
#multiUse,jdbcType=VARCHAR,javaType=java.lang.Boolean#,
#requestID:VARCHAR#, #transactionID:VARCHAR#
)
</ insert >
---------------------------------------------------------------------------
Here's my CustomTypeHandler. I never see the "setParameter:
object is null." message even when
the paid property is null.
---------------------------------------------------------------------------
package clo.is.sample.ibatis;
import java.sql.SQLException;
import com.ibatis.sqlmap.client.extensions.ParameterSetter;
import com.ibatis.sqlmap.client.extensions.ResultGetter;
import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback;
/**
* @author pea1
*
*/
public class CharBooleanHandler implements TypeHandlerCallback {
/**
*
*/
public
CharBooleanHandler() {
super();
}
public void
setParameter(ParameterSetter setter, Object parameter) throws SQLException {
if (parameter == null)
{
System.err.println("setParameter: object is null. Setting as empty
string");
setter.setString("");
}
else {
boolean b = ((Boolean)
parameter).booleanValue();
if (b) {
System.err.println("setParameter: object is true. Setting as 1");
setter.setString("1");
} else {
System.err.println("setParameter: object is false. Setting as 0");
setter.setString("0");
}
}
}
/*
* (non-Javadoc)
*
* @see
com.ibatis.sqlmap.client.extensions.TypeHandlerCallback#getResult(com.ibatis.sqlmap.client.extensions.ResultGetter)
*/
public Object
getResult(ResultGetter getter) throws SQLException {
String s =
getter.getString();
if (s == null) {
System.err.println("getResult: object is null. returning null");
return null;
} else if
("0".equalsIgnoreCase(s)) {
System.err.println("getResult: object is 0. returning false");
return new Boolean(false);
} else {
System.err.println("getResult: object is not 0. returning true");
return new
Boolean(true);
}
}
public Object
valueOf(String s) {
if (s == null) {
System.err.println("valueOf: string is null. returning null");
return null;
}
else if
("0".equalsIgnoreCase(s)) {
System.err.println("valueOf: string is 0. returning false");
return new
Boolean(false);
}
else {
System.err.println("valueOf: string is not 0. returning true");
return new
Boolean(false);
}
}
}
At 12:35 PM 5/3/2006, Niels Beekman
wrote:
Hi,
Could you post the actual typehandler code and the piece of SQLMap where
you use it?
-----Original Message-----
From: Paul Allen [
mailto:[EMAIL PROTECTED]]
Sent: woensdag 3 mei 2006 18:32
To: [email protected]
Subject: boolean type handler
I've seen some threads that describe how to make a custom type handler
to
map from a Boolean bean property to a CHAR SQL type and I've implemented
one version of them. What I am trying to get is this mapping:
object property value --> DB value
Boolean.TRUE --> "1"
Boolean.FALSE --> "0"
null --> null
However I keep coming up with the same problem, by the time the
setParameter(ParameterSetter setter, Object parameter) method of my
handler
is called, the parameter is always a Boolean object, even when I think
it
should be null because the Boolean the property from my bean is null.
Is there anyway around this?