zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    ClickOnce發布經驗
    reporting Server組件不全引起的致命錯誤
    異步調用
    Usercontrol Hosted in IE
    MATLAB命令大全(转载)
    一种保护眼睛的好方法
    关于oracle自动编号
    An Algorithm Summary of Programming Collective Intelligence (1)
    An Algorithm Summary of Programming Collective Intelligence (3)
    An Algorithm Summary of Programming Collective Intelligence (4)
  • 原文地址:https://www.cnblogs.com/borter/p/12424002.html
Copyright © 2011-2022 走看看