Java持久性API(JPA)第6讲——关系操作

BK3296蓝牙音频SoC深度评测:如何用这颗芯片打造超低功耗TWS耳机? 本文深度评测BK3296蓝牙音频SoC在TWS耳机中的应用,重点解析其22nm工艺带来的超低功耗优势(A2DP模式仅2.8mA)和3×3mm封装设计。通过芯片架构分析、双麦降噪调优及开发套件使用指南,为工程师提供打造高性能TWS耳机的完整解决方案,显著提升续航和音频质量。 阅读详情

  

目标:通过实例掌握常用的具有关系的实体操作,实例采用大家比较熟悉的订单管理。
主要内容:
n         创建数据库表,包括订单表和订单明细表。
n         创建持久单元和实体类
n         创建管理实体类的会话Bean,添加添加订单、删除订单和察看所有订单的功能。
n         编写客户端程序进行测试。
注意:在完成第三次大作业的时候可以参考这个内容,但是不要完全按照这个做。
1、 创建数据库表
订单管理包括订单表和订单明细表(正常情况下,还应该包含物品表,为了讲解方便),表定义语句如下:
create table ordertable
(
   orderid char(10) not null,
   orderdate date,
   orderstate char(1),
   userid char(10),
   primary key(orderid)
);
create table orderdetail
(
   orderid char(10),
   goodid char(10),
   quantity int,
   primary key(orderid,goodid),
   foreign key(orderid) references ordertable(orderid)
);
 
2、 创建持久单元和实体类
操作过程与前面几讲的操作过程相同。
根据上面的表结构生成的实体类的代码如下。
2.1 实体类Ordertable:
package order;
 
import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
 
@Entity
@Table(name = "ordertable")
@NamedQueries( {
        @NamedQuery(name = "Ordertable.findByOrderid", query = "SELECT o FROM Ordertable o WHERE o.orderid = :orderid"),
        @NamedQuery(name = "Ordertable.findByOrderdate", query = "SELECT o FROM Ordertable o WHERE o.orderdate = :orderdate"),
        @NamedQuery(name = "Ordertable.findByOrderstate", query = "SELECT o FROM Ordertable o WHERE o.orderstate = :orderstate"),
        @NamedQuery(name = "Ordertable.findByUserid", query = "SELECT o FROM Ordertable o WHERE o.userid = :userid")
    })
public class Ordertable implements Serializable {
 
    @Id
    @Column(name = "orderid", nullable = false)
    private String orderid;
 
    @Column(name = "orderdate")
    @Temporal(TemporalType.DATE)
    private Date orderdate;
 
    @Column(name = "orderstate")
    private Character orderstate;
 
    @Column(name = "userid")
    private String userid;
 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "ordertable",fetch=FetchType.EAGER)
    private Collection<Orderdetail> orderdetailCollection;
   
    /** Creates a new instance of Ordertable */
    public Ordertable() {
    }
 
    public Ordertable(String orderid) {
        this.orderid = orderid;
    }
 
    public String getOrderid() {
        return this.orderid;
    }
 
    public void setOrderid(String orderid) {
        this.orderid = orderid;
    }
 
    public Date getOrderdate() {
        return this.orderdate;
    }
 
    public void setOrderdate(Date orderdate) {
        this.orderdate = orderdate;
    }
 
    public Character getOrderstate() {
        return this.orderstate;
    }
 
    public void setOrderstate(Character orderstate) {
        this.orderstate = orderstate;
    }
 
    public String getUserid() {
        return this.userid;
    }
 
    public void setUserid(String userid) {
        this.userid = userid;
    }
 
    public Collection<Orderdetail> getOrderdetailCollection() {
        return this.orderdetailCollection;
    }
 
    public void setOrderdetailCollection(Collection<Orderdetail> orderdetailCollection) {
        this.orderdetailCollection = orderdetailCollection;
    }
 
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (this.orderid != null ? this.orderid.hashCode() : 0);
        return hash;
    }
 
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Ordertable)) {
            return false;
        }
        Ordertable other = (Ordertable)object;
        if (this.orderid != other.orderid && (this.orderid == null || !this.orderid.equals(other.orderid))) return false;
        return true;
    }
    @Override
    public String toString() {
        return "order.Ordertable[orderid=" + orderid + "]";
    }
   
}
2.2 实体类Orderdetail:
 
