Spring Bootでデータベースを使う記事を書きました。記事中で軽く触れたCustomクラスを作る方法です。
前提
こんなEntityとRepositoryインターフェースがあったとします。
User.java
@Entity
public class User {
// いろいろ
}
UserRepository.java
public interface UserRepository extends CrudRepository<User> {
}
やること
ステップ1 - Customインターフェースを作成する
名前は必ず__Repositoryインターフェース名 + 'Custom'__にします。
UserRepositoryCustom.java
public interface UserRepositoryCustom {
public List<User> findBySpec(String prop);
}
ステップ2 - Customインターフェースの実装を作成する
名前は必ず__Repositoryインターフェース名 + 'Impl'__にします。
UserRepositoryImpl.java
public class UserRepositoryImpl implements UserRepositoryCustom {
public List<User> findBySpec(String prop) {
// いろいろ
}
}
ステップ3 - RepositoryインターフェースにCustomインターフェースを継承させる
UserRepository.java
public interface UserRepository extends
CrudRepository<User>, UserRepositoryCustom {
}
Customインターフェースの実装について
EntityManager
を使う
@Autowired
でJpaContext
を取得します。
JpaContext
から、EntiyManager
を取得します。
UserRepositoryImpl.java
@Autowired
private JpaContext context;
public List<User> findBySpec(String prop) {
final EntityManager em = context.GetEntityManagerByManagedType(User.class);
// いろいろ
}
Repositoryインターフェースを使う
普通に@Autowired
すると入ってきます。
よくできてますね。
UserRepositoryImpl.java
@Autowired
private UserRepository repository;