/guice-repository

Automatically exported from code.google.com/p/guice-repository

Primary LanguageJavaApache License 2.0Apache-2.0

Overview

Guice-repository is a Guice-adapted version of spring-data-jpa project with some additional features.

Theory can be found here:
- http://martinfowler.com/eaaCatalog/repository.html
- http://msdn.microsoft.com/en-us/library/ff649690.aspx
- http://design-pattern.ru/patterns/repository.html

Features:

- Full support of original 1.1-1.4, 2.2-2.5 spring-data-jpa documentation parts;
- Support of original 2.6, 2.7 parts in manual programmatic Spring wiring mode;
- Support for batch store (see SimpleBatchStoreJpaRepository);
- Full support for @Transactional methods for all Guice-instantiated entities (NEW in 2.0);
- Support for multiple persistence units (NEW in 2.0);
- Support for direct injection of EntityManager/EntityManagerFactory with @PersistenceContext/@PersistenceUnit/@Inject&@Named annotations (NEW in 2.0);
- Support for injections in repositories/custom implementations (NEW in 2.0);
- PersistFilter as implementation of "Open EntityManager in View"/"session-in-view"/"session-per-http-request" pattern (NEW in 2.0);
- More natural way of Repository binding process (NEW in 2.0);
- Auto-binder possibilities with exclusion/inclusion filters - see ScanningJpaRepositoryModule (filters is NEW in 2.0);
- Ability to bind interceptor to catch Repository methods with @Transactional (NEW in 2.0);
- Significant performance improvements (NEW in 2.0);
- Support for all settable properties of JpaRepositoryFactoryBean: namedQueries & queryLookupStrategyKey (see RepositoryBindingBuilder) (NEW in 2.0);
- Allow access to EntityManager (see EntityManagerProvider);
- Significant test coverage.

Quickstart

1. Define your Repository interface
public interface AccountRepository extends JpaRepository<Account, Long>,
        EntityManagerProvider {

    Account findAccountByUuid(String uuid);

    @Query("select a from Account a where a.name = :name")
    Account findAccountByName(@Param("name") String name);
}

2. Install a Guice-module
install(new JpaRepositoryModule("my-persistence-unit") {
            @Override
            protected void bindRepositories(RepositoryBinder binder) {
                binder.bind(AccountRepository.class).to("my-persistence-unit");
            }
        });

3. @Inject & use
public class AccountService {

    @Inject
    private AccountRepository accountRepository;

    public void registerUser(String login, String password) throws RegistrationException{
     // ... some checks & etc
     accountRepository.save(new Account(login, password));
     // ... something else
    }

    public Account findAccount(String login) throws FinderException{
     return accountRepository.findAccountByLogin(login);
    }
}

Project on google-code:
http://code.google.com/p/guice-repository/

Project documentation:
http://code.google.com/p/guice-repository/wiki/DevGuide