Java持久性API(JPA)第1讲——简单实例

目标:使用Java持久性API把数据库中的数据显示出来。
基本过程包括:
u 加载驱动程序
u 创建数据库以及表
u 在NetBeans中加载驱动程序
u 在NetBeans中创建连接
u 创建持久单元以及实体类
u 创建访问持久单元的会话Bean
u 创建Servlet客户端程序,访问会话Bean,并显示结果
1、放JDBC驱动程序到下面的目录
根据自己的安装目录进行修改。如果采用默认安装,应该放在下面的目录下。
C:\Sun\AppServer\domains\domain1\lib\ext
2、在MySQL数据库中添加数据库entity
create database entity
3、创建表userinfo
在entity数据库中创建表,表结构与书上25章的一样,插入几条测试数据。
create table userinfo
(
userid varchar(10) primary key not null,
username varchar(10) not null,
userpass varchar(10) not null,
usertype char(1) not null
)
插入如下测试数据:
insert into userinfo values('user001','zhangsan','zhangsan','0');
insert into userinfo values('user002','lisi','lisi','0');
insert into userinfo values('admin001','mishu','mishu','0');
4、在NetBeans中添加驱动程序
在Drivers上面点击右键,选择New Driver。选择JDBC驱动程序所在的jar压缩包。
5、添加连接
在上图的Databases上点击右键选择New Connection,在弹出的界面上选择前面添加的驱动程序,然后修改URL,修改后:jdbc:mysql://localhost:3306/entity。
其中:localhost表示主机,3306表示端口,entity表示数据库。
6、创建EJB Module
选择FileàNew Project,选择中间的Enterprise,然后选择右边的EJB Module。工程的名字是UserSession。
7、创建持久单元
在工程上面点击右键,选择NewàFile/Folder,选择中间的Persistence,右边选择Persistence Unit。在弹出的界面中,选择数据源:选择New DataSource。在弹出的界面中输入一个JNDI名字entity2,然后选择前面第5步创建好的连接。
生成的文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="UserPU" transaction-type="JTA">
<provider>
oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider
</provider>
<jta-data-source>entity2</jta-data-source>
<properties>
<property name="toplink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>
</persistence>
8、创建持久类
在工程上面点击右键,选择New,然后选择Entity Class from DataBase。在DataSource中选择刚才配置好的数据源entity2。然后在左下方会出现表,选择中间的Add,添加到右边。选择下一步,然后完成即可。生成的文件如下:
/*
* Userinfo.java
*
* Created on 2007年5月21日, 上午6:17
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package jpa;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
/**
* Entity class Userinfo
*
* @author Administrator
*/
@Entity
@Table(name = "userinfo")
@NamedQueries( {
@NamedQuery(name = "Userinfo.findByUserid",
query = "SELECT u FROM Userinfo u WHERE u.userid = :userid"),
@NamedQuery(name = "Userinfo.findByUsername",
query = "SELECT u FROM Userinfo u WHERE u.username = :username"),
@NamedQuery(name = "Userinfo.findByUserpass",
query = "SELECT u FROM Userinfo u WHERE u.userpass = :userpass"),
@NamedQuery(name = "Userinfo.findByUsertype",
query = "SELECT u FROM Userinfo u WHERE u.usertype = :usertype")
})
public class Userinfo implements Serializable {
@Id
@Column(name = "userid", nullable = false)
private String userid;
@Column(name = "username", nullable = false)
private String username;
@Column(name = "userpass", nullable = false)
private String userpass;
@Column(name = "usertype", nullable = false)
private char usertype;
/** Creates a new instance of Userinfo */
public Userinfo() {
}
/**
* Creates a new instance of Userinfo with the specified values.
* @param userid the userid of the Userinfo
*/
public Userinfo(String userid) {
this.userid = userid;
}
/**
* Creates a new instance of Userinfo with the specified values.
* @param userid the userid of the Userinfo
* @param username the username of the Userinfo
* @param userpass the userpass of the Userinfo
* @param usertype the usertype of the Userinfo
*/
public Userinfo(String userid, String username, String userpass, char usertype) {
this.userid = userid;
this.username = username;
this.userpass = userpass;
this.usertype = usertype;
}
/**
* Gets the userid of this Userinfo.
* @return the userid
*/
public String getUserid() {
return this.userid;
}
/**
* Sets the userid of this Userinfo to the specified value.
* @param userid the new userid
*/
public void setUserid(String userid) {
this.userid = userid;
}
/**
* Gets the username of this Userinfo.
* @return the username
*/
public String getUsername() {
return this.username;
}
/**
* Sets the username of this Userinfo to the specified value.
* @param username the new username
*/
public void setUsername(String username) {
this.username = username;
}
/**
* Gets the userpass of this Userinfo.
* @return the userpass
*/
public String getUserpass() {
return this.userpass;
}
/**
* Sets the userpass of this Userinfo to the specified value.
* @param userpass the new userpass
*/
public void setUserpass(String userpass) {
this.userpass = userpass;
}
/**
* Gets the usertype of this Userinfo.
* @return the usertype
*/
public char getUsertype() {
return this.usertype;
}
/**
* Sets the usertype of this Userinfo to the specified value.
* @param usertype the new usertype
*/
public void setUsertype(char usertype) {
this.usertype = usertype;
}
/**
* Returns a hash code value for the object.This implementation computes
* a hash code value based on the id fields in this object.
* @return a hash code value for this object.
*/
@Override
public int hashCode() {
int hash = 0;
hash += (this.userid != null ? this.userid.hashCode() : 0);
return hash;
}
/**
* Determines whether another object is equal to this Userinfo.The result is
* <code>true</code> if and only if the argument is not null and is a Userinfo object
that
* has the same id field values as this object.
* @param object the reference object with which to compare
* @return <code>true</code> if this object is the same as the argument;
* <code>false</code> otherwise.
*/
@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 Userinfo)) {
return false;
}
Userinfo other = (Userinfo)object;
if (this.userid != other.userid &&
(this.userid == null || !this.userid.equals(other.userid)))
return false;
return true;
}
/**
* Returns a string representation of the object.This implementation constructs
* that representation based on the id fields.
* @return a string representation of the object.
*/
@Override
public String toString() {
return "jpa.Userinfo[userid=" + userid + "]";
}
}
然后在Persistence.xml文件的设计界面的下面有 Add Class 按钮,点击该按钮,然后把刚创建好的实体类添加到持久单元中。
9、编写会话Bean访问该实体
在该工程中添加一个会话Bean,添加过程参考会话Bean的编写,Bean的名字是UserManager,提供Remote接口。
在该会话Bean中添加一个业务方法,下面是修改后的文件,红色部分是添加的。
9.1 接口文件
package jpa;
import javax.ejb.Remote;
import java.util.List;
/**
* This is the business interface for UserManager enterprise bean.
*/
@Remote
public interface UserManagerRemote {
public List<Userinfo> findAllUser();
}
9.2 Bean类
/*
* UserManagerBean.java
*
* Created on 2007年5月21日, 上午6:18
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package jpa;
import javax.ejb.Stateless;
import javax.persistence.PersistenceContext;
import javax.persistence.EntityManager;
import java.util.List;
/**
*
* @author Administrator
*/
@Stateless
public class UserManagerBean implements jpa.UserManagerRemote {
@PersistenceContext
EntityManager em;
/** Creates a new instance of UserManagerBean */
public UserManagerBean() {
}
public List<Userinfo> findAllUser(){
return em.createQuery("select u from Userinfo u").getResultList();
}
}
10、编写Servlet客户端访问会话Bean
需要引入会话Bean的客户端程序,可以在Web应用的Liberaries上点击右键,选择Add Project,如下面的界面,选择前面创建的EJB模块,选择添加即可(这样就不用拷贝会话Bean的接口文件了)。
然后在工程里面添加一个Servlet,名字为FindAllUserServlet,修改后的代码如下(红色部分是添加的):
/*
* FindAllUserServlet.java
*
* Created on 2007年5月21日, 上午6:27
*/
package jpa.web;
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.ejb.EJB;
import jpa.UserManagerRemote;
import jpa.Userinfo;
import java.util.List;
import java.util.Iterator;
/**
*
* @author Administrator
* @version
*/
public class FindAllUserServlet extends HttpServlet {
@EJB
UserManagerRemote user;
/** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
List<Userinfo> list=user.findAllUser();
Iterator<Userinfo> i = list.iterator();
while(i.hasNext()){
Userinfo tmpUser = i.next();
out.print(tmpUser.getUserid()+"-"+tmpUser.getUsername()+"<br>");
}
out.close();
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/** Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Returns a short description of the servlet.
*/
public String getServletInfo() {
return "Short description";
}
// </editor-fold>
}
11、运行测试
分别部署EJB模块和Web模块,访问Servlet可以得到用户列表。
更多内容可以参考本人的书《Java EE 5实用教程——基于WebLogic和Eclipse》
采用的是servlet+JSP+JPA的学生信息管理系统 本系统是学生信息管理系统,主要演示JPA在实际项目中的使用,采用的是servlet+JSP+JPA.是EJB JPA 这本书里的例子。 立即下载

