![]() |
|
||||||||||||||
| | 网站首页 | 数据库教程 | web编程 | 服务器 | 程序设计 | | ||
|
||
|
||||||
| Java持久性API(JPA)——第二讲 | ||||||
作者:佚名 文章来源:不详 点击数: 更新时间:2007-7-8 ![]() |
||||||
|
Java持久性API(JPA)——概述 目标:
包括两部分内容:
添加功能的开发过程如下:
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); } 编写输入用户信息的界面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" divfix="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) 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》 本文来源:http://blog.csdn.net/JavaEETeacher/archive/2007/05/25/1626165.aspx
|
||||||
| 文章录入:admin 责任编辑:admin | ||||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | ||||||
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 网站地图 | 管理登录 | | |||
|