JPA标准API
来源:互联网 发布:慈溪行知职高分数线 编辑:程序博客网 时间:2024/04/29 11:26
标准是用来定义查询实体的预定义API。它是定义JPQL查询的另一种方式。这些查询是类型安全的,可移植的,并且容易被改变的语法进行修改。类似于JPQL,它遵循的抽象模式(容易编辑模式)和嵌入的对象。元数据API是夹杂着标准的API模型持久性实体的标准查询。
标准的API的主要优点是,错误可以较早在编译时被检测到。基于字符串JPQL查询和基于查询JPA的范围是在性能和效率相同。
标准API历史
该标准被纳入因此标准的每一步中JPA的规范通知所有版本JPA。
- 在JPA2.0中,标准查询API,查询的标准化开发。
- 在JPA2.1,标准更新和删除(批量更新和删除)都包括在内。
标准查询结构
该标准与JPQL是密切相关的,并允许使用类似的操作符在他们的查询设计。它遵循javax.persistence.criteria包设计一个查询。查询结构指的语法条件查询。
下面简单的条件查询返回数据源中的实体类的所有实例。
EntityManager em = ...;CriteriaBuilder cb = em.getCriteriaBuilder();CriteriaQuery<Entity class> cq = cb.createQuery(Entity.class);Root<Entity> from = cq.from(Entity.class);cq.select(Entity);TypedQuery<Entity> q = em.createQuery(cq);List<Entity> allitems = q.getResultList();
查询演示了基本的步骤来创建一个标准。
EntityManager实例被用来创建一个CriteriaBuilder对象。
CriteriaQuery实例是用来创建一个查询对象。这个查询对象的属性将与该查询的细节进行修改。
CriteriaQuery.form方法被调用来设置查询根。
CriteriaQuery.select被调用来设置结果列表类型。
TypedQuery<T>实例是用来准备一个查询执行和指定的查询结果的类型。
在TypedQuery<T>对象getResultList方法来执行查询。该查询返回实体的集合,结果存储在一个列表中。
标准API示例
让我们考虑 employee 数据库的例子。让我们假定该 jpadb.employee表包含以下记录:
Eid Ename SalaryDeg401 Gopal 40000Technical Manager402 Manisha 40000Proof reader403 Masthanvali 35000Technical Writer404 Satish 30000Technical writer405 Krishna 30000Technical Writer406 Kiran 35000Proof reader
在名为JPA_Eclipselink_Criteria Eclipse IDE中创建JPA项目。这个项目的所有模块下面讨论:
创建实体
在'src'中创建包名为com.yiibai.eclipselink.entity
创建一个名为Employee.java类。Employee实体如下图所示:
package com.yiibai.eclipselink.entity;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;@Entitypublic class Employee { @Id @GeneratedValue(strategy= GenerationType.AUTO) private int eid; private String ename; private double salary; private String deg; public Employee(int eid, String ename, double salary, String deg) { super( ); this.eid = eid; this.ename = ename; this.salary = salary; this.deg = deg; } public Employee( ) { super(); } public int getEid( ) { return eid; } public void setEid(int eid) { this.eid = eid; } public String getEname( ) { return ename; } public void setEname(String ename) { this.ename = ename; } public double getSalary( ) { return salary; } public void setSalary(double salary) { this.salary = salary; } public String getDeg( ) { return deg; } public void setDeg(String deg) { this.deg = deg; } @Override public String toString() { return "Employee [eid=" + eid + ", ename=" + ename + ", salary=" + salary + ", deg=" + deg + "]"; }}
Persistence.xml
Persistence.xml 文件的内容如下:
<?xml version="1.0" encoding="UTF-8"?><persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="Eclipselink_JPA" transaction-type="RESOURCE_LOCAL"> <class>com.yiibai.eclipselink.entity.Employee</class> <properties> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpadb"/> <property name="javax.persistence.jdbc.user" value="root"/> <property name="javax.persistence.jdbc.password" value="root"/> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> <property name="eclipselink.logging.level" value="FINE"/> <property name="eclipselink.ddl-generation" value="create-tables"/> </properties> </persistence-unit></persistence>
服务类
该模块包含服务类,它实现了使用元数据API的初始化条件查询的一部分。创建一个名为“com.yiibai.eclipselink.service'包。在这个包下创建一个类CriteriaAPI.java。在DAO类如下所示:
package com.yiibai.eclipselink.service;import java.util.List;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;import javax.persistence.TypedQuery;import javax.persistence.criteria.CriteriaBuilder;import javax.persistence.criteria.CriteriaQuery;import javax.persistence.criteria.Root;import com.yiibai.eclipselink.entity.Employee;public class CriteriaApi { public static void main(String[] args) { EntityManagerFactory emfactory = Persistence. createEntityManagerFactory( "Eclipselink_JPA" ); EntityManager entitymanager = emfactory. createEntityManager( ); CriteriaBuilder criteriaBuilder = entitymanager .getCriteriaBuilder(); CriteriaQuery<Object> criteriaQuery = criteriaBuilder .createQuery(); Root<Employee> from = criteriaQuery.from(Employee.class); //select all records System.out.println(“Select all records”); CriteriaQuery<Object> select =criteriaQuery.select(from); TypedQuery<Object> typedQuery = entitymanager .createQuery(select); List<Object> resultlist= typedQuery.getResultList(); for(Object o:resultlist) { Employee e=(Employee)o; System.out.println("EID : "+e.getEid() +" Ename : "+e.getEname()); } //Ordering the records System.out.println(“Select all records by follow ordering”); CriteriaQuery<Object> select1 = criteriaQuery.select(from); select1.orderBy(criteriaBuilder.asc(from.get("ename"))); TypedQuery<Object> typedQuery1 = entitymanager .createQuery(select); List<Object> resultlist1= typedQuery1.getResultList(); for(Object o:resultlist1) { Employee e=(Employee)o; System.out.println("EID : "+e.getEid() +" Ename : "+e.getEname()); } entitymanager.close( ); emfactory.close( ); }}
编译和执行上述程序后,将在Eclipse IDE的控制台面板输出下面的内容。
Select All recordsEID : 401 Ename : GopalEID : 402 Ename : ManishaEID : 403 Ename : MasthanvaliEID : 404 Ename : SatishEID : 405 Ename : KrishnaEID : 406 Ename : KiranSelect All records by follow OrderingEID : 401 Ename : GopalEID : 406 Ename : KiranEID : 405 Ename : KrishnaEID : 402 Ename : ManishaEID : 403 Ename : MasthanvaliEID : 404 Ename : Satish
本站代码下载:http://www.yiibai.com/siteinfo/download.html
- JPA标准API
- JPA标准API
- JPA 和hibernate-jpa-api
- JPA基础知识----JPA 基本注解,JPA API
- JPA-Java Persistence API
- JPA基本API描述
- JPA API(四)
- JPA基本API描述
- JPA的CRITICAL API
- 10. JPA API 详解
- JPA java presistence API
- JPA的核心API
- JPA常见API
- JPA-3 核心API
- jpa的Api
- jpa核心api
- JPA-Java Persistence API
- JPA的一些API
- Android-右上角menu菜单不显示
- Android OpenGL ES 离屏渲染(offscreen render)
- js 面向对象
- TSQL 聚合函数忽略NULL值
- 软件之路
- JPA标准API
- 算法提高 8皇后·改
- 在支持Markdown的编辑器里添加Latex公式
- 映射文件中用表达式
- 使用keepalived实现双机热备
- RxJava 1 到RxJava2
- Failed to find style 'buttonstyle' in current theme
- 数据库的硬盘空间使用
- lightoj-1221-Travel Company(spfa找负环)