NAME
   DBIx::ObjectMapper - An implementation of the Data Mapper pattern
   (object-relational mapper).

SYNOPSIS
   Create a engine and a mapper object.

    use DBIx::ObjectMapper;
    use DBIx::ObjectMapper::Engine::DBI;

    my $engine = DBIx::ObjectMapper::Engine::DBI->new({
       dsn => 'dbi:SQLite:',
       username => undef,
       password => undef,
    });

    my $mapper = DBIx::ObjectMapper->new( engine => $engine );

   Create a ordinary perl class.

    package My::User;
    use base qw(Class::Accessor::Fast);
    __PACKAGE__->mk_accessors(qw(id name));

    1;

   Get/Define metadata of the table.

    my $user_meta = $mapper->metadata->table( 'user' => 'autoload' );

    # or

    use DBIx::ObjectMapper::Metadata::Sugar qw(:all);
    my $user_meta = $mapper->metadata->table(
        'user' => [
            Col( id => Int(), PrimaryKey ),
            Col( name => String(128), NotNull ),
        ]
    );

   Map the table metadata to the ordinary class.

    $mapper->maps( $user_meta => 'My::User' );

   Create session. And add My::User object to session object.

    my $session = $mapper->begin_session;
    my $user = My::User->new({ id => 1, name => 'name1' });
    $session->add($user);

   When the $session is destroyed, the session object send a insert query
   to the database.

   Get a My::User Object.

    my $session = $mapper->begin_session;
    my $user = $session->get( 'My::User' => 1 );
    $user->id;
    $user->name;

DESCRIPTION
   DBIx::ObjectMapper is a implementation of the Data Mapper pattern. And
   abstraction layer for database access.

   Concepts and interfaces of this module borrowed from SQLAlchemy.
   <http://www.sqlalchemy.org/>

METHODS
 new(%args)
   engine
        DBIx::ObjectMapper::Engine

   metadata
        By default DBIx::ObjectMapper::Metadata. Set a
        DBIx::ObjectMapper::Metadata based object if you want.

   mapping_class
        By default DBIx::ObjectMapper::Mapper. Set a
        DBIx::ObjectMapper::Mapper based object if you want.

   session_class
        By default DBIx::ObjectMapper::Session. Set a
        DBIx::ObjectMapper::Session based class if you want.

   session_attr
        Set a hash reference of counstructor parameters of
        DBIx::ObjectMapper::Session. When you call the begin_session
        method, you get a DBIx::ObjectMapper::Session object that this
        option is set up.

 begin_session(%session_option)
   Gets a session object instance, and begins session. See the
   DBIx::ObjectMapper::Session for more information.

 maps(%map_config)
   Sets a configuration of mapping. See the DBIx::ObjectMapper::Mapper for
   more information.

 relation( $relation_type => \%relation_config )
   DBIx::ObjectMapper::Relation

 metadata()
   Returns the metadata object.

 engine()
   Returns the engine object.

 mapping_class()
   Returns the mapping_class.

 session_class()
   Returns the session_class.

AUTHOR
   Eisuke Oishi

CONTRIBUTORS
   nekokak: Atsushi Kobayashi

COPYRIGHT
   Copyright 2010 Eisuke Oishi

LICENSE
   This library is free software; you can redistribute it and/or modify it
   under the same terms as Perl itself.