package order;
 
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
 
@Entity
@Table(name = "orderdetail")
@NamedQueries( {
        @NamedQuery(name = "Orderdetail.findByOrderid", query = "SELECT o FROM Orderdetail o WHERE o.orderdetailPK.orderid = :orderid"),
        @NamedQuery(name = "Orderdetail.findByGoodid", query = "SELECT o FROM Orderdetail o WHERE o.orderdetailPK.goodid = :goodid"),
        @NamedQuery(name = "Orderdetail.findByQuantity", query = "SELECT o FROM Orderdetail o WHERE o.quantity = :quantity")
    })
public class Orderdetail implements Serializable {
 
    @EmbeddedId
    protected OrderdetailPK orderdetailPK;
 
    @Column(name = "quantity")
    private Integer quantity;
 
    @JoinColumn(name = "orderid", referencedColumnName = "orderid", insertable = false, updatable = false)
    @ManyToOne
    private Ordertable ordertable;
 
    public Orderdetail() {
    }
    public Orderdetail(OrderdetailPK orderdetailPK) {
        this.orderdetailPK = orderdetailPK;
    }
    public Orderdetail( String orderid,String goodsid) {
        this.orderdetailPK = new OrderdetailPK(goodsid, orderid);
    }
    public OrderdetailPK getOrderdetailPK() {
        return this.orderdetailPK;
    }
    public void setOrderdetailPK(OrderdetailPK orderdetailPK) {
        this.orderdetailPK = orderdetailPK;
    }
    public Integer getQuantity() {
        return this.quantity;
    }
    public void setQuantity(Integer quantity) {
        this.quantity = quantity;
    }
 
    public Ordertable getOrdertable() {
        return this.ordertable;
    }
    public void setOrdertable(Ordertable ordertable) {
        this.ordertable = ordertable;
    }
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (this.orderdetailPK != null ? this.orderdetailPK.hashCode() : 0);
        return hash;
    }
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Orderdetail)) {
            return false;
        }
        Orderdetail other = (Orderdetail)object;
        if (this.orderdetailPK != other.orderdetailPK && (this.orderdetailPK == null || !this.orderdetailPK.equals(other.orderdetailPK))) return false;
        return true;
    }
    @Override
    public String toString() {
        return "order.Orderdetail[orderdetailPK=" + orderdetailPK + "]";
    }
   
}
2.3 订单明细主键类:
package order;
 
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Embeddable;
 
@Embeddable
public class OrderdetailPK implements Serializable {
 
    @Column(name = "orderid", nullable = false)
    private String orderid;
 
    @Column(name = "goodid", nullable = false)
    private String goodid;
   
    /** Creates a new instance of OrderdetailPK */
    public OrderdetailPK() {
    }
 
    public OrderdetailPK(String goodid, String orderid) {
        this.goodid = goodid;
        this.orderid = orderid;
    }
 
    public String getOrderid() {
        return this.orderid;
    }
 
    public void setOrderid(String orderid) {
        this.orderid = orderid;
    }
    public String getGoodid() {
        return this.goodid;
    }
 
    public void setGoodid(String goodid) {
        this.goodid = goodid;
    }
 
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (this.goodid != null ? this.goodid.hashCode() : 0);
        hash += (this.orderid != null ? this.orderid.hashCode() : 0);
        return hash;
    }
 
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof OrderdetailPK)) {
            return false;
        }
        OrderdetailPK other = (OrderdetailPK)object;
        if (this.goodid != other.goodid && (this.goodid == null || !this.goodid.equals(other.goodid))) return false;
        if (this.orderid != other.orderid && (this.orderid == null || !this.orderid.equals(other.orderid))) return false;
        return true;
    }
    @Override
    public String toString() {
        return "order.OrderdetailPK[goodid=" + goodid + ", orderid=" + orderid + "]";
    }
   
}
3、 创建管理实体的会话Bean
在会话Bean中添加如下业务方法:
n         添加订单的方法
n         删除订单的方法
n         查询所有订单的方法
n         为订单添加订单项
3.1 添加业务方法:添加订单
    public void addOrder(Ordertable order){
        Ordertable newOrder = em.merge(order);
        em.persist(newOrder);
}
因为通过参数传递过来的Order实体处理分离状态,所有需要先通过merge操作把该实例转换成被管理的,然后通过persist方法持久化。
注意:在持久化订单的同时,会把与订单关联的订单明细也持久化,这是通过定义管理的时候指定的“cascade”属性完成的,代码如下红色部分:
@OneToMany(cascade = CascadeType.ALL,
mappedBy = "ordertable",fetch=FetchType.EAGER)
    private Collection<Orderdetail> orderdetailCollection;
