JPA标准SELECT子句

Posted borter

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JPA标准SELECT子句相关的知识,希望对你有一定的参考价值。

SELECT子句用于从数据库中获取数据。 数据可以以单个表达式或多个表达式的形式检索。 在Criteria API中,每个表单都有不同的表达。

标准SELECT示例

通常,select()方法 SELECT子句来获取所有类型表单。 在这里,我们将在student表上执行几个SELECT操作。 假设该表包含以下记录 -

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `S_ID` int(11) NOT NULL,
  `S_NAME` varchar(255) DEFAULT NULL,
  `S_AGE` int(11) DEFAULT NULL,
  PRIMARY KEY (`S_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (‘101‘, ‘Gaurav‘, ‘24‘);
INSERT INTO `student` VALUES (‘102‘, ‘Rahul‘, ‘22‘);
INSERT INTO `student` VALUES (‘103‘, ‘Chris‘, ‘20‘);
INSERT INTO `student` VALUES (‘104‘, ‘Ronit‘, ‘26‘);
INSERT INTO `student` VALUES (‘105‘, ‘Roy‘, ‘21‘);
SQL

现在,请按照以下步骤执行操作: -

第1步: 创建一个实体类。在com.yiibai.jpa包下创建了StudentEntity.java类文件。 该类包含三个属性:s_ids_names_age以及所有必需的注解。

文件: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;
    }

}
Java

第2步: 将实体类和其他数据库配置映射到 persistence.xml 文件中。

文件: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>
XML

这里,我们创建了基本实体类并将配置映射到persistence.xml 文件中,可以通过以下方式执行不同类型的SELECT操作 -

1. 选择单个表达式

在这里,我们将通过一个简单的示例从数据库中获取单列值。

文件:SingleFetch.java -

package com.yiibai.jpa.jpql;

import com.yiibai.jpa.StudentEntity;
import javax.persistence.*;
import javax.persistence.criteria.*;

import java.util.*;

public class SingleFetch {

    public static void main(String args[]) {

        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<StudentEntity> cq = cb.createQuery(StudentEntity.class);

        Root<StudentEntity> stud = cq.from(StudentEntity.class);

        cq.select(stud.get("s_name"));

        CriteriaQuery<StudentEntity> select = cq.select(stud);
        TypedQuery<StudentEntity> q = em.createQuery(select);
        List<StudentEntity> list = q.getResultList();

        System.out.println("s_id");

        for (StudentEntity s : list) {
            System.out.println(s.getS_id());

        }

        em.getTransaction().commit();
        em.close();
        emf.close();
    }
}
Java

执行上面代码,得到以下输出结果 -

s_id
101
102
103
104
105
Shell

2. 选择多个表达式

在这里,我们将通过一个简单的例子从数据库中获取多列的值。

文件:MultiFetch.java -

package com.yiibai.jpa.jpql;

import com.yiibai.jpa.StudentEntity;
import javax.persistence.*;
import javax.persistence.criteria.*;

import java.util.*;

public class MultiFetch {

    public static void main(String args[]) {

        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<StudentEntity> cq = cb.createQuery(StudentEntity.class);

        Root<StudentEntity> stud = cq.from(StudentEntity.class);

        cq.multiselect(stud.get("s_id"), stud.get("s_name"), stud.get("s_age"));
        CriteriaQuery<StudentEntity> select = cq.select(stud);
        TypedQuery<StudentEntity> q = em.createQuery(select);
        List<StudentEntity> list = q.getResultList();

        System.out.print("s_id");
        System.out.print("	 s_name");
        System.out.println("	 s_age");

        for (StudentEntity s : list) {
            System.out.print(s.getS_id());
            System.out.print("	" + s.getS_name());
            System.out.println("	" + s.getS_age());
        }

        em.getTransaction().commit();
        em.close();
        emf.close();
    }
}
Java

执行上面代码,得到以下输出结果 -

s_id     s_name     s_age
101    Gaurav    24
102    Rahul    22
103    Chris    20
104    Ronit    26
105    Roy    21

以上是关于JPA标准SELECT子句的主要内容,如果未能解决你的问题,请参考以下文章

JPA标准WHERE子句

JPA标准GROUP BY子句

如何通过分页在 Spring Data JPA 中的 SELECT 子句中按别名对投影进行排序?

如何在 JPA 命名查询的 IN 子句中使用动态参数?

C#图解教程 第十九章 LINQ

@Query的SELECT子句中的参数?