นี่คือข้อมูลเบื้องต้นเกี่ยวกับเทคโนโลยีที่กล่าวถึง
ฤดูใบไม้ผลิ - ดาว
Spring-DAO ไม่ใช่โมดูลสปริงในความหมายที่เข้มงวด แต่เป็นอนุสัญญาที่ควรกำหนดให้คุณเขียน DAO และเขียนให้ดี ด้วยเหตุนี้จึงไม่มีอินเทอร์เฟซหรือการใช้งานหรือเทมเพลตในการเข้าถึงข้อมูลของคุณ เมื่อเขียน DAO คุณควรใส่คำอธิบายประกอบ@Repository
เพื่อให้ข้อยกเว้นที่เชื่อมโยงกับเทคโนโลยีพื้นฐาน (JDBC, Hibernate, JPA ฯลฯ ) ได้รับการแปลเป็นDataAccessException
คลาสย่อยที่เหมาะสมอย่างสม่ำเสมอ
ตัวอย่างเช่นสมมติว่าคุณกำลังใช้ Hibernate และชั้นบริการของคุณจับHibernateException
เพื่อที่จะตอบสนอง ถ้าคุณเปลี่ยนไป JPA อินเตอร์เฟซ DAOs ของคุณไม่ควรเปลี่ยนแปลงและชั้นบริการจะยังคงรวบรวมกับบล็อกที่จับHibernateException
แต่คุณจะไม่เคยใส่บล็อกเหล่านี้เป็น DAOs ของคุณอยู่ในขณะนี้การขว้างปา PersistenceException
JPA โดยใช้@Repository
ใน DAO ของคุณมีข้อยกเว้นที่เชื่อมโยงกับเทคโนโลยีดังกล่าวได้รับการแปลเป็นฤดูใบไม้ผลิDataAccessException
; ชั้นบริการของคุณตรวจจับข้อยกเว้นเหล่านี้และหากคุณตัดสินใจที่จะเปลี่ยนเทคโนโลยีการคงอยู่ Spring เดียวกันDataAccessExceptions
จะยังคงถูกโยนทิ้งเนื่องจาก Spring ได้แปลข้อยกเว้นดั้งเดิม
อย่างไรก็ตามโปรดทราบว่าสิ่งนี้มีการใช้งานที่ จำกัด ด้วยเหตุผลต่อไปนี้:
- โดยปกติคุณไม่ควรตรวจจับข้อยกเว้นการคงอยู่เนื่องจากผู้ให้บริการอาจย้อนกลับธุรกรรม (ขึ้นอยู่กับประเภทย่อยของข้อยกเว้นที่แน่นอน) ดังนั้นคุณจึงไม่ควรดำเนินการต่อด้วยเส้นทางอื่น
- ลำดับชั้นของข้อยกเว้นมักจะมีมากขึ้นในผู้ให้บริการของคุณมากกว่าที่ Spring มีให้และไม่มีการจับคู่ที่ชัดเจนจากผู้ให้บริการรายหนึ่งไปยังอีกรายหนึ่ง การอาศัยสิ่งนี้เป็นอันตราย อย่างไรก็ตามนี่เป็นความคิดที่ดีที่จะใส่คำอธิบายประกอบ DAO ของคุณด้วย
@Repository
เนื่องจากขั้นตอนการสแกนจะเพิ่มถั่วโดยอัตโนมัติ นอกจากนี้ Spring อาจเพิ่มคุณสมบัติที่เป็นประโยชน์อื่น ๆ ในคำอธิบายประกอบ
สปริง -JDBC
Spring-JDBC จัดเตรียมคลาส JdbcTemplate ซึ่งจะลบรหัสท่อประปาและช่วยให้คุณมีสมาธิกับแบบสอบถาม SQL และพารามิเตอร์ คุณต้องกำหนดค่าด้วย a DataSource
จากนั้นคุณสามารถเขียนโค้ดได้ดังนี้:
int nbRows = jdbcTemplate.queryForObject("select count(1) from person", Integer.class);
Person p = jdbcTemplate.queryForObject("select first, last from person where id=?",
rs -> new Person(rs.getString(1), rs.getString(2)),
134561351656L);
Spring-JDBC ยังมี JdbcDaoSupport ซึ่งคุณสามารถขยายเพื่อพัฒนา DAO ของคุณได้ โดยทั่วไปจะกำหนดคุณสมบัติ 2 อย่างคือ DataSource และ JdbcTemplate ที่ทั้งสองสามารถใช้เพื่อใช้วิธี DAO นอกจากนี้ยังมีตัวแปลข้อยกเว้นจากข้อยกเว้น SQL เพื่อสปริง DataAccessExceptions
หากคุณวางแผนที่จะใช้ jdbc ธรรมดานี่คือโมดูลที่คุณจะต้องใช้
สปริง - ออม
Spring-ORM เป็นโมดูลร่มที่ครอบคลุมเทคโนโลยีการคงอยู่มากมาย ได้แก่ JPA, JDO, Hibernate และ iBatis สำหรับแต่ละเทคโนโลยีเหล่านี้ Spring มีคลาสการรวมเพื่อให้แต่ละเทคโนโลยีสามารถใช้ตามหลักการกำหนดค่า Spring และผสานรวมกับการจัดการธุรกรรม Spring ได้อย่างราบรื่น
สำหรับแต่ละเทคโนโลยีการกำหนดค่าโดยพื้นฐานประกอบด้วยการฉีดDataSource
ถั่วลงในถั่วบางชนิดSessionFactory
หรือEntityManagerFactory
อื่น ๆ สำหรับ JDBC บริสุทธิ์ไม่จำเป็นต้องมีคลาสการรวมดังกล่าว (นอกเหนือจาก JdbcTemplate) เนื่องจาก JDBC ต้องอาศัย DataSource เท่านั้น
หากคุณวางแผนที่จะใช้ ORM เช่น JPA หรือ Hibernate คุณไม่จำเป็นต้องใช้ spring-jdbc แต่มีเพียงโมดูลนี้
สปริง - ข้อมูล
Spring-Data เป็นโครงการร่มที่มี API ทั่วไปเพื่อกำหนดวิธีการเข้าถึงข้อมูล (คำอธิบายประกอบ DAO +) ในรูปแบบทั่วไปมากขึ้นซึ่งครอบคลุมทั้งแหล่งข้อมูล SQL และ NOSQL
แนวคิดเริ่มต้นคือการจัดหาเทคโนโลยีเพื่อให้นักพัฒนาเขียนอินเทอร์เฟซสำหรับ DAO (วิธีการค้นหา) และคลาสเอนทิตีด้วยวิธีที่ไม่เชื่อเรื่องพระเจ้าและอิงตามการกำหนดค่าเท่านั้น (คำอธิบายประกอบใน DAOs & entities + spring configuration ไม่ว่าจะเป็น xml- หรือ java) ตัดสินใจใช้เทคโนโลยีการใช้งานไม่ว่าจะเป็น JPA (SQL) หรือ redis, hadoop ฯลฯ (NOSQL)
หากคุณทำตามหลักการตั้งชื่อที่กำหนดโดยฤดูใบไม้ผลิสำหรับชื่อเมธอด finder คุณไม่จำเป็นต้องระบุสตริงการสืบค้นที่สอดคล้องกับวิธีการค้นหาสำหรับกรณีที่ง่ายที่สุด สำหรับสถานการณ์อื่น ๆ คุณต้องระบุสตริงการสืบค้นภายในคำอธิบายประกอบเกี่ยวกับวิธีการค้นหา
เมื่อโหลดบริบทของแอ็พพลิเคชัน spring จะจัดเตรียมพร็อกซีสำหรับอินเทอร์เฟซ DAO ซึ่งมีโค้ดสำเร็จรูปทั้งหมดที่เกี่ยวข้องกับเทคโนโลยีการเข้าถึงข้อมูลและเรียกใช้เคียวรีที่กำหนดค่าไว้
Spring-Data มุ่งเน้นไปที่เทคโนโลยีที่ไม่ใช่ SQL แต่ยังคงมีโมดูลสำหรับ JPA (เทคโนโลยี SQL เพียงตัวเดียว)
อะไรต่อไป
รู้ทั้งหมดนี้ตอนนี้คุณต้องตัดสินใจว่าจะเลือกอะไร ข่าวดีก็คือคุณไม่จำเป็นต้องตัดสินใจขั้นสุดท้ายสำหรับเทคโนโลยีนี้ นี่คือที่ที่ Spring power อยู่: ในฐานะนักพัฒนาคุณให้ความสำคัญกับธุรกิจเมื่อคุณเขียนโค้ดและถ้าคุณทำได้ดีการเปลี่ยนเทคโนโลยีพื้นฐานก็คือการใช้งานหรือการกำหนดค่ารายละเอียด
- กำหนดแบบจำลองข้อมูลด้วยคลาส POJO สำหรับเอนทิตีและรับ / ตั้งค่าวิธีการเพื่อแสดงแอตทริบิวต์เอนทิตีและความสัมพันธ์กับเอนทิตีอื่น แน่นอนคุณจะต้องใส่คำอธิบายประกอบคลาสเอนทิตีและฟิลด์ตามเทคโนโลยี แต่ตอนนี้ POJO ก็เพียงพอแล้วที่จะเริ่มต้นด้วย เพียงแค่มุ่งเน้นไปที่ข้อกำหนดทางธุรกิจในตอนนี้
- กำหนดอินเทอร์เฟซสำหรับ DAO ของคุณ 1 DAO ครอบคลุม 1 เอนทิตี แต่คุณไม่จำเป็นต้องมี DAO สำหรับแต่ละเอนทิตีเนื่องจากคุณควรจะโหลดเอนทิตีเพิ่มเติมได้โดยไปที่ความสัมพันธ์ กำหนดวิธีการค้นหาตามหลักการตั้งชื่อที่เข้มงวด
- ด้วยเหตุนี้บุคคลอื่นสามารถเริ่มทำงานกับเลเยอร์บริการได้โดยมีการล้อเลียนสำหรับ DAO ของคุณ
- คุณเรียนรู้เทคโนโลยีการคงอยู่ที่แตกต่างกัน (sql, no-sql) เพื่อค้นหาสิ่งที่เหมาะสมที่สุดสำหรับความต้องการของคุณและเลือกหนึ่งในนั้น ด้วยเหตุนี้คุณจึงใส่คำอธิบายประกอบเอนทิตีและนำ DAO ไปใช้ (หรือปล่อยให้ spring นำไปใช้ให้กับคุณหากคุณเลือกที่จะใช้ข้อมูลสปริง)
- หากความต้องการทางธุรกิจมีการเปลี่ยนแปลงและเทคโนโลยีการเข้าถึงข้อมูลของคุณไม่เพียงพอที่จะรองรับ (เช่นคุณเริ่มต้นด้วย JDBC และเอนทิตีไม่กี่แห่ง แต่ตอนนี้ต้องการโมเดลข้อมูลที่สมบูรณ์ยิ่งขึ้นและ JPA เป็นทางเลือกที่ดีกว่า) คุณจะต้องเปลี่ยนการใช้งาน ของ DAO ของคุณเพิ่มคำอธิบายประกอบบางส่วนในเอนทิตีของคุณและเปลี่ยนการกำหนดค่าสปริง (เพิ่มคำจำกัดความของ EntityManagerFactory) รหัสธุรกิจที่เหลือของคุณไม่ควรเห็นผลกระทบอื่น ๆ จากการเปลี่ยนแปลงของคุณ
หมายเหตุ: การจัดการธุรกรรม
Spring มี API สำหรับการจัดการธุรกรรม หากคุณวางแผนที่จะใช้สปริงสำหรับการเข้าถึงข้อมูลคุณควรใช้สปริงสำหรับการจัดการธุรกรรมด้วยเนื่องจากมันรวมเข้าด้วยกันได้เป็นอย่างดี สำหรับเทคโนโลยีการเข้าถึงข้อมูลแต่ละรายการที่รองรับโดย spring มีตัวจัดการธุรกรรมที่ตรงกันสำหรับธุรกรรมในพื้นที่หรือคุณสามารถเลือก JTA หากคุณต้องการธุรกรรมแบบกระจาย พวกเขาทั้งหมดใช้ API เดียวกันดังนั้น (อีกครั้ง) ทางเลือกเทคโนโลยีจึงเป็นเพียงการกำหนดค่าที่สามารถเปลี่ยนแปลงได้โดยไม่ส่งผลกระทบต่อรหัสธุรกิจอีกต่อไป
หมายเหตุ: เอกสาร Spring
ลิงก์ไปยังเอกสาร Spring ที่คุณกล่าวถึงค่อนข้างเก่า นี่คือเอกสารของรุ่นล่าสุด (4.1.6 ครอบคลุมทุกหัวข้อ):
Spring-data ไม่ได้เป็นส่วนหนึ่งของ Spring framework มีโมดูลทั่วไปที่คุณควรอ่านเพื่อทำความคุ้นเคยกับหลักการก่อน เอกสารสามารถพบได้ที่นี่: