一级a做爰片试看 免费网站,wordpress用户名密码加密方式,软件开发技术文档,wordpress插件百度各位读者好#xff01; 在我的一些朋友提出无数请求之后#xff0c;我决定写一篇关于Java Persistence API的简短文章。 面向对象的编程范式是当今最流行和使用最广泛的模型#xff0c;它具有无缝建模现实生活实体的能力#xff0c;因此它胜过大多数其他范式。 但是 在我的一些朋友提出无数请求之后我决定写一篇关于Java Persistence API的简短文章。 面向对象的编程范式是当今最流行和使用最广泛的模型它具有无缝建模现实生活实体的能力因此它胜过大多数其他范式。 但是在开发诸如学生数据库或员工数据库等中型数据导向的应用程序时人们只是打破了面向对象模型并将数据库连接直接链接到前端GUI。 但这不是一个好的编程习惯。 当我刚开始构建面向数据库的小型应用程序时我是一名顽固的OOP迷有点担心不使用OOP模型。 良好的编程习惯是拥有一个Solid Object模型并拥有一个数据存储区来保存数据然后是一个GUI。 所以模型基本上是这样的 但是我偶然发现了另一个问题。 如何链接对象和数据库。 对象中的数据与关系数据库中的数据存储方式不同。 关系数据库不支持许多对我们的对象模型至关重要的OOP概念。 因此我想到了酿造自己的类以将数据从数据库传输到对象然后再传输回来。 但是我面临很多困难和绊脚石。 然后休息了 我遇到了Java Persistence的东西这些东西使我可以在程序的生命周期之外保留或保存对象的数据。 这意味着您现在可以将对象存储到关系数据库或XML文件等数据存储中而无需编写复杂的代码来转换格式和管理CRUD操作。 这篇小文章将向您介绍这个很棒的功能并且您将可以开始在项目中实现Persistence。 我不想在本文中涉及复杂的主题。 因此我决定使用ObjectDB数据库。 使用ObjectDB的优点是它不需要JPA通常需要的复杂配置和映射文件。 我们将使用流行的Eclipse IDE 。 我将提供一个简单的示例程序该程序将存储和处理Employee详细信息名称和薪水。 好吧让我们开始吧………… 持久性服务由许多提供程序提供我们将使用ObjectDB的实现。 因此请下载其DB和API文件 。 现在让我们通过一些基础知识。 然后我们将看到如何实现这些以创建程序…… 一实体类 要使用持久性您需要将其对象存储在数据库中的类。 这些类称为实体类除了一些额外的注释外它们与POJO普通的旧Java对象相同。 您需要定义此类中必须保留的字段保存在db中。 实体类必须在类上方具有“ Entity ”注释。 现在定义该类的所有字段和方法。 瞧我们为自己准备了实体课 现在您可以向实体类添加其他功能。 例如您可以使用该字段上方的“ Id ”注释来指示哪个字段用作主键。 您还可以使用“ GeneratedValuestrategy GenerationType.AUTO ”批注使ObjectDB为持久存入数据库的对象生成主键值。 还有更多注释功能和构造。 但是我们现在不需要了解它们。 这是我们将用作实体类的类。 package employeeDB;import javax.persistence.*;Entity
publicclass Employee {Id String name;Double salary;public Employee(){}public Employee (String name, Double Salary){this.namename;this.salarySalary;}publicvoid setSalary(Double Salary){this.salarySalary;}publicString toString(){returnName: name\nSalary: salary ;}} 如您所见我们通过Entity注释标识了Entity类。 然后将员工姓名作为主键。 并且您需要在实体类中有一个不带参数的默认构造函数。 在其他JPA实现中您可能必须在单独的XML文件中提供有关实体类的详细信息。 但是ObjectDB不需要这样做。 二。 连接到数据库 在JPA中数据库连接由EntityManager接口表示。 为了访问和使用ObjectDB数据库我们需要一个EntityManager实例。 我们可以使用EntityManagerFactory实例获得EntityManager的实例该实例是使用EntityManagerFactory类的静态createEntityManagerFactory方法创建的。 您需要指定数据库文件的存储位置作为createEntityManagerFactory方法的参数。 例 EntityManagerFactory emfPersistence.createEntityManagerFactory(empDB.odb);
EntityManager ememf.createEntityManager(); 现在我们有了一个EntityManager它将我们的应用程序连接到数据库。 通常在一个程序中创建几个EntityManager但是仅创建一个EntityManagerfactory实例。 大多数JPA实现都需要称为“持久性单元”的XML映射文件作为创建EntityManagerFactory实例的参数。 但是ObjectDB具有仅接受数据库位置的规定。 如果数据库已经存在它将被打开否则将为我们创建一个新的数据库。 可以如下关闭EntityManagerFactory和EntityManager em.close();
emf.close(); 对于每个类负责某些数据库活动或在多线程应用程序的情况下每个线程都有一个单独的EntityManager是一个好习惯。 现在让我们看看如何使用数据库进行交易…。 三 执行交易 为了对数据库执行任何操作或对数据库执行任何操作我们必须首先启动事务。 只有使用EntityManager启动事务后才能执行任何操作。 我们可以使用以下电话开始交易。 em.getTransaction().begin(); 现在我们可以执行各种事务例如创建新的Record对象从数据库中删除更新和检索数据。 在执行任何CRUD操作之前我们需要将数据添加到数据库中。 在JPA中将对象插入数据库称为“持久”对象。 可以使用em.persistObject方法执行此操作。 现在此对象变为“托管”对象但变为EntityManagerem。 这意味着对该对象所做的任何更改都将反映在数据库文件的副本中。 要从数据库中删除任何对象我们可以使用em.removeObject方法。 我们可以使用em.findClassprimaryKeyValue方法使用对象的主键从数据库中检索对象。 您需要将Entity类的Class实例和主键传递给此方法它将返回一个“ Object”该对象必须转换为Entity Class。 最后执行交易后我们必须使用结束交易 em.getTransaction().commit(); 只有在提交事务后对内存中对象的更改才会反映在数据库文件中的对象上。 以下代码将持久存储一个Employee对象然后搜索一个Employee对象并对其进行修改。 Employee emp1new Employee (Gugan,50000);em.getTransaction().begin();//Persist (store) emp1 object into Database
em.persist(emp1);//Search for Gugan
Employee gugan(Employee) em.find(Employee.class,Gugan);
gugan.setSalary(100000);em.getTransaction().commit(); 我们还可以使用SQL之类的查询称为JPQL来执行CRUD操作。 JPA中有两种查询类型。 普通查询和TypedQueries。 普通查询是非类型安全查询。 即查询不知道将要检索或使用的对象的类型。 但是TypedQuery是类型安全的查询。 为了创建类型化查询您需要指定将要使用的类的类型并将类的Class实例作为参数以及查询字符串传递。 TypedQueries是使用数据库的标准方法因此我们将仅使用它们。 可以使用以下语法创建它们 TypedQuery qem.createQuery(queryString,EntityClass.class); 如果查询仅返回一个对象或结果例如查找条目数计数则可以使用q.getSingleResult方法。 另一方面如果您的查询将返回对象的集合例如从数据库中检索雇员列表则可以使用q.getResultList方法它将返回创建时指定类型的List对象。 TypedQuery。 下面的代码首先将找到那里有多少雇员然后将从数据库中检索所有雇员对象。 em.getTransaction().begin();//find number of Employees
TypedQuery countem.createQuery(Select count(emp) from Employee emp,Employee.class);
System.out.println(\ncount.getSingleResult() employee record(s) Available in Database!\n);//Retrieve All Employee Objects in the database
TypedQuery eem.createQuery(Select emp from Employee emp, Employee.class);
List employeese.getResultList();em.getTransaction().commit(); JPQL与SQL查询非常相似。 唯一的区别是您使用类名和对象名而不是表名。 JPQL还支持查询中的参数。 例如。 如果要查找名称为“ Steve”的Employee并且仅在运行时知道名称“ Steve”则可以使用以下查询样式。 String namescannerObj.nextLine();
TypedQueryemployee query em.createQuery(SELECT e FROM Employee e WHERE e.name :name, Employee.class);
query.setParameter(name, name);
Employee empquery.getSingleResult(); 这用给定的“ name”变量替换“name”参数。 除了这些查询外还有许多其他查询。 有关JPQL的完整教程您可以阅读有关JPQL的ObjectDB手册 。 IV。 使用Eclipse进行ObjectDB JPA实现 Eclipse是Java AFAIK的最佳IDE。 因此我建议使用Eclipse开发应用程序。 从此处下载最新的Eclipse Indigo。 如果您已经拥有Eclipse Indigo或更旧的版本那么它就很好了。 使用文件菜单创建一个新的Java项目。 然后在新的项目对话框中为您的项目输入一个项目名称然后选择要在其中存储项目的目录然后选择下一步。 按下一步后将为您提供几个选项现在在此窗口中选择库选项卡。 然后选择“添加外部罐子”按钮这将打开一个新对话框。 现在浏览到您提取ObjectDB API文件的位置然后转到其中的bin文件夹并选择“ objectdb.jar”文件。 按打开将添加库。 现在按完成以创建您的项目。 现在我们已经创建了项目我们需要向其添加类。 现在在Eclipse IDE窗口左侧的Project Explorer窗格中右键单击您的项目名称然后选择New- Class。 现在将打开“新类”对话框。 在其中输入要创建的类名称然后也输入包名称。 所有其他选项都不必干预…… 在示例程序中我们将使用两个类。 一个用于雇员实体另一个用于容纳应用程序的主要方法和关键功能。 确保两个类都在同一个程序包中。 要查看创建的类请在“项目资源管理器”窗格中展开您的“项目”然后从节点列表中展开src然后您将在其中看到您的包。 展开它您将看到这些类。 五范例程序 既然您已经掌握了JPA的基本概念那么我将介绍一个示例控制台应用程序该应用程序将从数据库中存储修改和删除员工。如果您已阅读上述内容则可以轻松地遵循以下程序。 我在需要使程序更清晰的地方提供了注释。 使用上一节中告诉您的方法创建一个名为Employee的类并使用employeeDB作为包名并粘贴本教程第一节中给出的Employee Entity类的代码。 现在在同一软件包employeeDB下创建另一个名为Main的类并将以下代码放入其中。 package employeeDB;import javax.persistence.*;
import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class Main {/*** Displays all Employees in the Database*/private static void displayAll(){em.getTransaction().begin();TypedQuery eem.createQuery(displayAllQuery, Employee.class);List Employee employeese.getResultList();if(employees.size()0){for(Employee temp:employees){System.out.println(temp);System.out.println();}System.out.println(employees.size() Employee Records Available...!);}elseSystem.out.println(Database is Empty!);em.getTransaction().commit();}/*** Insets an Employee into the Database.*/private static void insert(){System.out.print(Enter the number of Employees to be inserted: );ninput.nextInt();em.getTransaction().begin();for(int i0;in;i){ System.out.println(Enter the details of Employee (i1): );System.out.print(Name: );//I use BufferedReader to read String and hence I need to // Catch the IOException that it may throwtry{namebufferedReader.readLine();}catch (IOException e){e.printStackTrace();}System.out.print(Salary: );Salaryinput.nextDouble();Employee empnew Employee(name,Salary);em.persist(emp); //Store emp into Database}em.getTransaction().commit();System.out.println(\nn employee record(s) Created!\n);TypedQuery countem.createQuery(countQuery,Employee.class);System.out.println(\ncount.getSingleResult() employee record(s) Available in Database!\n);}/*** Deletes the specified Employee from the database*param name*/private static void delete(String name){em.getTransaction().begin();Employee e(Employee) em.find(Employee.class, name); //Find Object to be deletedem.remove(e); //Delete the Employee from databaseSystem.out.printf(Employee %s removed from Database....,e.name);em.getTransaction().commit();//Display Number of Employees leftTypedQuery countem.createQuery(countQuery,Employee.class);System.out.println(\ncount.getSingleResult() employee record(s) Available in Database!\n);}/*** Changes salary of the specified employee to passed salary*param name*param Salary*/private static void modify(String name,Double Salary){em.getTransaction().begin();Employee e(Employee) em.find(Employee.class, name); //Find Employee to be modifiede.setSalary(Salary); //Modify the salaryem.getTransaction().commit();System.out.println(Modification Successful!\n);}public static void main(String arg[]){System.out.println(Welcome to the Employee Database System!\n\n);do{ System.out.print(Menu: \n 1. View DB\n2. Insert \n3. Delete \n4. Modify\n5. Exit\nEnter Choice...);int chinput.nextInt();try{switch(ch){case 1:displayAll();break;case 2:insert();break;case 3:System.out.print(Name of Employee to be Deleted2: );namebufferedReader.readLine();delete(name);break;case 4:System.out.print(Name of Employee to be Modified: );namebufferedReader.readLine();System.out.print(New Salary: );Salaryinput.nextDouble();modify(name,Salary);break;case 5:if(em!null) em.close(); //Close EntityManagerif(emf!null) emf.close(); //Close EntityManagerFactoryexittrue;break;}}catch (IOException e){e.printStackTrace();}}while(!exit);}static EntityManagerFactory emfPersistence.createEntityManagerFactory(empDB.odb);static EntityManager ememf.createEntityManager();static Scanner inputnew Scanner(System.in);static BufferedReader bufferedReader new BufferedReader(new InputStreamReader(System.in));static int n;static String name;static Double Salary;static boolean exitfalse;//Query Repositorystatic String countQuerySelect count(emp) from Employee emp;static String displayAllQuerySelect emp from Employee emp;} 现在保存您的项目然后按运行按钮或按Ctrl F11。 现在该程序应该运行了您可以在底部窗格的“控制台”部分中看到输出。 这只是一个控制台应用程序。 我鼓励您为此开发一个GUI VI。 ObjectDB资源管理器工具 在结束之前我想向您介绍ObjectDB提供的一个非常有用的工具。 它称为ObjectDB Explorer可用于查看数据库文件包含的内容。 即您可以浏览数据库而无需编写代码来访问它。 这对于了解您的应用程序和进行调试非常有用。 您可以在Object DB的bin目录您在其中提取ObjectDB文件中找到资源管理器。 运行explorer.exe。 现在您可以使用File- Open Local选项打开数据库。 当您访问服务器中存储的数据库时将完成“打开远程”。 现在浏览并选择数据库并打开它。 现在双击左侧“持久性支持的类”窗格中显示的数据库。 现在对象浏览器将显示您的数据库。 您可以展开数据库中的每个对象以查看其内容。 相当整洁吧 以下是插入后我的数据库的样子…… 该资源管理器还提供了许多其他选项。 随意探索它们 我想您会对JPA有一个生动的想法。 我已经解释了使用ObjectDB实现的JPA的基本知识。 为了了解更多信息并增加知识您可以参考ObjectDB手册 该手册提供了有关带有ObjectDB的JPA的详尽详尽的文本。 这是Java真正有用的功能将对您有很大帮助。 对我有很大帮助 因此尝试更多地了解它。 您可以从此处下载源代码 参考 Java持久性API一个快速的介绍......从我们JCG伙伴史蒂夫·罗宾逊在褴褛“N”科技博客。 相关文章 GWT 2 Spring 3 JPA 2 Hibernate 3.5教程 JBoss 4.2.x Spring 3 JPA Hibernate教程 DataNucleus 3.0与Hibernate 3.5 Spring和AspectJ的领域驱动设计 提升您的休眠引擎 依赖注入–手动方式 翻译自: https://www.javacodegeeks.com/2011/08/java-persistence-api-quick-intro.html