そのため、spring-data
複雑なクエリに役立つ追加の魔法を行います。最初は奇妙で、ドキュメントでは完全にスキップしますが、非常に強力で便利です。
これには、カスタムRepository
とカスタムの「RepositoryImpl」を作成し、Spring にそれを見つける場所を伝えることが含まれます。次に例を示します。
構成クラス -リポジトリ パッケージを指す注釈を使用して、まだ必要な xml 構成をポイントします*Impl
(クラスは自動的に検索されます)。
@Configuration
@EnableJpaRepositories(basePackages = {"com.examples.repositories"})
@EnableTransactionManagement
public class MyConfiguration {
}
jpa-repositories.xml - リポジトリのSpring
場所を教えてください。また、次のファイル名Spring
でカスタム リポジトリを探すように指示します。CustomImpl
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<jpa:repositories base-package="com.example.repositories" repository-impl-postfix="CustomImpl" />
</beans>
MyObjectRepository
- これは、注釈付きおよび注釈なしのクエリ メソッドを配置できる場所です。このリポジトリ インターフェイスがそれをどのように拡張するかに注意してくださいCustom
。
@Transactional
public interface MyObjectRepository extends JpaRepository<MyObject, Integer>, MyObjectRepositoryCustom {
List<MyObject> findByName(String name);
@Query("select * from my_object where name = ?0 or middle_name = ?0")
List<MyObject> findByFirstNameOrMiddleName(String name);
}
MyObjectRepositoryCustom
- より複雑で、単純なクエリや注釈では処理できないリポジトリ メソッド:
public interface MyObjectRepositoryCustom {
List<MyObject> findByNameWithWeirdOrdering(String name);
}
MyObjectRepositoryCustomImpl
- autowired を使用してこれらのメソッドを実際に実装する場所EntityManager
:
public class MyObjectRepositoryCustomImpl implements MyObjectRepositoryCustom {
@Autowired
private EntityManager entityManager;
public final List<MyObject> findByNameWithWeirdOrdering(String name) {
Query query = query(where("name").is(name));
query.sort().on("whatever", Order.ASC);
return entityManager.find(query, MyObject.class);
}
}
驚くべきことに、次のようにすると、これらすべてがまとまり、両方のインターフェース (および実装する CRUD インターフェース) のメソッドがすべて表示されます。
myObjectRepository.
以下が表示されます。
myObjectRepository.save()
myObjectRepository.findAll()
myObjectRepository.findByName()
myObjectRepository.findByFirstNameOrMiddleName()
myObjectRepository.findByNameWithWeirdOrdering()
それは本当にうまくいきます。また、クエリ用のインターフェイスが 1 つ得られます。spring-data
本当に大規模なアプリケーションの準備ができています。そして、シンプルまたはアノテーションにプッシュできるクエリが多ければ多いほど、有利になります。
このすべては、Spring Data Jpa サイトで文書化されています。
幸運を。