相关推荐

学生成绩管理系统(Servlet+JPA)

第16章 学生成绩管理系统(Servlet+JPA)EJB JPA数据库持久层开发

JPA学习(二) 创建JPAUtil 和 简单的增删改查

前章:https://blog.youkuaiyun.com/qq_28198181/article/details/102550503 这一节简单的记录一下 创建一个JPAUti类和增删改查的方法 依赖在上一章; 目录 1.创建JPAUTIL 2.创建增删改查方法 1.创建JPAUTIL 创建JPAUtil是用来通过这个方法得到一个单例的entityManagerFactory publi...

GinChou的萌新博客 1474

保姆级教程:用STM32单片机实现国标交流充电桩的CP信号检测(附完整代码)

本文详细介绍了基于STM32单片机实现国标交流充电桩CP信号检测的全流程,包括硬件设计、软件架构和充电控制实现。通过分压电路设计、ADC配置和状态机逻辑,确保充电过程的安全与可靠性,适用于新能源汽车充电桩开发。附完整代码和调试技巧,助力开发者快速掌握关键技术。

weixin_42641998的博客 252

jpa二次封装:像使用mybatis-plus一样使用jpa查询

hibernate二次封装,可用像使用mybatis-plus一样使用hibernate进行数据库查询

C3245073527的博客 1140

