JPA JPQL基本操作


JPQL允許我們建立靜態和動態查詢。 現在,我們將在下表中使用這兩種查詢來執行一些基本的JPQL操作。

JPQL動態查詢範例

在這個例子中,我們將使用createQuery()方法從資料庫中獲取單個列的值。

完整的目錄結構如下 -

檔案:StudentEntity.java -

package com.yiibai.jpa;

import javax.persistence.*;

@Entity
@Table(name = "student")
public class StudentEntity {

    @Id
    private int s_id;
    private String s_name;
    private int s_age;

    public StudentEntity(int s_id, String s_name, int s_age) {
        super();
        this.s_id = s_id;
        this.s_name = s_name;
        this.s_age = s_age;
    }

    public StudentEntity() {
        super();
    }

    public int getS_id() {
        return s_id;
    }

    public void setS_id(int s_id) {
        this.s_id = s_id;
    }

    public String getS_name() {
        return s_name;
    }

    public void setS_name(String s_name) {
        this.s_name = s_name;
    }

    public int getS_age() {
        return s_age;
    }

    public void setS_age(int s_age) {
        this.s_age = s_age;
    }

}

組態檔案:Persistence.xml -

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="Student_details">
        <class>com.yiibai.jpa.StudentEntity</class>  
        <properties>
            <property name="javax.persistence.jdbc.driver"
                value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url"
                value="jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password"
                value="123456" />
            <property name="eclipselink.logging.level" value="SEVERE" />
            <property name="eclipselink.ddl-generation"
                value="create-or-extend-tables" />
        </properties>
    </persistence-unit>

</persistence>

檔案:FetchColumn.java -

package com.yiibai.jpa.jpql;

import javax.persistence.*;
import java.util.*;

public class FetchColumn {

    public static void main(String args[]) {

        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();

        Query query = em.createQuery("Select s.s_name from StudentEntity s");
        @SuppressWarnings("unchecked")
        List<String> list = query.getResultList();
        System.out.println("Student Name :");
        for (String s : list) {

            System.out.println(s);

        }

        em.close();
        emf.close();
    }

}

執行上面範例程式碼,得到以下結果 -

Student Name :
Gaurav
Rahul
Chris
Ronit
Roy

JPQL靜態查詢範例

在這個例子中,我們將使用createNamedQuery()方法從資料庫中獲取單個列的值。

檔案:StudentEntity.java -

package com.yiibai.jpa;

import javax.persistence.*;

@Entity
@Table(name = "student")
@NamedQuery(name = "find name", query = "Select s from StudentEntity s")
public class StudentEntity {

    @Id
    private int s_id;
    private String s_name;
    private int s_age;

    public StudentEntity(int s_id, String s_name, int s_age) {
        super();
        this.s_id = s_id;
        this.s_name = s_name;
        this.s_age = s_age;
    }

    public StudentEntity() {
        super();
    }

    public int getS_id() {
        return s_id;
    }

    public void setS_id(int s_id) {
        this.s_id = s_id;
    }

    public String getS_name() {
        return s_name;
    }

    public void setS_name(String s_name) {
        this.s_name = s_name;
    }

    public int getS_age() {
        return s_age;
    }

    public void setS_age(int s_age) {
        this.s_age = s_age;
    }

}

檔案:FetchColumn.java -

package com.yiibai.jpa.jpql;

import javax.persistence.*;
import java.util.*;

import javax.persistence.*;

import com.yiibai.jpa.StudentEntity;

import java.util.*;

public class FetchColumn {

    public static void main(String args[]) {

        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();

        Query query = em.createNamedQuery("find name");
        @SuppressWarnings("unchecked")
        List<StudentEntity> list = query.getResultList();
        System.out.println("Student Name :");
        for (StudentEntity s : list) {

            System.out.println(s.getS_name());

        }

        em.close();
        emf.close();
    }

}

執行上面範例程式碼,得到以下結果 -