cascade属性的值是CascadeType.ALL,意味着对订单类的操作,都会级联到关联的订单明细,包括下面的订单删除。
3.2 添加业务方法:删除订单
    public void removeOrder(String orderid){
        Ordertable order = em.find(Ordertable.class,orderid);
        em.remove(order);       
}
要删除订单,需要查找到该订单,然后再删除。
3.3 添加业务方法:查询所有订单
    public List<Ordertable> getAllOrders(){
        return em.createQuery("select o from Ordertable o").getResultList();
}
因为订单包括订单明细,所以在查询所有订单的时候,应该把该订单涉及的所有订单明细查询出来,该功能是通过定义关系的时候的fetch属性完成的,代码如下红色部分:
@OneToMany(cascade = CascadeType.ALL,
mappedBy = "ordertable",fetch=FetchType.EAGER)
    private Collection<Orderdetail> orderdetailCollection;
如果不需要在加载实体的时候,加载该实体所关联的实体,可以使用FetchType.LAZY。
ManyToOne关系中,fetch属性的默认值是EAGER。
OneToOne关系中,fetch属性的默认值是EAGER。
OneToMany关系中,fetch属性的默认值是LAZY。
ManyToMany关系中,fetch属性的默认值是LAZY。
3.4 添加业务方法:添加订单项
    public void addItem(String orderid,String goodsid,int quantity){
        Ordertable order = em.find(Ordertable.class,orderid);
        Orderdetail item = new Orderdetail(orderid,goodsid);
        item.setQuantity(quantity);
        if(order.getOrderdetailCollection()==null)
            order.setOrderdetailCollection(new Vector<Orderdetail>());
        order.getOrderdetailCollection().add(item);
        item.setOrdertable(order);
    }
4、 编写客户端程序进行测试
分别对下面的3个功能进行测试:
n         添加订单
n         删除订单
n         察看订单
4.1 添加订单
添加订单有两种方式:
n         创建订单对象、创建订单项对象、把订单项添加到订单中,然后调用会话Bean完成添加。
n         创建订单对象,调用会话Bean完成添加,然后调用会话Bean的添加订单项方法添加具体的订单项。
下面代码中用到的remote是注入的EJB对象。
4.1.1 第一种方式
        Ordertable order = new Ordertable();
        String orderid="order2222";
        order.setOrderid(orderid);
        order.setUserid("lixucheng");
        order.setOrderstate('0');
        order.setOrderdate(new Date());
       
        Vector v = new Vector();
        Orderdetail od1 = new Orderdetail(orderid,"goods111");
        Orderdetail od2 = new Orderdetail(orderid,"goods777");
        Orderdetail od3 = new Orderdetail(orderid,"goods333");
        Orderdetail od4 = new Orderdetail(orderid,"goods999");
        Orderdetail od5 = new Orderdetail(orderid,"goods555");
       
        od1.setOrdertable(order);
        od2.setOrdertable(order);
        od3.setOrdertable(order);
        od4.setOrdertable(order);
        od5.setOrdertable(order);
       
        v.add(od1);
        v.add(od2);
        v.add(od3);
        v.add(od4);
        v.add(od5);
               
        order.setOrderdetailCollection(v);
       
        remote.addOrder(order);  
 
4.1.2 第二种方式
Ordertable order = new Ordertable();
        order.setOrderid("order1111");
        order.setUserid("lixucheng");
        order.setOrderstate('0');
        order.setOrderdate(new Date());
       
        remote.addOrder(order);
       
        remote.addItem("order1111","goods111",10);
        remote.addItem("order1111","goods222",20);
        remote.addItem("order1111","goods333",30);
        remote.addItem("order1111","goods444",40);
        remote.addItem("order1111","goods555",50);