Ubuntu 22.04下Minkowski Engine编译避坑指南:解决Cuda 12.2与Pytorch cu118版本冲突

本文详细介绍了在Ubuntu 22.04系统中解决Minkowski Engine编译时Cuda 12.2与Pytorch cu118版本冲突的实用方法。通过修改版本检查逻辑、创建兼容符号链接等技巧,帮助开发者顺利完成编译,并提供了性能优化建议和替代方案,确保三维点云处理任务的高效运行。

weixin_42543309的博客 162

RS485两线制接线实战:从差分信号原理到Modbus避坑指南

本文深入解析RS485两线制接线的核心原理与实战步骤。从差分信号的抗干扰机制出发,详细拆解总线规划、屏蔽层接地、终端电阻安装等关键实操细节,并针对Modbus应用中常见的信号反射、极性接反、共模干扰等问题提供系统化的排查指南与解决方案,助力工程师构建稳定可靠的工业通讯网络。

7up55的博客 734

JPA+mysql+servlet实现的连接操作数据库的小例子

persistence.xml: &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schem...

lpm528的博客 611

【FPGA XDMA AXI Bridge 模式】PCIe:BARs 和 AXI:BARs 含义解析

Xilinx的 DMA/Bridge Subsystem for PCI Express IP核中,支持普通的XDMA模式,但是这种模式只允许主机端发起PCIe 读写请求,FPGA内部无法主动发起读写请求,也即FPGA无法主动读写HOST的内存。而该IP核的另一种模式,AXI Bridge模式则支持HOST主动读写,以及FPGA主动读写。该模式下有个参数需要配置,分别是PCIe:BARs以及AXI:BARs。而上述的普通模式只有PCIe:BARs需要配置。下面详细说说这两个参数的含义。

