|
Jeff, I downloaded the guide out of svn. It does
mention TypeHandler (which is what I used), but it also mentions
TypeHandlerCallback. TypeHandler seems very similar to
TypeHandlerCallback, with the exception that TypeHandlerCallback seems to have
the ability to be applied globally. Which should I use? What is the
difference? You were right about the example, it is
very similar to what I did. P.S. Mine was more terse…. I don’t use constants unless they are
needed in more than one method or their value is not clear what they are doing. What do you have against the ternary
operator? --Rick Hightower From: Jeff Butler
[mailto:[EMAIL PROTECTED] Sorry - the latest developer's guide in SVN has it. We update the
developer's guide fairly often but, for some reason, don't always update the
download page. So there's a link on the download page called "Latest
OpenOffice Documents in Subversion" - then download iBATIS-SqlMaps-2.pdf. I don't know how we expect newcomers to figure that out :( Jeff Butler
On 6/29/06, Rick
<[EMAIL PROTECTED]>
wrote: Comments below… From: Jeff Butler [mailto: [EMAIL PROTECTED]] Subject: Re: How do
you map a Java boolean property to a VARCHAR(1) that contains 'Y' or 'N'? A custom
type handler is the right way to do it. Your code looks amazingly similar
to the example for this exact problem in the developer's guide :) (Great minds think alike…) **What developers guide? I just searched the iBatis developer guide (the PDF file) for
the string "TypeHandler" and it is not in there. Is this a future version of the developers guide? The one I
downloaded on 6/16/2006 does not seem to have this (or did I miss it). You could
register the type handler globally so it would always handle any VARCHAR to boolean
transalation. **Nice idea. This app handles all Booleans as VARCHAR(1) Y or
N. This is
what's shown in the developer's guide. Specifying the type handler for a
specific field in a result is fairly new - we do need to get that into the
documentation. I'll get to that tomorrow (hopefully). ** Perhaps in the FAQ as well. I am more than happy to update
the FAQ. Jeff
Butler
On
6/28/06, Rick < [EMAIL PROTECTED]>
wrote: I found the answer (just by trial and error no documentation
per se). Can you tell me if there is a easier/better way? I created a custom type handler and used it as follows:
<resultMap id= "contacts" class ="qcom.cas.mysourcej.poc.model.Contact" >
<result property= "name" column ="contact_name" />
<result property= "primaryContact" column ="primary_contact"
typeHandler= "qcom.cas.commons.ibatis.typehandler.StringBooleanTypeHandler"
/>
</resultMap > package qcom.cas.commons.ibatis.typehandler; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.ibatis.sqlmap.engine.type.TypeHandler; public class StringBooleanTypeHandler implements TypeHandler
{
public void setParameter(PreparedStatement ps, int position, Object value,
String jdbcType) throws SQLException {
Boolean bValue = (Boolean) value;
ps.setString(position, bValue.booleanValue() ? "Y" : "N");
}
public Object getResult(ResultSet rs, String name) throws SQLException {
return valueOf(rs.getString(name));
}
public Object getResult(ResultSet rs, int position) throws SQLException {
return valueOf(rs.getString(position));
}
public Object getResult(CallableStatement cs, int position)
throws SQLException {
return valueOf(cs.getString(position));
}
public Object valueOf(String value) {
if (value.equals("Y")) {
return Boolean.TRUE;
} else {
return Boolean.FALSE;
}
}
public boolean equals(Object value1, String value2) {
return valueOf(value2).equals(value1);
} } Can you tell me if there is a easier/better way? From: Rick [mailto: [EMAIL PROTECTED]]
I
have a SQL map as follows:
<resultMap id= "contacts" class ="qcom.cas.mysourcej.poc.model.Contact" >
<result property= "name" column ="contact_name" />
<result property= "primaryContact" column ="primary_contact"
/>
</resultMap > The
class Contact has a primaryContact field is boolean The
result set is from a column that is equal to 'Y' or 'N' in the database. Is
there a way to map a boolean property (primitive) to a VARCHAR(1) NOT NULL
column (that has either a 'Y' or a 'N')? This
is a legacy database and there is no way I can change the table. I could change
the query. BTW
I am new to iBatis, and I got it talking to a legacy db. I also setup
relationships fairly easily. I did notice the typeHandler attribute of resultMap but this
is not documented in the dtd or user documents. |
- Jeff RE: How do you map a Java boolean property to a VARCHAR(... Rick
