Java持久性API(JPA)第2讲——完成信息添加

采用的是servlet+JSP+JPA的学生信息管理系统 本系统是学生信息管理系统,主要演示JPA在实际项目中的使用,采用的是servlet+JSP+JPA.是EJB JPA 这本书里的例子。 立即下载
 
        目标:
  • 通过如下调用过程完成用户信息的添加,在JSP页面输入用户信息,提交给Servlet,Servlet调用会话Bean,会话Bean调用实体类。
  •  掌握JPA的基本概念。
包括两部分内容:
  • 添加功能
  •  JPA概述
添加功能的开发过程如下:
  •  在UserSession会话Bean中添加业务方法
  • 编写输入用户信息的界面addUser.jsp
  •  编写添加功能的控制器AddUserServlet.java
JPA概述的内容包括:
  • 使用JPA完成与数据库的交互,与使用JDBC完成与数据库的交互,这两种方式之间的区别
  •  Java持久性要解决的问题
  •  编写实体类需要编写的文件
  • 如何访问实体类
  • 常用的JPA接口
下面分别进行介绍。
注意:本次内容的实例基于第一讲。
第一部分:添加功能
在UserSession会话Bean中添加业务方法
首先需要在业务接口中添加方法的声明,然后在Bean类中实现该方法。
在业务接口UserManagerRemote.java中添加如下方法声明:
    public void addUser(String userid,String username,String userpass,char usertype);
在Bean类UserManagerBean.java中添加如下方法:
      public void addUser(String userid,String username,String userpass,char usertype){
          Userinfo user = new Userinfo(userid,username,userpass,usertype);
          em.persist(user);
      }
em是上一次实例中在Bean类中注入的EntityManager对象,persist方法完成持久化,相对于数据库的插入操作。通过这个方法对象user中的信息就被写入到数据库了。
编写输入用户信息的界面addUser.jsp
在UserWeb中添加JSP文件,用于添加用户信息,代码如下:
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%--
The taglib directive below imports the JSTL library. If you uncomment it,
you must also add the JSTL library to the project. The Add Library... action
on Libraries node in Projects view can be used to add the JSTL 1.1 library.
--%>
<%--
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
--%>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
 
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
 
    <h1>JSP Page</h1>
    <form action="AddUserServlet" method="POST">
        用户ID:<input type="text" name="userid" value="" /><br>
        用户名:<input type="text" name="username" value="" /><br>
        口令:< input type="password" name="userpass" value="" /><br>
        权限:<select name="usertype">
            <option value="0"> 普通用户</option>
            <option value="1"> 管理员< /option>
        </select><br>
        <input type="submit" value=" 提交" /><input type="reset" value="重置" />
    </form>
   
    </body>
</html>
其中红色部分的代码声明了要提交给AddUserServlet进行处理。
 
编写添加功能的控制器AddUserServlet.java
AddUserServlet控制器完成的功能如下:
u       获取用户输入的信息
u       调用业务方法
u       转向显示信息的界面
AddUserServlet的代码如下(红色部分是需要自己添加的代码):
/*
 * AddUserServlet.java
 *
 * Created on 2007 年5月23日, 上午6:22
 */
 
package jpa.web;
 
import java.io.*;
import java.net.*;
 
import javax.servlet.*;
import javax.servlet.http.*;
import javax.ejb.EJB;
import jpa.UserManagerRemote;
 
/**
 *
 * @author Administrator
 * @version
 */
