JPA JPQL批量数据操作

广告位

在上一节中,我们只提取了单列的值。 现在,我们将学习如何处理批量数据并执行相应的操作。 假设当前student…

在上一节中,我们只提取了单列的值。 现在,我们将学习如何处理批量数据并执行相应的操作。

假设当前student表有如下数据 –

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');  

JPQL批量数据示例

在这个例子中,我们将采用一个基本的实体类(StudentEntity.java)并对其执行不同的操作。

com.yiibai.jpa包下创建一个名为StudentEntity.java的实体类。

文件: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文件中。

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

StudentEntity.java 类上执行以下操作。

1. JPQL提取记录

在这里,我们将从数据库中提取所有记录。

文件:FetchData.java

package com.yiibai.jpa.jpql;    import com.yiibai.jpa.StudentEntity;  import javax.persistence.*;  import java.util.*;    public class FetchData {        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 from StudentEntity s ");            @SuppressWarnings("unchecked")          List<StudentEntity> list = (List<StudentEntity>) query.getResultList();            System.out.print("s_id");          System.out.print("t s_name");          System.out.println("t s_age");            for (StudentEntity s : list) {              System.out.print(s.getS_id());              System.out.print("t" + s.getS_name());              System.out.print("t" + s.getS_age());              System.out.println();          }          em.getTransaction().commit();          em.close();          emf.close();      }  }  

执行上面示例代码,得到以下结果 –

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

2. JPQL更新记录

在这里,我们将更新数据库中的记录。

文件:UpdateData.java

package com.yiibai.jpa.jpql;    import javax.persistence.*;    public class UpdataData {        public static void main(String args[]) {            EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");          EntityManager em = emf.createEntityManager();          em.getTransaction().begin();            Query query = em.createQuery("update StudentEntity SET s_age=25 where s_id>103");          query.executeUpdate();            em.getTransaction().commit();          em.close();          emf.close();      }  }  

执行上面示例代码后,在MySQL工作台下生成以下student表。 要查看数据,请在MySQL中运行select * from student

mysql> select * from student;  +------+--------+-------+  | S_ID | S_NAME | S_AGE |  +------+--------+-------+  |  101 | Gaurav |    24 |  |  102 | Rahul  |    22 |  |  103 | Chris  |    20 |  |  104 | Ronit  |    25 |  |  105 | Roy    |    25 |  +------+--------+-------+  5 rows in set  

3. JPQL删除记录

在这里,我们将从数据库中删除特定的记录。

文件:DeleteData.java

package com.yiibai.jpa.jpql;    import javax.persistence.*;    public class DeleteData {        public static void main(String args[]) {            EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");          EntityManager em = emf.createEntityManager();          em.getTransaction().begin();            Query query = em.createQuery("delete from StudentEntity where s_id=102");            query.executeUpdate();            em.getTransaction().commit();          em.close();          emf.close();      }  }  

执行上面示例代码后,在MySQL工作台下生成以下student表。 要查看数据,请在MySQL中运行select * from student。如下结果 –

mysql> select * from student;  +------+--------+-------+  | S_ID | S_NAME | S_AGE |  +------+--------+-------+  |  101 | Gaurav |    24 |  |  103 | Chris  |    20 |  |  104 | Ronit  |    25 |  |  105 | Roy    |    25 |  +------+--------+-------+  4 rows in set  

贺, 贺朝

关于作者: 贺朝

为您推荐