ดังนั้น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
- ที่ที่คุณใช้วิธีการเหล่านั้นด้วยระบบอัตโนมัติ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()
มันใช้งานได้จริง และคุณจะได้รับหนึ่งอินเทอร์เฟซสำหรับการสืบค้น spring-data
พร้อมสำหรับแอปพลิเคชันขนาดใหญ่จริงๆ และยิ่งคุณสามารถส่งข้อความค้นหาเป็นแบบธรรมดาหรือใส่คำอธิบายประกอบได้มากเท่าไหร่ก็ยิ่งดีเท่านั้น
ทั้งหมดนี้เป็นเอกสารที่เว็บไซต์ของฤดูใบไม้ผลิข้อมูล Jpa
โชคดี.