public class AddUserServlet 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();
 
        String userid = request.getParameter("userid");
        String username = request.getParameter("username");
        String userpass = request.getParameter("userpass");
        String usertype = request.getParameter("usertype");
       
        user.addUser(userid,username,userpass,usertype.charAt(0));
        
        RequestDispatcher rd = request.getRequestDispatcher("FindAllUserServlet");
        rd.forward(request,response);
    }
   
    // <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>
}
测试
重新部署EJB和Web应用,然后访问: http://localhost:8080/UserWeb/addUser.jsp。
在这个界面输入一个用户信息,然后提交,提交之后可以看到新添加的用户。
第二部分:JPA概述
JPA与JDBC的比较
以前我们通过JDBC完成与数据库的交互,基本过程如下:
n         加载驱动程序;
n         创建连接
n         编写SQL语句
n         创建语句对象;
n         执行SQL语句;
n         对结果进行处理
使用JPA完成查询的过程如下:
em.createQuery(…).getSingleResult()或者em.createQuery(…).getResultList()
使用JPA完成添加的过程如下:
em.persist(User)
相比之下,使用JPA大大减少了编程人员的工作量。但前提是由持久性提供者提供很多实现,编程人员需要编写实体类。下面介绍持久性提供者需要解决的主要问题以及如何编写实体类。
Java持久性要解决的问题
简单的说,Java持久性要解决的主要问题就是内容中对象与数据库中实体之间的同步,涉及的主题如下:
n         数据库信息配置,包括数据库位置、名字、用户名和口令等,另外需要JDBC驱动程序;
n         对象数据的加载,从实体到对象;
n         实体数据的更新,从对象到实体;
n         数据的查询,从数据库加载数据;
n         数据库中实体的关系与内存中对象之间关系的映射;
n         批量处理,包括批量添加、删除、修改等;
n         安全问题;
n         事务问题。
如何编写实体类
所有的实体类应该有一个持久单元来管理,持久单元在一个xml文档中声明。下面的代码就是前面实例中用到的配置文件persistence.xml:
<?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>
最主要的作用就是声明持久单元对应的数据库,通常使用数据源的名字来确定。另外可以声明有哪些实体类。
实体类用于表示数据库中的表,实体类的编写主要确定如下信息:
n         该实体与数据库中的哪个表对应;
n         实体类中的属性与表中的哪个字段对应;
n         实体类中的哪个属性是主键。
编写实体类的时候的主要知识点包括:
声明该类为实体类:
@Entity
声明该实体类与哪个表对应:
@Table(name = "userinfo")
声明该实体类与表中的哪个列对应:
    @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;
声明该实体类的主键:
    @Id
        @Column(name = "userid", nullable = false)
    private String userid;
完整的代码参考第一讲。
如何访问实体类
从前面的查询所有用户的功能和添加用户的功能可以看出,对实体的操作主要是通过EntityManager接口完成,如果要查询,需要使用Query接口。
常用的JPA接口
常用的接口如下:
EntityManager接口,完成实体的管理,包括创建查询、删除实体、查询实体和添加实体等。
Query接口,完成各种查询,通常有EntityManager创建,主要使用JPA的查询语言完成,也可以使用标准的SQL语言。
EntityManagerFactory接口,用于创建EntityManager,如果不能注入EntityManager,需要使用EntityManagerFactory创建。
Persistence接口,用于创建EntityManagerFactory对象。

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

Springboot+ajax+jpa实现异步删除修改添加用户 实现了Ajax异步添加修改删除用户,整合了SpringSecurity,jpa等一堆框架...文章说明在https://blog.youkuaiyun.com/woshilishu/article/details/89351894 立即下载

相关推荐

学生管理系统jpa+jsp+servlet

jpa,jsp,servlet jpa,jsp,servlet jpa,jsp,servlet jpa,jsp,servlet

基于Servlet和JSP的用户管理(三)--添加用户信息功能

思路分析 在添加联系人按钮绑定跳转信息 <form action="${pageContext.request.contextPath}/addUserServlet" method="post"> 第一步:编写addUserServlet package edu.swpu.web.servlet; import edu.swpu.domain.User; import...

lizhi_0813的博客 1592

OpenCV 常用的API总结(迅速查询)

OpenCV基本操作 openCV安装 读取图片(IO操作) 绘制集合图形 图像加法以及混合操作 OpenCV图像处理 图像几何变换 形态学操作 图像平滑 直方图 边缘检测 模板匹配 傅里叶变换 轮廓检测 图像分割 图像特征提取 SIFT检测关键点 视频读写............

Peyzhang的博客 3936

