JPA实例-转载

具体例子

完成工程后工程结构如下图:

 (注意:persistence.xml文件的位置决定持久性的根(Persistence Root)。持久性的根为JAR文件或者包含META-INF目录(前提是persistence.xml位于此)的目录。一般将这个persistence.xml文件放在src下的META-INF中。命名及位置都不能变)

a)、导入相关jar包(见上图)和创建META-INF和persistence.xml文件.

persistence.xml配置如下:(我用的数据为MySQL,采用不同数据库及JPA的不同实现版本会导致配置内容不同)

[xhtml] view plain copy

  1. <persistence xmlns="http://java.sun.com/xml/ns/persistence"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_version=1">
  4. <persistence-unit name="mysqlJPA" transaction-type="RESOURCE_LOCAL">
  5. <properties>
  6. <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
  7. <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
  8. <property name="hibernate.connection.username" value="root" />
  9. <property name="hibernate.connection.password" value="123456" />
  10. <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/db1" />
  11. <property name="hibernate.max_fetch_depth" value="3" />
  12. <property name="hibernate.hbm2ddl.auto" value="update" />
  13. </properties>
  14. </persistence-unit>
  15. </persistence>

b)、编写实体bean,如下:

[c-sharp] view plain copy

  1. package com.hmk.bean;
  2. import javax.persistence.Column;
  3. import javax.persistence.Entity;
  4. import javax.persistence.GeneratedValue;
  5. import javax.persistence.Id;
  6. @Entity
  7. public class Person {
  8. private int id;
  9. private String name;
  10. @Id @GeneratedValue
  11. public int getId() {
  12. return id;
  13. }
  14. public void setId(int id) {
  15. this.id = id;
  16. }
  17. @Column(length=12)
  18. public String getName() {
  19. return name;
  20. }
  21. public void setName(String name) {
  22. this.name = name;
  23. }
  24. }

c)、编写junit测试代码,如下:

[java] view plain copy

  1. package junit.test;
  2. import javax.persistence.EntityManager;
  3. import javax.persistence.EntityManagerFactory;
  4. import javax.persistence.Persistence;
  5. import org.junit.BeforeClass;
  6. import org.junit.Test;
  7. import com.hmk.bean.Person;
  8. public class JpaTest {
  9. @BeforeClass
  10. public static void setUpBeforeClass() throws Exception {
  11. }
  12. @Test public void createTable(){
  13. //可以验证生成表是否正确
  14. EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");
  15. factory.close();
  16. }
  17. @Test public void save(){
  18. EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");
  19. EntityManager em = factory.createEntityManager();
  20. em.getTransaction().begin();
  21. Person person = new Person(); //person为new状态
  22. person.setName("zhang san");
  23. em.persist(person); //持久化实体
  24. em.getTransaction().commit();
  25. em.close();
  26. factory.close();
  27. }
  28. //new 、托管、脱管、删除
  29. @Test public void update(){
  30. EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");
  31. EntityManager em = factory.createEntityManager();
  32. em.getTransaction().begin();
  33. Person person = em.find(Person.class, 1);
  34. person.setName("hmk"); //person为托管状态
  35. em.getTransaction().commit();
  36. em.close();
  37. factory.close();
  38. }
  39. @Test public void update2(){
  40. EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");
  41. EntityManager em = factory.createEntityManager();
  42. em.getTransaction().begin();
  43. Person person = em.find(Person.class, 1);
  44. em.clear(); //把实体管理器中的所有实体变为脱管状态
  45. person.setName("hmk2");
  46. em.merge(person); //把脱管状态变为托管状态,merge可以自动选择insert or update 数据
  47. em.getTransaction().commit();
  48. em.close();
  49. factory.close();
  50. }
  51. @Test public void remove(){
  52. EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");
  53. EntityManager em = factory.createEntityManager();
  54. em.getTransaction().begin();
  55. Person person = em.find(Person.class, 1);
  56. em.remove(person); //删除实体
  57. em.getTransaction().commit();
  58. em.close();
  59. factory.close();
  60. }
  61. @Test public void find(){
  62. EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");
  63. EntityManager em = factory.createEntityManager();
  64. Person person = em.find(Person.class, 2); //类似于hibernate的get方法,没找到数据时,返回null
  65. System.out.println(person.getName());
  66. em.close();
  67. factory.close();
  68. }
  69. @Test public void find2(){
  70. EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");
  71. EntityManager em = factory.createEntityManager();
  72. Person person = em.getReference(Person.class, 2); //类似于hibernate的load方法,延迟加载.没相应数据时会出现异常
  73. System.out.println(person.getName()); //真正调用时才查找数据
  74. em.close();
  75. factory.close();
  76. }
  77. }

