1.1 Pambuka HQL
Sadurunge, sampeyan wis kenal karo Hibernate, lan saiki aku bakal ngenalake sampeyan HQL , alias Hibernate Query Language . Nyatane, iki SQL diowahi kanggo nulis pitakon ing Hibernate. Wis sawetara prabédan utama.
- Nggunakake jeneng kelas tinimbang jeneng tabel.
- Nggunakake jeneng kolom kelas tinimbang jeneng kolom tabel.
- Panggunaan pilihan saka pilih.
Ayo takon Hibernate bali menyang kabeh pangguna sing ana ing database. Mangkene panjaluk kasebut:
from User
Iku kabeh, kanggo mbandhingake, kita nampilake pitakon sing padha ing SQL:
select * from user
Punika User
jeneng kelas, lan user
jeneng meja.
Kode Jawa lengkap bakal katon kaya iki:
public List<User> getAllUsers() {
try (Session session = sessionFactory.openSession()) {
return session.createQuery("from User", User.class).list();
}
}
Yen ora, HQL meh padha karo SQL - uga duwe operator:
WHERE
ORDER BY
GROUP BY
HAVING
1.2 Conto nggarap HQL
Mungkin conto sadurunge rada mbingungake amarga tabel lan jeneng lapangan sing padha. Ayo goleki conto khusus sing bakal luwih gampang.
Ayo kita duwe tabel user_data sing ngemot kolom ing ngisor iki:
- id INT
- jeneng panganggo VARCHAR(100)
- user_level INT
- pangguna_digawe DATE
Kita bakal nggawe kelas Java sing bakal peta menyang tabel iki:
@Entity
@Table(name="user_data")
class User {
@Id
@GeneratedValue
public Integer id;
@Column(name="user_name")
public String name;
@Column(name="user_level")
public Integer level;
@Column(name="user_created")
public Date created;
}
Saiki ayo nulis sawetara conto:
HQL | SQL |
---|---|
saka Panganggo | pilih * saka user_data |
saka Panganggo ngendi id=3 | pilih * saka user_data ngendi id=3 |
saka pangguna ing ngendi level ing (10,20,30) | pilih * saka user_data ngendi user_level IN (10, 20, 30) |
saka pesenan pangguna dening digawe asc | pilih * saka user_data order dening user_created asc |
saka pangguna ing ngendi jeneng kaya 'test' | pilih * saka user_data ngendi user_name kaya 'test' |
Pitakonan kasebut meh padha, lan maca pitakon HQL nalika sampeyan kenal karo jeneng kelas lan kolom kasebut gampang kaya maca pitakon SQL. Bisa uga rada angel kanggo nulis, nanging maneh, pitakon sing rumit banget arang ditulis ing HQL.
1.3 Nggunakake pilih
Ing HQL, sampeyan bisa nggunakake select
nalika jinis data asil ora cocog karo jinis sing ditemtokake ing from
.
Contone, kita pengin njaluk jeneng kabeh pangguna sing ana ing tabel user_data , banjur kita kudu nulis pitakon ing ngisor iki:
select name from User
Uga, yen ana duplikat ing antarane jeneng, sampeyan bisa nggunakake operator DISTINCT
:
select distinct name from User
Alias kerjane padha karo ing SQL:
select distinct u.name from User u where u.created > '2020-01-01'
Inggih, rampung ing wangun kode Jawa, panjalukan iki bakal katon kaya iki:
public List<String> getUserNames() {
try (Session session = sessionFactory.openSession()) {
String hql = "select distinct u.name from User u where u.created > '2020-01-01'";
Query<String> query = session.createQuery(hql , String.class);
return query.list();
}
}
Elinga yen pitakon kudu ngasilake dhaptar jeneng. Jeneng kalebu jinis String, mula jinis fungsi lan parameter jinis kelas Query kalebu jinis String.
GO TO FULL VERSION