


Pembangunan Bahagian Belakang Java: Pertanyaan Dinamik Menggunakan API Kriteria JPA
Dalam pembangunan back-end Java, pertanyaan data adalah operasi yang sangat biasa, dan menggunakan JPA (Java Persistence API) ialah kaedah yang sangat popular. JPA menyediakan cara yang fleksibel dan boleh digunakan semula untuk mendapatkan dan memanipulasi data dalam pangkalan data. Walau bagaimanapun, untuk pertanyaan dinamik (iaitu, pertanyaan perlu dilaraskan mengikut parameter yang berbeza), mungkin tidak sesuai untuk menggunakan pernyataan pertanyaan statik tradisional atau JPQL (Bahasa Pertanyaan Kegigihan Java). Dalam kes ini, menggunakan API Kriteria JPA boleh menjadi lebih mudah dan fleksibel.
API Kriteria JPA ialah kaedah pertanyaan berorientasikan objek, yang dilaksanakan dengan memasang syarat pertanyaan dan mengembalikan hasil melalui kod. Berbanding dengan pernyataan pertanyaan statik tradisional atau JPQL, salah satu kelebihan utamanya ialah ia boleh menggabungkan keadaan pertanyaan yang berbeza secara dinamik semasa proses pertanyaan, dan boleh bertindak balas dengan lebih baik kepada perubahan dalam model data. Artikel ini akan memperkenalkan cara menggunakan API Kriteria JPA untuk melaksanakan pertanyaan dinamik.
- Kelas Entiti
Pertama, kita perlu mempunyai kelas entiti Katakan kita mempunyai kelas entiti Pengguna, yang mempunyai medan seperti id, nama, umur, jantina , dsb. Sebelum menggunakan API Kriteria JPA, kita perlu mentakrifkan kelas entiti ini terlebih dahulu.
@Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Integer age; private Boolean gender; // 省略getter和setter方法 }
- CriteriaBuilder
Sebelum menggunakan API Kriteria JPA, kita perlu mendapatkan CriteriaBuilder terlebih dahulu. CriteriaBuilder ialah kelas kilang yang digunakan untuk mencipta pelbagai CriteriaQuery, Predikat dan Ungkapan. Biasanya, kita boleh mendapatkan CriteriaBuilder melalui EntityManager.
@PersistenceContext private EntityManager entityManager; public List<User> getUsers() { CriteriaBuilder cb = entityManager.getCriteriaBuilder(); // ... 继续后续操作 }
- CriteriaQuery
CriteriaQuery digunakan untuk operasi pertanyaan Kami boleh menggunakannya untuk menetapkan syarat pertanyaan dan jenis hasil yang dikembalikan. Apabila menetapkan syarat pertanyaan, kami boleh menetapkan berbilang sekatan melalui Predikat ialah alat kecil dalam API Kriteria untuk membina syarat pertanyaan.
public List<User> getUsers(String name, Integer age, Boolean gender) { CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<User> cq = cb.createQuery(User.class); Root<User> root = cq.from(User.class); List<Predicate> predicates = new ArrayList<>(); if (name != null) { Predicate namePredicate = cb.equal(root.get("name"), name); predicates.add(namePredicate); } if (age != null) { Predicate agePredicate = cb.greaterThanOrEqualTo(root.get("age"), age); predicates.add(agePredicate); } if (gender != null) { Predicate genderPredicate = cb.equal(root.get("gender"), gender); predicates.add(genderPredicate); } cq.where(predicates.toArray(new Predicate[0])); return entityManager.createQuery(cq).getResultList(); }
Kod di atas menunjukkan cara menggunakan CriteriaBuilder untuk mencipta CriteriaQuery. Pertama, kami menggunakan EntityManager untuk mendapatkan CriteriaBuilder. Kemudian, kami mencipta objek pertanyaan CriteriaQuery
- Ekspresi
Ekspresi ialah satu lagi konsep yang sangat berguna dalam API Kriteria Ia mewakili ungkapan operasi yang boleh digunakan untuk mengira dan membandingkan beberapa jenis data yang kompleks. Apabila menggunakan Ungkapan, kami boleh melakukan penapisan yang lebih halus di bawah syarat pertanyaan asal. Sebagai contoh, kita boleh menggunakan kaedah antara untuk menanyakan pengguna yang umurnya berada dalam julat tertentu.
public List<User> getUsersInRange(Integer minAge, Integer maxAge) { CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<User> cq = cb.createQuery(User.class); Root<User> root = cq.from(User.class); Expression<Integer> ageExpression = root.get("age"); Predicate agePredicate = cb.between(ageExpression, minAge, maxAge); cq.where(agePredicate); return entityManager.createQuery(cq).getResultList(); }
Kod di atas menanyakan pengguna yang umurnya antara minAge dan maxAge. Perlu diingat bahawa di sini kami menggunakan Expression
- Pertanyaan berbilang jadual
Dalam sesetengah senario, kita perlu menanyakan berbilang jadual. Pada ketika ini kita perlu menggunakan Sertai, iaitu konsep teras yang digunakan untuk pertanyaan berbilang jadual. Katakan kita mempunyai kelas entiti Tugas, yang mempunyai dua medan, id dan UserId dikaitkan dengan medan id dalam kelas entiti Pengguna.
@Entity @Table(name = "task") public class Task { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Long userId; // 省略getter和setter方法 }
Kami boleh mengaitkan dua kelas entiti melalui Sertai dan tanya semua Tugas di bawah Pengguna tertentu.
public List<Task> getUserTasks(Long userId) { CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<Task> cq = cb.createQuery(Task.class); Root<Task> taskRoot = cq.from(Task.class); Join<Task, User> userJoin = taskRoot.join("user"); Predicate predicate = cb.equal(userJoin.get("id"), userId); cq.where(predicate); return entityManager.createQuery(cq).getResultList(); }
- Pertanyaan paging
Akhir sekali, kami memperkenalkan cara untuk melaksanakan pertanyaan paging dalam API Kriteria JPA. Berbanding dengan pertanyaan statik, pertanyaan paging juga sangat biasa, dan amat penting untuk senario dengan jumlah data yang agak besar. Dalam API Kriteria JPA, kita boleh menggunakan kaedah setFirstResult dan setMaxResults untuk menentukan kedudukan permulaan pertanyaan dan bilangan maksimum hasil yang dikembalikan.
public List<User> getUsers(Integer pageNum, Integer pageSize) { CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<User> cq = cb.createQuery(User.class); Root<User> root = cq.from(User.class); int offset = (pageNum - 1) * pageSize; entityManager.createQuery(cq).setFirstResult(offset).setMaxResults(pageSize); return entityManager.createQuery(cq).getResultList(); }
Kod di atas menunjukkan cara menetapkan syarat pertanyaan paging Mula-mula, kami mengira offset melalui pageNum dan pageSize, menetapkan kedudukan permulaan, dan kemudian menetapkan bilangan maksimum hasil yang dikembalikan melalui setMaxResults. Sudah tentu, dalam aplikasi praktikal, kami juga boleh melakukan pertanyaan paging dengan cara lain.
Kesimpulan
API Kriteria JPA ialah alat yang sangat fleksibel dan berkuasa yang boleh memberikan sokongan yang baik dalam pertanyaan dinamik. Sudah tentu, dalam aplikasi sebenar, kami juga perlu mempertimbangkan isu seperti prestasi, tetapi ia boleh menjadikan kod kami lebih mudah dibaca, diselenggara dan berskala. Saya harap artikel ini dapat membantu pembaca yang menggunakan JPA atau mempertimbangkan untuk menggunakan JPA.
Atas ialah kandungan terperinci Pembangunan Bahagian Belakang Java: Pertanyaan Dinamik Menggunakan API Kriteria JPA. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Terdapat lima arah pekerjaan dalam industri Java, yang manakah sesuai untuk anda? Java, sebagai bahasa pengaturcaraan yang digunakan secara meluas dalam bidang pembangunan perisian, sentiasa popular. Disebabkan sifat merentas platform yang kukuh dan rangka kerja pembangunan yang kaya, pembangun Java mempunyai pelbagai peluang pekerjaan dalam pelbagai industri. Dalam industri Java, terdapat lima arah pekerjaan utama, termasuk pembangunan JavaWeb, pembangunan aplikasi mudah alih, pembangunan data besar, pembangunan terbenam dan pembangunan pengkomputeran awan. Setiap arah mempunyai ciri-ciri dan kelebihannya Lima arah akan dibincangkan di bawah.

Pengaturcaraan reaktif menjadi semakin penting dalam pembangunan web hari ini. AkkaHTTP ialah rangka kerja HTTP berprestasi tinggi berdasarkan Akka, sesuai untuk membina API gaya REST reaktif. Artikel ini akan memperkenalkan cara menggunakan AkkaHTTP untuk membina API reaktif, sambil memberikan beberapa contoh praktikal. Mari mulakan! Mengapa memilih AkkaHTTP Apabila membangunkan API reaktif, adalah penting untuk memilih rangka kerja yang betul. AkkaHTTP adalah pilihan yang sangat baik kerana

Bagaimana untuk menyelesaikan masalah transaksi pangkalan data dalam pembangunan fungsi back-end Java? Dalam pembangunan fungsi back-end Java, fungsi yang melibatkan operasi pangkalan data adalah sangat biasa. Dalam operasi pangkalan data, urus niaga adalah konsep yang sangat penting. Transaksi ialah unit logik yang terdiri daripada urutan operasi pangkalan data yang sama ada dilaksanakan sepenuhnya atau tidak dilaksanakan sama sekali. Dalam aplikasi praktikal, kita selalunya perlu memastikan bahawa satu set operasi pangkalan data yang berkaitan sama ada semuanya berjaya dilaksanakan atau semuanya digulung semula untuk mengekalkan ketekalan dan kebolehpercayaan data. Jadi, bagaimana untuk membangunkan di backend Java

Bagaimana untuk mengendalikan permintaan merentas domain dalam pembangunan fungsi backend Java? Dalam model pembangunan di mana bahagian hadapan dan bahagian belakang dipisahkan, ia adalah senario yang sangat biasa bagi bahagian hadapan untuk menghantar permintaan kepada antara muka API bahagian belakang untuk mendapatkan data melalui JavaScript. Walau bagaimanapun, disebabkan dasar asal yang sama penyemak imbas, terdapat sekatan pada permintaan merentas domain. Permintaan merentas domain bermakna halaman akhir hadapan meminta pelayan dengan nama domain yang berbeza, port yang berbeza atau protokol yang berbeza melalui AJAX dan kaedah lain. Artikel ini akan memperkenalkan kaedah biasa untuk mengendalikan permintaan merentas domain dalam pembangunan fungsi back-end Java, dengan contoh kod. Selesaikan merentas domain

Dengan pembangunan berterusan teknologi Internet, membangun dan mereka bentuk RESTful API telah menjadi tugas yang penting. RESTful API menyediakan mekanisme yang mudah, ringan, fleksibel dan boleh dipercayai untuk interaksi antara perkhidmatan yang berbeza. Pada masa yang sama, membina API RESTful yang selamat menjadi semakin penting. Dalam artikel ini, kami akan meneroka cara membina API RESTful yang selamat dalam pembangunan backend Java. 1. Memahami RESTfulAPI RESTfulAPI ialah a

Bagaimana untuk melaksanakan kegigihan data dalam pembangunan fungsi back-end Java? Dengan perkembangan pesat Internet, data telah menjadi aset teras yang tidak boleh diabaikan oleh organisasi dan perusahaan. Dalam pembangunan back-end Java, mencapai ketekunan data adalah tugas penting. Artikel ini akan memperkenalkan beberapa kaedah kegigihan data biasa dan menggunakan contoh kod untuk menunjukkan cara melaksanakan kegigihan data dalam Java. 1. Pangkalan data hubungan Pangkalan data hubungan adalah salah satu kaedah kegigihan data yang paling biasa. Di Jawa kita boleh menggunakan JDBC (JavaDa

Bagaimana untuk melaksanakan fungsi carian dalam pembangunan fungsi back-end Java? Fungsi carian ialah ciri penting dalam aplikasi moden. Sama ada mencari produk di platform e-dagang atau mencari rakan di media sosial, fungsi carian menyediakan pengguna cara yang mudah dan cekap untuk mendapatkan maklumat. Dalam pembangunan back-end Java, kita boleh menggunakan pelbagai teknologi dan perpustakaan untuk melaksanakan fungsi carian. Artikel ini akan memperkenalkan kaedah yang biasa digunakan untuk melaksanakan fungsi carian, dan memberikan contoh kod menggunakan bahasa Java sebagai contoh. Dalam pembangunan backend Java, kami biasanya

Bagaimana untuk menangani pengecualian dalam pembangunan fungsi backend Java? Dalam pembangunan backend Java, mengendalikan situasi pengecualian adalah tugas yang sangat penting. Pengecualian mungkin berlaku pada masa jalan, seperti pengecualian penuding nol, pengecualian luar sempadan tatasusunan, dsb., atau pengecualian itu mungkin dalam logik perniagaan, seperti sumber tidak ditemui, kebenaran tidak mencukupi, dsb. Mengendalikan pengecualian ini dengan betul bukan sahaja dapat meningkatkan kestabilan dan kebolehpercayaan kod, tetapi juga meningkatkan kebolehselenggaraan dan kebolehbacaan kod. Artikel ini akan memperkenalkan cara untuk mengendalikan situasi tidak normal secara munasabah dalam pembangunan back-end Java dan memberikan kod yang sepadan.