4.2 删除订单
删除订单需要根据订单编号删除。
remote.removeOrder("order0000");
4.3 查询所有订单及明细
List<Ordertable> list = remote.getAllOrders();
该方法调用就可以得到所有的订单以及订单的明细。
下面是在Servlet中显示订单信息的代码:
        Iterator<Ordertable> i = list.iterator();
        while(i.hasNext()){
            Ordertable tempOrder = i.next();
            out.println("订单号:"+tempOrder.getOrderid()
+" 订单日期:"+tempOrder.getOrderdate()+" 明细:");
            Iterator<Orderdetail> detail=tempOrder.getOrderdetailCollection().iterator();
            while(detail.hasNext()){
                Orderdetail tempDetail = detail.next();
                out.println("["+tempDetail.getOrderdetailPK().getGoodid()
+","+tempDetail.getQuantity()+"]");
            }
            out.println("<br>");

        }

更多内容可以参考《Java EE 5实用教程——基于WebLogic和Eclipse》

 
Python-Opencv中的膨胀和腐蚀 Python-Opencv中的膨胀和腐蚀 腐蚀和膨胀是对白色部分(高亮部分)而言的,不是黑色部分。 膨胀就是图像中的高亮部分进行膨胀,“邻域扩张”,效果图拥有比原图更大的高亮区域。腐蚀就是原图中高亮部分被腐蚀,“邻域被蚕食”,效果图拥有比原图更小的高亮区域。 1.膨胀 膨胀过程是有一个结构元素或者模板去在原图像素比对,当比对过程中,中心像素位置的值根据其八邻域取或运算,或运算为1就取自己的中心值,... 阅读详情

相关推荐

PLL锁相环基础知识(一)

本文介绍了锁相环(PLL)的核心组件及其工作原理,重点阐述了压控振荡器(VCO)的结构与调谐机制。VCO作为PLL的关键部分,通过变容二极管实现频率调谐,但易受温度、电压等因素影响稳定性。文章详细讲解了VCO的谐振电路原理、硅基集成方案,以及通过分频器和调制器实现的频率控制技术。特别分析了整数型和分数型N分频器的差异,指出高阶德尔塔-西格玛调制器可有效降低分数杂散。文章还探讨了预分频器的应用及其对频率分辨率的影响,揭示了PLL通过反馈环路实现频率锁定的基本原理。

weixin_49761275的博客 3038

JPA排序order by教程

一、简介 在本教程中,我们将学习如何使用Spring Data对查询结果进行排序。 2. 测试数据 下面我们有一些示例数据。 问题是,“谁在航空公司的哪个座位上?” 但为了更方便用户使用,我们希望按座位号排序。 名 姓 座位号 吉尔 史密斯 50 前夕 杰克逊 94 弗雷德 博客 22 瑞奇 鲍比 36 思雅 科利西 85 3. 实体类 要创建Spring Data Repository,我们需要提供 实体类 和 id的类型。 在这里,我们将乘客建模为 JPA 实体,但我

hello world 7261

浊音/清音/爆破音的时域及频域特性

第一周作业 浊音/清音/爆破音的时域及频域特性 思路:使用Audacity进行录制,时域部分将音频放大观察波形规律,频域部分生成并进行频谱分析。 (1)浊音U 时域分析: 时域表现为短周期性,波形比较规律。 频域分析: 频域上表现为频率集中在低频区域,共振峰较为明显,短时能量较高。 (2)清音S 时域分析: 时域波形没有周期性,整体振幅小于浊音。 频域分析: 频域波形平缓,无共振峰,能量比较集中。 (3)爆破音t 时域分析: 脉冲波,更为尖锐,整体上振幅降低。 频域分析: 没有像浊音一样的共振

Leylaaaa的博客 1228

JPA如何使用OrderBy进行快捷排序或者多字段排序(方法名)

