Re: When will the IBatis.NET V2 be released?

2008-04-17 Thread Clinton Begin
Keep in mind that the whiteboard is just a guideline and not a hard bound
spec.  I love to see the innovation that the .NET team comes up with.  We
don't want to stifle the opportunities that .NET makes possible that Java
does not allow for, and we also want to learn from Gilles and the others on
their ideas for the future of iBATIS.   For a number of reasons, we should
see iBATIS.NET surpass the success that the Java version has seen.

The iBATIS 3.0 for Java source will be uploaded to Apache SVN soon.
Currently we only have a Java configuration API, but will also be supporting
XML, Annotations (similar to .NET Attributes) and possibly a
convention/generation based configuration.  I'm excited about all of the
changes and want to get them out soon.

Cheers,
Clinton

On Thu, Apr 17, 2008 at 2:20 AM, Gilles Bayon <[EMAIL PROTECTED]> wrote:

> The .NE version is also moving to the V3 and you can even more find this
> next version in
>  http://svn.apache.org/repos/asf/ibatis/trunk/cs/V2/
> Don't care to the V2 directory name it will surely be changed to V3.
>
> This version only targets .NET framework >= 2.*
> The main change are:
> - use Castle.DynamicProxy V2
> - Configuration element can be register in any order.
> - Configuration can be made by code (alias, typeHandler, resultMap,
> parameterMap)
> - External resource now follow the .NET standard access used by Spring,
> Castle as
>   
> 
>   uri="assembly://Apache.Ibatis.DataMapper.SqlClient.Test/Maps/Mapping2.xml"/>
> 
> 
>  uri="assembly://Apache.Ibatis.DataMapper.SqlClient.Test/Maps/Mapping5.xml"/>
>   
> - Configuration API change following iBATIS 3.0 Whiteboard
>
> http://opensource.atlassian.com/confluence/oss/display/IBATIS/iBATIS+3.0+Whiteboard
> - iBATIS session access via ISessionFactory
>
> Example:
> /// 
> /// This module will register the resultMaps under the convention
> namespace Account
> /// 
> public class AccountModule : Module
> {
>
> public override void Load()
> {
> RegisterAlias();
>
> RegisterTypeHandler OuiNonBoolTypeHandlerCallback>("Varchar");
>
> RegisterResultMap("account-result-nullable-email")
> .MappingMember("Id").ToColumnName("Account_ID")
>
> .MappingMember("FirstName").ToColumnName("Account_FirstName")
>
> .MappingMember("LastName").ToColumnName("Account_LastName")
>
> .MappingMember("EmailAddress").ToColumnName("Account_Email");
>
> RegisterParameterMap("insert-params")
> .MappingMember("Id").ToColumn("Account_ID")
> .MappingMember("FirstName").ToColumn("Account_FirstName")
> .MappingMember("LastName").ToColumn("Account_LastName")
>
> .MappingMember("EmailAddress").ToColumn("Account_Email").UsingNullValue("
> [EMAIL PROTECTED]")
>
> .MappingMember("BannerOption").ToColumn("Account_Banner_Option").UsingDbType("Varchar").UsingType("bool")
>
> .MappingMember("CartOption").ToColumn("Account_Cart_Option").WithTypeHandler();
>
> RegisterResultMap("account-result-constructor")
> .UsingConstructor
>
> .MappingArgument("identifiant").ToColumnName("Account_ID")
>
> .MappingArgument("firstName").ToColumnName("Account_FirstName")
>
> .MappingArgument("lastName").ToColumnName("Account_LastName")
>
> .MappingMember("EmailAddress").ToColumnName("Account_Email").UsingNullValue("
> [EMAIL PROTECTED]")
>
> .MappingMember("BannerOption").ToColumnName("Account_Banner_Option").UsingDbType("Varchar").UsingType("bool")
>
> .MappingMember("CartOption").ToColumnName("Account_Cart_Option").WithTypeHandler();
>
> RegisterResultMap("account-result-joined-document")
> .MappingMember("id").ToColumnName("Account_ID")
>
> .MappingMember("FirstName").ToColumnName("Account_FirstName")
>
> .MappingMember("LastName").ToColumnName("Account_LastName")
>
> .MappingMember("EmailAddress").ToColumnName("Account_Email").UsingNullValue("
> [EMAIL PROTECTED]")
>
> .MappingMember("BannerOption").ToColumnName("Account_Banner_Option").UsingDbType("Varchar").UsingType("bool")
>
> .MappingMember("CartOption").ToColumnName("Account_Cart_Option").WithTypeHandler()
>
> .MappingMember("Document").UsingResultMap("Document.document");
>
> }
> }
>
> /// 
> /// This module will register the resultMaps under the specified
> namespace Document
> /// 
> public class DocumentModule : Module
> {
> public DocumentModule()
> : base("Document")
> { }
>
> public override void Load()
> {
> RegisterAlias("DocumentCollection");
>
> RegisterResultMap("baseDocument")
> .MappingMember("Id").ToColumnName("Document_ID")
> .MappingMember("Title").ToColumnName("Document_Title");
>
>
> RegisterResultMap("newspaper").Extends("baseDocument")
> .MappingMember("City").ToColumnName("Document_City");
>
>
> RegisterResul

Re: When will the IBatis.NET V2 be released?

2008-04-16 Thread Gilles Bayon
The .NE version is also moving to the V3 and you can even more find this
next version in
 http://svn.apache.org/repos/asf/ibatis/trunk/cs/V2/
Don't care to the V2 directory name it will surely be changed to V3.

This version only targets .NET framework >= 2.*
The main change are:
- use Castle.DynamicProxy V2
- Configuration element can be register in any order.
- Configuration can be made by code (alias, typeHandler, resultMap,
parameterMap)
- External resource now follow the .NET standard access used by Spring,
Castle as
  





  
- Configuration API change following iBATIS 3.0 Whiteboard
http://opensource.atlassian.com/confluence/oss/display/IBATIS/iBATIS+3.0+Whiteboard
- iBATIS session access via ISessionFactory

Example:
/// 
/// This module will register the resultMaps under the convention
namespace Account
/// 
public class AccountModule : Module
{

public override void Load()
{
RegisterAlias();

RegisterTypeHandler("Varchar");

RegisterResultMap("account-result-nullable-email")
.MappingMember("Id").ToColumnName("Account_ID")

.MappingMember("FirstName").ToColumnName("Account_FirstName")
.MappingMember("LastName").ToColumnName("Account_LastName")

.MappingMember("EmailAddress").ToColumnName("Account_Email");

RegisterParameterMap("insert-params")
.MappingMember("Id").ToColumn("Account_ID")
.MappingMember("FirstName").ToColumn("Account_FirstName")
.MappingMember("LastName").ToColumn("Account_LastName")

.MappingMember("EmailAddress").ToColumn("Account_Email").UsingNullValue("
[EMAIL PROTECTED]")

.MappingMember("BannerOption").ToColumn("Account_Banner_Option").UsingDbType("Varchar").UsingType("bool")

.MappingMember("CartOption").ToColumn("Account_Cart_Option").WithTypeHandler();

RegisterResultMap("account-result-constructor")
.UsingConstructor

.MappingArgument("identifiant").ToColumnName("Account_ID")

.MappingArgument("firstName").ToColumnName("Account_FirstName")

.MappingArgument("lastName").ToColumnName("Account_LastName")

.MappingMember("EmailAddress").ToColumnName("Account_Email").UsingNullValue("
[EMAIL PROTECTED]")

.MappingMember("BannerOption").ToColumnName("Account_Banner_Option").UsingDbType("Varchar").UsingType("bool")

.MappingMember("CartOption").ToColumnName("Account_Cart_Option").WithTypeHandler();

RegisterResultMap("account-result-joined-document")
.MappingMember("id").ToColumnName("Account_ID")

.MappingMember("FirstName").ToColumnName("Account_FirstName")
.MappingMember("LastName").ToColumnName("Account_LastName")

.MappingMember("EmailAddress").ToColumnName("Account_Email").UsingNullValue("
[EMAIL PROTECTED]")

.MappingMember("BannerOption").ToColumnName("Account_Banner_Option").UsingDbType("Varchar").UsingType("bool")

.MappingMember("CartOption").ToColumnName("Account_Cart_Option").WithTypeHandler()

.MappingMember("Document").UsingResultMap("Document.document");

}
}

/// 
/// This module will register the resultMaps under the specified
namespace Document
/// 
public class DocumentModule : Module
{
public DocumentModule()
: base("Document")
{ }

public override void Load()
{
RegisterAlias("DocumentCollection");

RegisterResultMap("baseDocument")
.MappingMember("Id").ToColumnName("Document_ID")
.MappingMember("Title").ToColumnName("Document_Title");


RegisterResultMap("newspaper").Extends("baseDocument")
.MappingMember("City").ToColumnName("Document_City");

RegisterResultMap("document").Extends("baseDocument")
.MappingMember("Test").ToColumnName("Document_Title")
.WithDiscriminator("Document_Type")
.UsingResultMap("Document.book").ForValue("Book")
.UsingResultMap("newspaper").ForValue("Newspaper");


RegisterResultMap("document-custom-handler").Extends("baseDocument")
.WithDiscriminator("Document_Type")
.WithTypeHandler()
.UsingResultMap("book").ForValue("Book")
.UsingResultMap("newspaper").ForValue("Newspaper");

RegisterResultMap("book").Extends("document")

.MappingMember("PageNumber").ToColumnName("Document_PageNumber");
}
}

and you configure the stuff like that

string resource = "SqlMap_StatementOnly.config";
IConfigurationEngine engine = new
DefaultConfigurationEngine();
engine.RegisterInterpreter(new
XmlConfigurationInterpreter(resource));
engine.RegisterModule(new AccountModule());
engine.RegisterModule(new DocumentModule());

IMapperFactory mapperFactory = engine.BuildMapperFactory();