weixin_45888152的博客 3734

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

2018南京大学计算机夏令营机试

1. Count number of binary strings without consecutive 1’s Given a positive integer n(3≤n≤90), count all possible distinct binary strings of length n such that there are no consecutive 1's . Examples...

climber16的博客 1万+

学Simulink——基于风力发电系统的建模与仿真场景:基于自适应控制的风力发电系统输出功率调节

本文详细介绍了使用Simulink搭建风力发电系统自适应控制模型的完整流程。首先阐述了风速波动对电网的影响及自适应控制的优势,然后逐步指导创建Simulink项目、搭建系统结构(包括风速源、风轮机、发电机等模块),重点讲解了模型参考自适应控制器(MRAC)的设计步骤和参数设置方法。通过仿真分析验证了系统在风速变化时仍能保持输出功率稳定,展示了自适应控制的响应速度和鲁棒性。最后提出了引入深度学习预测、多变量控制等优化方向,为新能源领域工程师提供了实用的建模与仿真指导。

amy_mhd的博客 220

什么是JPA? Java Persistence API简介

面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取![外链图片转存中…(img-XtqzCGB1-1713465135075)]

2401_84010836的博客 833

全面解析智能座舱芯片参数:高通 (SA8295)vs 联发科,真实案例一行行讲给你听!

使用场景推荐芯片中低端车型 + 1屏导航语音SA8155P / MT8628(性价比高)中控+副驾+仪表+全景影像SA8255P / MT8678(性能强)高阶自动驾驶+域控融合SA8295P(顶级安全+算力)

weixin_43199439的博客 2079

什么是JPA?Java Persistence API简介

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

Java_fenxiang的博客 1820

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

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

Y1567409的博客 1113

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

JPA-深度理解

Java应用程序传统上使用JDBC (Java数据库连接)等技术访问关系数据库,来持久存储数据。 由于面向对象技术和关系技术之间的差异,JDBC API要求开发人员手工编写SQL中最基本的CRUD(创建、读取、更新和删除)操作,而这些操作缺乏可移植性。 另外,代码完全依赖于SQL,当从一个数据库转换到另一个数据库时会更加困难。 因为关系技术关注的是数据及其关系,而面向对象不仅强调数据,而且还强调在数据上执行的操作。这导致了面向对象与面向关系不适配。 一个被广泛接受的解决方案是对象关系映射(ORM)。 J

海的那边,还是海吗 6903

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

JPA简单实例

1、JPA JPA(Java持久性API)是存储业务实体关联的实体的来源。它显示了如何定义一个面向普通Java对象(POJO)作为一个实体,以及如何与管理关系实体。 2、安装JPA (1)创建一个新的JPA项目,首先选择File->New->JPA Project。 (2)输入项目名称JPATest,选择Target runtime jre7如下。 (3)点击下载库(如果没有库)

Borny鼎鼎的博客 2964

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

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

yzhjisji的专栏 651

Java持久性API(JPA)第4讲——删除和修改.doc

 Java持久性API(JPA)——删除和修改目标:使用JPA完成删除和修改功能。主要内容包括:u       根据主键查询u       删除信息u       修改信息因为删除功能和修改功能都是对已有的实体进行操作,通常需要先得到实体,然后对实体进行操作,得到实体需要根据主键进行查询。所以在介绍删除和修改信息之前先介绍如何根据主键查询。1、根据主键查询在第3

李绪成的一亩三分地 1万+

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

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

cxu0262的博客 254
上一篇: 消息驱动Bean(MDB)的开发
下一篇: Java持久性API(JPA)第2讲——完成信息添加
Java_Web_Book
博客等级 码龄18年 8粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值