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.

  1. Nggunakake jeneng kelas tinimbang jeneng tabel.
  2. Nggunakake jeneng kolom kelas tinimbang jeneng kolom tabel.
  3. 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 Userjeneng kelas, lan userjeneng 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 selectnalika 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.