springboot中+JPA 实现简单的添加用户的功能

springboot中+JPA 实现简单的添加用户的功能 创建springboot项目 我使用的sts开发springboot项目,所以这里介绍的是关于如何在sts中创建项目。其他软件开发也类似,可以去网上搜索如何创建springboot项目。 打开sts --&amp;gt; 点击左上角的File --&amp;gt; New --&amp;gt; Spring Starter Project , ...

strive_for_myself的博客 4079

国外无人机蜂群作战典型战例及发展趋势

参与袭击的无人机为简易组装的固定翼飞机,采用小排量活塞发动机和手机GPS通信模块零件,机翼为轻木加泡沫板混合结构,尾梁为铝合金方管,主要依靠胶带粘接,以上全部配件均可在商用市场买到,成本较低,可在短时间内装配完成。③战场纵深短、瞬时性强。蜂群作战的参战数量显著增加,这一方面得益于无人机技术的飞速发展使得廉价无人机可以大量生产和仿制,另一方面凭借迅速发展的投放和回收技术以及集群控制技术,使得无人机蜂群可在极短时间内实现编队饱和攻击,在快速消耗敌方高价值防空武器系统的同时,保证己方物资系统的突防概率。

renhongxia1的博客 2481

ABA分析方法 — 软硬件开发必备的一种分析问题绝佳套路

可能你从很多地方听过这个名词,无论是在软件开发还是硬件领域(比较典型的领域:汽车、消费电子、医疗等行业),ABA验证都是一种快速分析故障的一个方法,第一次听到这个词,当时是不是一脸懵逼,本文就深度带你了解下ABA的分析方法。简要概述就是:怀疑A模块导致系统故障,将B模块替换A模块,故障消失,再将A模块替换回来,故障复现,则说明A模块是导致系统故障的原因其实,ABA分析问题,可能很多人在工作中都或多或少用过这个方法,只是没有这个概念,说明白了就是控制变量和对比验证,没什么高大上的东西。

Eureka1024的博客 7343

【JSP】用户信息界面操作 ---- 用户信息修改

文章目录用户信息界面操作 ---- 用户信息修改Ⅰ.修改userinfo.jsp 实现修改页面跳转Ⅱ.创建 userUpdate.jsp 修改页面Ⅲ.完善 dbHelper类,添加用户修改方法Ⅳ.创建 upDataServlet,实现用户信息修改功能Ⅴ.效果展示 用户信息界面操作 ---- 用户信息修改 Ⅰ.修改userinfo.jsp 实现修改页面跳转 之前在设计userinfo.jsp中的操作内容时,并没有具体的实现。今天来实现一个简单的用户修改功能。 href="userUpdate.jsp?..

懂得一千零一种,赋予你失败的方法! 1万+

CUDA 12.1环境下的动态库链接修复:从libcusparse.so.12的undefined symbol错误到libnvJitLink.so.12的正确加载

本文详细解析了在CUDA 12.1环境下,PyTorch因libcusparse.so.12找不到libnvJitLink.so.12中的__nvJitLinkAddData_12_1符号而报错的根本原因。通过诊断动态链接过程,提供了创建符号链接、修改环境变量等三种解决方案,并深入探讨了nvJitLink组件的作用及环境配置的最佳实践,帮助开发者彻底解决此类动态库链接问题。

c8d9e0f1的博客 206

jpa数据库增删改查基本操作

1.插入一条数据(保存实体) save(T entity) 2.查找一个特定实体 findOne(Id) 3.删除指定实体 delete(T entity); delete(Id); 4.更新实体 @Transaction @Modifying @Query("update Customer as c set c.name = ?1 where c.userid=?2") i

落日流年 2万+

手把手教你自制Type-C OTG转换器(附电路图及避坑指南)

本文详细指导如何自制Type-C OTG转换器,包括核心电路设计、元器件选型及焊接技巧,特别强调硬件检测电路的关键作用。通过实测数据和避坑指南,帮助开发者解决兼容性问题,实现高效数据传输。

weixin_27038245的博客 716