d)、运行junit测试代码里的相应方法就行可以。

时间: 2024-10-26 17:17:24

JPA实例-转载的相关文章

java IO流文件的读写具体实例(转载)

引言: 关于java IO流的操作是非常常见的,基本上每个项目都会用到,每次遇到都是去网上找一找就行了,屡试不爽.上次突然一个同事问了我java文件的读取,我一下子就懵了第一反应就是去网上找,虽然也能找到,但自己总感觉不是很踏实,所以今天就抽空看了看java IO流的一些操作,感觉还是很有收获的,顺便总结些资料,方便以后进一步的学习... IO流的分类:1.根据流的数据对象来分:高端流:所有的内存中的流都是高端流,比如:InputStreamReader  低端流:所有的外界设备中的流都是低端流

用Javascript动态添加删除HTML元素实例 (转载)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>用javascript动态添加删除html元素</title> <script type="text/jav

C# 最简单的三层架构实例 ——转载自网易博客

代码        /// <summary>        /// 初始化登录名称.登录密码(Model类)        /// </summary>        private string adminUser = string.Empty; //设置用户名称为空值        private string adminPwd = string.Empty; //设置用户密码为空值        public string AdminUser        {       

Java WebService 简单实例[转载]

[注意,本文转载自  http://hyan.iteye.com/    ] 一.准备工作(以下为本实例使用工具) 1.MyEclipse10.7.1 2.JDK 1.6.0_22 二.创建服务端 1.创建[Web Service Project],命名为[TheService]. 2.创建[Class]类,命名为[ServiceHello],位于[com.hyan.service]包下. 3.编写供客户端调用的方法,即编译方法代码. 4.进行编译 说明:编译失败的话,请将该项目引用的jdk设置

Python验证码识别处理实例(转载)

版权声明:本文为博主林炳文Evankaka原创文章,转载请注明出处http://blog.csdn.net/evankaka 一.准备工作与代码实例 1.PIL.pytesser.tesseract (1)安装PIL:下载地址:http://www.pythonware.com/products/pil/(CSDN下载) 下载后是一个exe,直接双击安装,它会自动安装到C:\Python27\Lib\site-packages中去, 个人补充:上面是32位,个人查到64位地址 http://ww

JPA学习---第四节:JPA实例与JPA主键生成策略

1.编写实体类,代码如下: package learn.jpa.bean; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class Person { @Id @GeneratedValue private Integer id; private String name; public Person(){}

Spring Data JPA 实例查询

一.相关接口方法 在继承JpaRepository接口后,自动拥有了按"实例"进行查询的诸多方法.这些方法主要在两个接口中定义,一是QueryByExampleExecutor,一个是JpaRepository,如下所示: public interface QueryByExampleExecutor<T> { <S extends T> S findOne(Example<S> example); //根据"实例"查找一个对象.

php webservice实例(转载)

首先大家要简单了解了何谓webservice,接下来就做两个非常简单的例子,webservice还是逃不开server端与client端. 我测试的环境为:apache2.2.11 php5.2.10 做这个测试之前,要确认你的php配置文件中已经将soap扩展打开,即extension=php_soap.dll;OK 现在我们来体验webservice //server端 serverSoap.php $soap = new SoapServer(null,array('uri'=>"h

Dubbo入门实例--转载

原文地址:http://blog.csdn.net/ruishenh/article/details/23180707?utm_source=tuicool 1.   概述 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案 主要核心部件 Remoting: 网络通信框架,实现了sync-over-async 和 request-response 消息机制. RPC: 一个远程过程调用的抽象,支持负载均衡.容灾和集群功能 Registry: