JPA คืออะไร
JPA (Java Persistence API) เป็นข้อกำหนดการคงอยู่ของ Java ที่เสนออย่างเป็นทางการโดย Sun มันให้เครื่องมือการแมปวัตถุ/สมาคมเพื่อจัดการข้อมูลเชิงสัมพันธ์ในแอปพลิเคชัน Java รูปลักษณ์ของเขาส่วนใหญ่เพื่อลดความพยายามในการพัฒนาที่มีอยู่อย่างต่อเนื่องและรวมเทคโนโลยี ORM
Spring Data JPA เป็นเฟรมเวิร์กแอปพลิเคชัน JPA ที่ห่อหุ้มด้วยสปริงตามข้อกำหนดของ ORM Framework และ JPA ซึ่งช่วยให้นักพัฒนาสามารถเข้าถึงและใช้งานข้อมูลโดยใช้รหัสมินิมัลลิสต์ มันมีฟังก์ชั่นทั่วไปรวมถึงการเพิ่มเติมการลบการดัดแปลงและการค้นหาและขยายง่าย! การเรียนรู้และการใช้ข้อมูลฤดูใบไม้ผลิ JPA สามารถปรับปรุงประสิทธิภาพการพัฒนาได้อย่างมาก!
ใช้ JDBCTEMPLATE เพื่อเข้าถึงฐานข้อมูลใน Spring Boot
การกำหนดค่าแหล่งข้อมูล
ก่อนอื่นเพื่อเชื่อมต่อกับฐานข้อมูลคุณต้องแนะนำการสนับสนุน JDBC และการกำหนดค่าต่อไปนี้จะถูกนำเสนอใน pom.xml
<การพึ่งพา> <roupID> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Jdbc </artifactId>
การสนับสนุนฐานข้อมูลแบบฝัง
ฐานข้อมูลที่ฝังอยู่มักใช้ในการพัฒนาและการทดสอบสภาพแวดล้อม Spring-Boot ให้ฐานข้อมูลฝังตัวอัตโนมัติรวมถึง H2, HSQL และ Derby ซึ่งคุณไม่จำเป็นต้องจัดเตรียมการกำหนดค่าการเชื่อมต่อใด ๆ ที่จะใช้
เช่นการพึ่งพาของ H2
<Ederency> <roupId> com.h2Database </groupId> <ratifactId> H2 </artifactId> <scope> รันไทม์ </cope> </dependency>
รองรับฐานข้อมูล MySQL
<Ederency> <roupId> MySQL </groupID> <ArtIfactId> MySQL-Connector-Java </artifactId> <version> 5.1.38 </Sent>
แก้ไขข้อมูลการกำหนดค่า
กำหนดค่าข้อมูลแหล่งข้อมูลใน SRC/Main/Resources/Application.properties
Spring.datasource.url = jdbc: mysql: // localhost: 3306/testspring.datasource.username = rootspring.datasource.password = rootspring.datasource.driver-class-name = com.mysql.jdbc.driver
ใช้ JDBCTEMPLATE เพื่อใช้งานฐานข้อมูล
JDBCTEMPLATE ของ Spring ได้รับการกำหนดค่าโดยอัตโนมัติคุณสามารถใช้ @autowired เพื่อฉีดเข้าไปในถั่วของคุณเอง
การใช้งานการเข้าถึงข้อมูลที่กำหนดไว้ใน Demoservice ผ่าน JDBCTEMPLATE
@ServicePublic คลาส demoserivce {@autoWired ส่วนตัว JDBCTEMPLATE JDBCTEMPLATE; โมฆะสาธารณะสร้าง (ชื่อสตริงอายุจำนวนเต็ม) {jdbctemplate.update ("แทรกลงในการสาธิต (ชื่ออายุ) ค่า (?,?)", ชื่อ, อายุ); } โมฆะสาธารณะ DELETEBYNAME (ชื่อสตริง) {JDBCTEMPLATE.UPDATE ("ลบจากชื่อ demowhere =?", ชื่อ); } จำนวนเต็มสาธารณะ getAllDemo () {return jdbctemplate.QueryForObject ("เลือกนับ (1) จากการสาธิต", integer.class); } โมฆะสาธารณะ deletealldemo () {jdbctemplate.update ("ลบจากการสาธิต"); -สร้างกรณีทดสอบหน่วยสำหรับผู้ใช้เพื่อตรวจสอบความถูกต้องของการดำเนินการฐานข้อมูลโดยการสร้างการลบและการสืบค้น
กรณีทดสอบจำเป็นต้องเพิ่มการพึ่งพา
<Effercy> <mergiED> org.springframework.boot </groupId> <ratifactid> การทดสอบสปริง-สตาร์สตาร์เทสต์ </artifactid>
รหัสทดสอบ
@runwith (springjunit4classrunner.class) @springapplicationconfiguration (main.class) แอปพลิเคชันระดับสาธารณะ {@autowired ส่วนตัว demoserivce demoserivce; @Before การตั้งค่าโมฆะสาธารณะ () {// เตรียมล้างตาราง demoserivce.deletealldemo (); } @Test Public Void Test () พ่นข้อยกเว้น {// แทรก 5 demoserivce.create ("a", 1); demoserivce.create ("B", 2); demoserivce.create ("C", 3); demoserivce.create ("D", 4); demoserivce.create ("E", 5); assert.assertequals (5, demoserivce.getalldemo (). intvalue ()); Demoserivce.deleteByName ("A"); Demoserivce.deleteByName ("E"); // ดูที่ฐานข้อมูลควรมี 5 assert.assertequals (3, demoserivce.getalldemo (). intvalue ()); -การใช้ Spring-Data-JPA ใน Spring Boot
เพื่อที่จะแก้ปัญหาการทำงานของข้อมูลที่น่าเบื่อจำนวนมากสิ่งแรกที่เราคิดคือใช้กรอบ ORM เช่น: Hibernate หลังจากรวมไฮเบอร์เนตในที่สุดเราก็แมปการเปลี่ยนแปลงข้อมูลไปยังตารางฐานข้อมูลในการจัดการเอนทิตี Java
เพื่อที่จะแก้ปัญหา "การเพิ่มการลบการปรับเปลี่ยนและการค้นหา" พื้นฐานของการสรุปแต่ละเอนทิตี Java แต่ละตัวเรามักจะห่อหุ้มเทมเพลตในวิธีทั่วไปในการนามธรรมและทำให้ง่ายขึ้น แต่สิ่งนี้ยังไม่สะดวก เราจำเป็นต้องเขียนอินเทอร์เฟซที่สืบทอดมาจากเทมเพลตทั่วไปในเอนทิตีเฉพาะจากนั้นเขียนการใช้งานอินเทอร์เฟซ แม้ว่าการเข้าถึงข้อมูลพื้นฐานบางอย่างสามารถนำกลับมาใช้ใหม่ได้ดี แต่จะมีอินเทอร์เฟซและการใช้งานสำหรับแต่ละเอนทิตีในโครงสร้างรหัส
เนื่องจากการใช้งานเทมเพลตเลเยอร์ของเอนทิตีเฉพาะเหล่านี้ได้กลายเป็น "บาง" มาก การใช้งานของหน่วยงานเฉพาะบางอย่างอาจเป็นพร็อกซีที่เรียบง่ายสำหรับเทมเพลตและบ่อยครั้งที่คลาสการใช้งานดังกล่าวอาจปรากฏในหลาย ๆ หน่วยงาน การเกิดขึ้นของ Spring-Data-JPA สามารถทำให้เลเยอร์การเข้าถึงข้อมูล "บาง" นั้นกลายเป็นวิธีการเขียนเลเยอร์ของอินเทอร์เฟซ
วิธีใช้
เพิ่มการพึ่งพา
<การพึ่งพา <GroupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Data-JPA </artifactId>
แก้ไขข้อมูลการกำหนดค่า
กำหนดค่าข้อมูลแหล่งข้อมูลใน SRC/Main/Resources/Application.properties
Spring.datasource.url = jdbc: mysql: // localhost: 3306/testspring.datasource.username = rootspring.datasource.password = rootspring.datasource.driver-class-name = com.mysql.jdbc.driverspring.jpa.properties.hibernate.hbm2ddl.auto = อัปเดต
Spring.jpa.properties.hibernate.hbm2ddl.auto เป็นคุณสมบัติการกำหนดค่าของไฮเบอร์เนต ฟังก์ชั่นหลักคือการสร้างอัปเดตและตรวจสอบโครงสร้างตารางฐานข้อมูลโดยอัตโนมัติ การกำหนดค่าหลายอย่างของพารามิเตอร์นี้มีดังนี้
สร้างเอนทิตี
@EntityPublic คลาสการสาธิต {@id @GeneratedValue id ส่วนตัวยาว; ชื่อสตริงส่วนตัว; เนื้อหาสตริงส่วนตัว การสาธิตสาธารณะ () {} การสาธิตสาธารณะ (ชื่อสตริงเนื้อหาสตริง) {this.title = title; this.content = เนื้อหา; } // รับการตั้งค่า}สร้าง Dao
DemorePository อินเตอร์เฟสสาธารณะขยาย jParePository <การสาธิต, ยาว> {demoEntity findByTitle (ชื่อสตริง); DemoEntity findByTitleAndContent (ชื่อสตริง, เนื้อหาสตริง); // @Query ("เลือกคุณจาก DemoEntity U โดยที่ U.Content =: เนื้อหา") @Query ("จาก DemoEntity u ที่ U.Content =: เนื้อหา"อย่าเขียนชื่อตารางใน SQL แต่ชื่อเอนทิตีมันจะแปลงเป็นชื่อตารางโดยอัตโนมัติ
สร้างแบบสอบถามโดยแยกวิเคราะห์ชื่อวิธี
FindByTitle (ชื่อสตริง) และ FindByTitleAndContent (ชื่อสตริงเนื้อหาสตริง) จะไม่ถูกเขียน แต่เฟรมเวิร์กจะสร้าง SQL โดยอัตโนมัติตามชื่อของคู่ด้านบน
การทดสอบหน่วย
@runwith (springjunit4classrunner.class) @springapplicationconfiguration (main.class) คลาสสาธารณะ unittest {@autowired demorepository demorepository; @Test Public Void Test () {สำหรับ (int i = 0; i <10; i ++) {demorepository.save (การสาธิตใหม่ ("title"+i, "เนื้อหา"+i)); } assert.assertequals (10, demorepository.findall (). size ()); } @Test โมฆะสาธารณะ testFindByTitle () {demoEntity res = demorepository.findbytitle ("title8"); assert.assertequals ("title8", res.getTitle ()); } @Test โมฆะสาธารณะ testFindByTitleAnDContent () {demoEntity res = demorepository.findbytitleandContent ("title9", "content9"); assert.assertequals ("title9", res.getTitle ()); assert.assertequals ("content9", res.getContent ()); } @Test โมฆะสาธารณะ testSQLFIND () {demoEntity res = demorepository.sqlfind ("Content7"); assert.assertequals ("content7", res.getContent ()); -สรุป
ข้างต้นคือการแนะนำตัวแก้ไขเกี่ยวกับการใช้สปริง-ข้อมูล-JPA ใน Spring Boot เพื่ออำนวยความสะดวกและเข้าถึงฐานข้อมูลได้อย่างรวดเร็ว ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!