UNet 改进(19):与ASPP结合的图像分割模型

这个代码实现了一个改进版的UNet模型,在传统的UNet架构基础上,引入了ASPP模块来增强模型捕获多尺度上下文信息的能力。​​UNet主干网络​​:经典的编码器-解码器结构,带有跳跃连接​​ASPP模块​​:位于瓶颈层,用于提取多尺度特征。

2401_82355416的博客 879

JPA 通过注解自动生成表,添加 字段名、类型、注释

JPA对象注解类型 @Table - 映射表名 @Id - 主键 @GeneratedValue(strategy=GenerationType.IDENTITY) - 自动递增生成 @Column(name = “dict_name”,columnDefinition=”varchar(100) COMMENT ‘字典名’”) - 字段名、类型、注释 @UpdateTimestamp ...

kai46385076的专栏 3万+

银河麒麟桌面系统批量交付:封装自动化ISO镜像,百台装机效率提升10倍

麒麟桌面系统自动化ISO镜像定制摘要 本文详细介绍麒麟桌面版ISO安装镜像的定制方法,通过修改系统文件实现自动化安装部署。主要内容包括:1) 挂载原版ISO并提取文件;2) 使用unsquashfs解压系统文件进行定制化修改,包括添加系统标记配置;3) 配置ky-installer.cfg自动应答文件,设置安装参数如用户名、密码、分区方案等;4) 修改grub引导配置启用自动安装模式。该流程支持磁盘加密、自定义分区、自动登录等功能,生成的定制镜像可满足批量部署需求,显著提升系统安装效率。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 1508

什么是JPA? Java Persistence API简介

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

2401_84010836的博客 833

推理引擎终极对决:TensorRT vs ONNX Runtime,YOLOv8速度差30%的核心原因与实操指南

若你使用NVIDIA GPU,且追求极致速度和低延迟,TensorRT是唯一选择,尤其是边缘设备和实时场景;若你需要跨硬件部署、快速验证原型,或预算有限(无需NVIDIA GPU),ONNX Runtime是性价比之王;对于YOLOv8这类检测模型,TensorRT的FP16/INT8量化是“免费的速度提升”,建议优先采用。最后提醒:推理引擎的优化是“细节决定成败”——同样的引擎,不同的预处理方式、显存配置、批大小,都会导致10%-20%的性能差异。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1027

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

什么是JPA?Java Persistence API简介

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

Java_fenxiang的博客 1820

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

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

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java:使用 JPA 了解 Java 对持久性的支持

Java 平台已经有标准的 API 以 JDBC API 的形式与数据库系统一起工作。这些 API 非常擅长使用数据库,并提供了从 Java 语言方便地与数据库交互所需的方法。

yueqian_edu的博客 149

使用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是什么api_什么是JPA? Java Persistence API简介

jpa是什么api 作为规范, Java Persistence API与persistence有关,它宽松地表示Java对象在创建它们的应用程序进程中不存在的任何机制。 并非所有Java对象都需要保留,但是大多数应用程序都可以保留关键业务对象。 JPA规范使您可以定义应保留哪些对象,以及如何在Java应用程序中保留这些对象。 JPA本身不是工具或框架; 相反,它定义了可以由任何工具或框架实...

cxu0262的博客 632

java persistence 2.0_JPA(Java Persistence API)学习一

1.介绍Java持久性API(JPA)是Java的一个规范。它用于在Java对象和关系数据库之间保存数据。JPA充当面向对象的领域模型和关系数据库系统之间的桥梁。由于JPA只是一个规范,它本身不执行任何操作。 它需要一个实现。因此,像Hibernate,TopLink和iBatis这样的ORM工具实现了JPA数据持久性规范。2.JPA版本作为EJB 3.0规范的一部分,Java持久API的第一个版...

weixin_42298128的博客 284
上一篇: Java持久性API(JPA)第1讲——简单实例
下一篇: Java持久性API(JPA)第3讲——使用查询
老李-大连
博客等级 码龄20年 3206粉丝 308原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值