Pengenalan Spring Data JDBC

1. Gambaran keseluruhan

Spring Data JDBC adalah kerangka ketekunan yang tidak kompleks seperti Spring Data JPA. Ia tidak menyediakan cache, pemuatan yang malas, menulis di belakang, atau banyak lagi ciri JPA. Walaupun begitu, ia memiliki ORM sendiri dan menyediakan sebahagian besar ciri yang kami gunakan dengan Spring Data JPA seperti entiti yang dipetakan, repositori, anotasi pertanyaan, dan JdbcTemplate .

Perkara penting yang perlu diingat adalah Spring Data JDBC tidak menawarkan penghasilan skema . Hasilnya, kami bertanggungjawab untuk membuat skema secara eksplisit.

2. Menambah Spring Data JDBC ke Projek

Spring Data JDBC tersedia untuk aplikasi Spring Boot dengan pemula ketergantungan JDBC. Permulaan kebergantungan ini tidak membawa pemacu pangkalan data . Keputusan itu mesti diambil oleh pemaju. Mari tambahkan pergantungan pemula untuk Spring Data JPA:

 org.springframework.boot spring-boot-starter-data-jdbc  

Dalam contoh ini, kami menggunakan pangkalan data H2. Seperti yang kami sebutkan awal, Spring Data JDBC tidak menawarkan penghasilan skema. Dalam kes seperti itu, kita dapat membuat file schema.sql khusus yang akan memiliki perintah SQL DDL untuk membuat objek skema. Secara automatik, Spring Boot akan memilih fail ini dan menggunakannya untuk membuat objek pangkalan data.

3. Menambah Entiti

Seperti projek Spring Data yang lain, kami menggunakan anotasi untuk memetakan POJO dengan jadual pangkalan data. Dalam Spring Data JDBC, entiti tersebut dikehendaki memiliki @Id . Spring Data JDBC menggunakan anotasi @Id untuk mengenal pasti entiti.

Mirip dengan Spring Data JPA, Spring Data JDBC menggunakan, secara lalai, strategi penamaan yang memetakan entiti Java ke jadual pangkalan data relasional, dan atribut ke nama lajur. Secara lalai, nama entiti dan atribut Camel Case dipetakan untuk nama kes meja dan lajur masing-masing. Sebagai contoh, entiti Java bernama AddressBook dipetakan ke jadual pangkalan data bernama address_book .

Juga, kita boleh memetakan entiti dan atribut dengan jadual dan lajur dengan jelas dengan menggunakan @Table dan @column penjelasan. Sebagai contoh, di bawah ini kita telah menentukan entiti yang akan kita gunakan dalam contoh ini:

public class Person { @Id private long id; private String firstName; private String lastName; // constructors, getters, setters }

Kami tidak perlu menggunakan anotasi @ Jadual atau @Kolumn dalam kelas Orang . Strategi penamaan lalai Spring Data JDBC melakukan semua pemetaan secara tersirat antara entiti dan jadual.

4. Menyatakan Repositori JDBC

Spring Data JDBC menggunakan sintaks yang serupa dengan Spring Data JPA. Kita boleh membuat repositori Spring Data JDBC dengan memperluas antara muka Repository , CrudRepository, atau PagingAndSortingRepository . Dengan melaksanakan CrudRepository , kami menerima pelaksanaan kaedah yang paling sering digunakan seperti save , delete , dan findById , antara lain.

Mari buat repositori JDBC yang akan kami gunakan dalam contoh kami:

@Repository public interface PersonRepository extends CrudRepository { }

Sekiranya kita perlu mempunyai ciri penomboran dan penyortiran, pilihan terbaik adalah memperluas antara muka PagingAndSortingRepository .

5. Menyesuaikan Repositori JDBC

Walaupun kaedah CrudRepository terbina dalam, kita perlu membuat kaedah untuk kes tertentu. Satu perkara penting yang perlu diperhatikan ialah Spring Data JDBC tidak menyokong pertanyaan yang diturunkan . Ini bermaksud bahawa kita tidak boleh hanya menulis nama kaedah dan mengharapkan Spring Data JDBC menghasilkan pertanyaan.

Setiap kali kita menulis kaedah khusus, kita perlu menghiasnya dengan anotasi @Query . Di dalam penjelasan @Query , kami menambah perintah SQL kami. Di Spring Data JDBC, kami menulis pertanyaan dalam SQL biasa. Kami tidak menggunakan bahasa pertanyaan tahap tinggi seperti JPQL. Akibatnya, aplikasi tersebut digabungkan dengan vendor pangkalan data.

Atas sebab ini, menjadi lebih sukar untuk menukar ke pangkalan data yang berbeza.

Perbezaan penting lain ialah Spring Data JDBC tidak menyokong rujukan parameter dengan nombor indeks . Dalam versi Spring Data JDBC ini, kami hanya dapat merujuk parameter berdasarkan nama .

Dengan anotasi @Modifying , kita dapat memberi anotasi kaedah pertanyaan yang mengubah entiti.

Sekarang mari sesuaikan PersonRepository kami dengan pertanyaan yang tidak mengubah suai dan pertanyaan pengubahsuaian:

@Repository public interface PersonRepository extends CrudRepository { @Query("select * from person where first_name=:firstName") List findByFirstName(@Param("firstName") String firstName); @Modifying @Query("UPDATE person SET first_name = :name WHERE id = :id") boolean updateByFirstName(@Param("id") Long id, @Param("name") String name); }

6. Mengisi Pangkalan Data

Akhirnya, kita perlu mengisi pangkalan data dengan data yang akan berfungsi untuk menguji repositori Spring Data JDBC yang kita buat di atas. Oleh itu, kita akan membuat penyusun pangkalan data yang akan memasukkan data palsu. Mari tambahkan pelaksanaan penyusun pangkalan data untuk contoh ini:

@Component public class DatabaseSeeder { @Autowired private JdbcTemplate jdbcTemplate; public void insertData() { jdbcTemplate.execute("INSERT INTO Person(first_name,last_name) VALUES('Victor', 'Hugo')"); jdbcTemplate.execute("INSERT INTO Person(first_name,last_name) VALUES('Dante', 'Alighieri')"); jdbcTemplate.execute("INSERT INTO Person(first_name,last_name) VALUES('Stefan', 'Zweig')"); jdbcTemplate.execute("INSERT INTO Person(first_name,last_name) VALUES('Oscar', 'Wilde')"); } }

Seperti yang dilihat di atas, kami menggunakan Spring JDBC untuk melaksanakan penyataan INSERT . Khususnya, Spring JDBC menangani sambungan dengan pangkalan data dan membolehkan kita melaksanakan perintah SQL menggunakan JdbcTemplate s. Penyelesaian ini sangat fleksibel kerana kami mempunyai kawalan penuh terhadap pertanyaan yang dilaksanakan.

7. Kesimpulannya

Sebagai kesimpulan, Spring Data JDBC menawarkan penyelesaian yang semudah menggunakan Spring JDBC - tidak ada keajaiban di sebalik itu. Walaupun demikian, ia juga menawarkan sebagian besar fitur yang kita terbiasa menggunakan Spring Data JPA.

Salah satu kelebihan terbesar Spring Data JDBC adalah peningkatan prestasi ketika mengakses pangkalan data berbanding dengan Spring Data JPA. Ini disebabkan Spring Data JDBC berkomunikasi terus ke pangkalan data . Spring Data JDBC tidak mengandungi sebahagian besar sihir Spring Data semasa membuat pertanyaan ke pangkalan data .

Salah satu kelemahan terbesar ketika menggunakan Spring Data JDBC adalah ketergantungan pada vendor pangkalan data. Sekiranya kita memutuskan untuk menukar pangkalan data dari MySQL ke Oracle, kita mungkin harus menghadapi masalah yang timbul dari pangkalan data yang mempunyai dialek yang berbeza .

Pelaksanaan tutorial Spring Data JDBC ini boleh didapati di GitHub.