摘要:平常使用mysql直接使用sql语句进行书写,可是我们使用JPA就是不想写啊。这里我们使用快捷方法来写排序。 使用sql语句写OrderBy应该如下格式: [ select 字段列表/* from 表名 where 条件 order by 字段名1 asc/desc, 字段名2 asc/desc,…] 数据库中的表信息 1 2 3 4 5 6 ...

馒头花卷儿 2万+

贝塞尔曲线原理--曲线生成--路径规划--matlab代码

贝塞尔曲线有着很多特殊的性质, 在图形设计和路径规划中应用都非常广泛, 在路径规划中贝塞尔曲线完全由其控制点决定其形状, n个控制点对应着n-1阶的贝塞尔曲线,并且可以通过递归的方式来绘制.

bob595078694的博客 1万+

赴美参加学术会议办理流程

有幸能在研究生阶段获得学校资助出国参加学术会议,首先要感谢学校的支持,以及学院和实验室的各位老师~ 接下来说下参会整个准备过程: 本人在接到论文录用通知后,就开始办理相关手续。因为会议地点是美国夏威夷,而且录用通知时间与会议召开时间只隔两个月左右,所以接下来两个月时间要办好学校出国申请手续,赴美签证,因为专业原因,据说签证不好办,所以时间比较紧。学校出国申请和签证相关材料是并行进行的,赴美花费...

xingxin_xu的博客 3196

JPA(order, or, like, left join, 时间筛选,when case,find_in_set )

多字段排序 List<Order> orders=new ArrayList<>(); orders.add(builder.asc(root.join("provider").<String> get("providerCode"))); orders.add(builder.asc(root.<String> get("country"))); query.orderBy(orde

qq_31517427的博客 790

基于SECS协议开发的简明教程(1)

SEMI SECS MES E4 E5 E30 E37 HSMS SDK

L251210269的专栏 7631

springJPA关键字order 冲突问题导致查询失败

错误原因是:实体类数据库的名称都为order 和sql 关键字冲突了 这是我的报错信息 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘order order0_ limit 10’ at line 1 失败写法:select o.id as OrderId,o.createTime as

swiftxx的博客 722

从原理到接法全面了解三相电

从原理到接法全面了解三相电

viixin的博客 1万+

【Halcon-2D测量】set_metrology_object_param 函数功能(用于配置计量对象常规参数)

HALCON算子 set_metrology_object_param 是2D计量模块的核心配置工具,用于动态修改计量对象的测量区域、边缘检测和几何拟合参数。该算子需在检测前调用,支持批量或单独修改对象参数,包含三类关键参数:测量区域(如长度、间距)、边缘检测(如平滑Sigma、阈值)和几何拟合(如RANSAC阈值、最小分数)。使用时需注意参数互斥规则(如measure_distance优先于num_measures)和多线程同步要求。算子无输出参数,仅修改计量模型内部状态,需配合apply_metrolo

weixin_45590420的博客 294

springboot jpa

承接https://blog.youkuaiyun.com/qq_39942341/article/details/112242951 数据库用的mysql5.7 maven 前面两个是jpa和mysql连接类 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</a

思维缜密的博客 584

【蓝桥杯单片机组第八届省赛】— 基于单片机的电子钟程序设计与调试

1、初赛试题 1.1 基本要求 (1)使用 CT107D 单片机竞赛板, 完成“电子钟” 功能的程序设计与调试; (2)设计与调试过程中,可参考组委会提供的“资源数据包”; (3)Keil 工程文件以准考证号命名, 完成设计后, 提交完整、 可编译的 Keil工程文件到服务器。 1.2 硬件框图 1.3功能描述 1.3.1 初始化 (1)关闭蜂鸣器、继电器等无关外...

Fanjufei的博客 3661

什么是JPA?Java Persistence API简介

作为规范,Java Persistence API关注持久性,它将Java对象的创建过程和具体的创建形式解耦。并非所有Java对象都需要持久化,但大多数应用程序都会保留关键业务对象。JPA规范允许您定义应该保留哪些对象,以及如何在Java应用程序中保留这些对象。 JPA本身不是一个工具或框架; 相反,它定义了一组可以由任何工具或框架实现的概念。虽然JPA的对象关系映射(ORM)模型最初基于Hibe...

Java_fenxiang的博客 1820

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

什么是JPA? Java Persistence API简介

虽然它们的执行不同,但每个JPA实现都提供某种ORM层。为了理解JPA和JPA兼容的工具,我们要知道ORM。作为应用程序体系结构的一部分,ORM层负责管理软件对象的转换,以便与关系数据库中的表和列进行交互。在Java中,ORM层转换Java类和对象,以便可以在关系数据库中进行存储和管理。默认情况下,持久化对象的名称将成为表的名称,字段将成为列。设置表后,每个表行对应于应用程序中的对象。一般来说对象映射是可配置的,不过默认值往往效果很好。分布式技术专题+面试解析+相关的手写和学习的笔记pdf。

2303_77877769的博客 731

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jpa和hibernate_JPA和Hibernate的Java持久性,第1部分:实体和关系

jpa和hibernate Java Persistence API(JPA)是一种Java规范,可在关系数据库和面向对象的编程之间架起桥梁。 这个由两部分组成的教程介绍了JPA,并说明了如何将Java对象建模为JPA实体,如何定义实体关系以及如何在Java应用程序中将JPA的EntityManager和Repository模式一起使用。 请注意,本教程使用Hibernate作为JPA提供程...

cxu0262的博客 254

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SpringData Jpa、Hibernate、Jpa 三者之间的关系

JPA规范与ORM框架之间的关系是怎样的呢? JPA规范本质上就是一种ORM规范,注意不是ORM框架——因为JPA并未提供ORM实现,它只是制订了一些规范,提供了一些编程的API接口,但具体实现则由服务厂商来提供实现,JBoss应用服务器底层就以Hibernate作为JPA的实现。 既然JPA作为一种规范——也就说JPA规范中提供的只是一些接口,显然接口不能直接拿来使用。虽然应

一个人的博客 3万+

jpa和hibernate_JPA和Hibernate的Java持久性,第2部分:多对多关系

jpa和hibernate 本教程的前半部分介绍了Java Persistence API的基础知识,并向您展示了如何使用Hibernate 5.3.6和Java 8配置JPA应用程序。如果您已阅读该教程并研究了其示例应用程序,那么您将了解在JPA中建模JPA实体和多对一关系。 您还进行了一些使用JPA查询语言(JPQL)编写命名查询的练习。 在本教程的后半部分,我们将更深入地介绍JPA和H...

cxu0262的博客 187

使用EJB3 Java Persistence API标准化Java持久性

持久性对于大多数企业应用程序都非常关键,因为它们需要访问关系数据库(例如Oracle Database 10g)。如果您正在使用Java开发应用程序,您可能需要完成一些常规任务(例如数据库更新和检索),这是通过编写JDBC和SQL来完成的。最近几年,几种对象关系(O-R)映射框架(例如Oracle TopLink、JBoss Hibernate和BEA Kodo)开始流行,因为它们简化了持久性问题

yzhjisji的专栏 651

Java持久性API(The Java Persistence API)-一个简单的实体持久性编程模型

 Java持久性API(The Java Persistence API)-一个简单的实体持久性编程模型 原文连接:http://java.sun.com/developer/technicalArticles/J2EE/jpa/文章索引Java平台企业版(Java EE)第五版本最重要的主题是易于开发。贯穿整个平台的改变使开发企业Java应用程序变得更简单,需要少的多的代码。值得

龙行天下的专栏 1479

什么是JPA?Java Persistence API简介(1)

";清单2中的代码是相当自我记录的。该对象可以来自任何地方(前端提交,外部服务等),并设置其ID和name字段。然后,对象上的字段用于提供SQLinsert语句的值。该类是JDBC的一部分,提供了一种将值安全地应用于SQL查询的方法。虽然JDBC允许手动配置附带的控件,但与JPA相比,它很麻烦。要修改数据库,首先需要创建一个SQL查询,该查询从Java对象映射到关系数据库中的表。然后,只要对象签名发生更改,就必须修改SQL。使用JDBC,维护SQL本身就成了一项任务。JPA的数据持久性。

Y1567409的博客 1113
上一篇: Java持久性API(JPA)第5讲——关系建立
下一篇: 最好的Java Web开发的书应该是什么样子?
老李-大连
博客等级 码龄20年 3206粉丝 308原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值