基础测试:
第一步:配置依赖:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>4.3.7.Final</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.33</version> </dependency>
第二步:在classpath路径下,添加META-INF文件夹,添加peristence.xml文件.
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> <!-- 持久化单元.一个持久化单元可以创建一个EntityManagerFactory --> <persistence-unit name="myJPA" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> <property name="hibernate.connection.url" value="jdbc:mysql://127.0.0.1:3306/tests" /> <property name="hibernate.connection.username" value="root" /> <property name="hibernate.connection.password" value="root" /> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> <property name="hibernate.use_sql_comments" value="false" /> <property name="hibernate.hbm2ddl.auto" value="update" /> <!-- 设置外连接抓取树的最大深度 --> <property name="hibernate.max_fetch_depth" value="3"/> </properties> </persistence-unit> </persistence>
@Entity @Table(name="t_person") public class Person { //主键 @Id //主键策略 @GeneratedValue(strategy=GenerationType.AUTO) private Long id; //名字 @Column(name="name",length=10,nullable=false) private String name; //生日 日期 @Temporal(TemporalType.DATE) private Date birthday;//日期:date 日期时间: timestamp ,时间:time //枚举 EnumType.ORDINAL 保存索引 @Enumerated(EnumType.STRING)//保存字符串 @Column(length=5,nullable=false) private Gender gender=Gender.MAN; //大文本>>>字符 @Lob private String info; //大文本>>>字节 @Lob //抓取策略 FetchType.EAGER :立即加载,FetchType.LAZY:延迟加载 @Basic(fetch=FetchType.LAZY) private Byte[] file; //不让这个属性跟数据库进行映射.不进行注解,默认进行映射 @Transient private String imagePath; //省略get/set方法... }
枚举类:
public enum Gender { MAN,WOMEN }
使用Junit进行测试:
public class TestJPA { EntityManagerFactory emf = null; @Before public void before() { emf = Persistence.createEntityManagerFactory("myJPA"); } /** * </pre> 添加一个用户 </pre> */ @Test public void addPerson() { Person user = new Person(); user.setName("哈哈"); user.setBirthday(new Date()); // 创建实体管理器对象 EntityManager em = emf.createEntityManager(); // 开启事务 em.getTransaction().begin(); // 持久化对象 em.persist(user); // 提交事务 em.getTransaction().commit(); // 关闭entityManager em.close(); } /** * 查询用户 find相当于hibernate的get.立即加载 没有记录,返回null */ @Test public void getPerson() { // 创建实体管理器对象 EntityManager em = emf.createEntityManager(); Person person = em.find(Person.class, 2L); System.out.println(person); // 关闭entityManager em.close(); } /** * getReference:相当于heibernate的load方法 ,延迟加载,返回代理对象 没有记录,抛出异常 * javax.persistence.EntityNotFoundException: Unable to find * com.zt.entity.Person with id 2 */ @Test public void getPerson2() { // 创建实体管理器对象 EntityManager em = emf.createEntityManager(); Person person = em.getReference(Person.class, 2L); System.out.println(person); // 关闭entityManager em.close(); } /** * 修改用户. jpa实体的状态: 1,new. 2,托管. 3,游离状态. 4.删除状态 */ @Test public void modifyPerson() { EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); // 查找ID为1的user,进行修改 Person person = em.find(Person.class, 3L);// 托管状态 person.setName("我被修改了"); em.getTransaction().commit(); em.close(); } @Test public void modifyPerson2() { EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); // 查找ID为1的user,进行修改 Person person = em.find(Person.class, 1L);// 托管状态 em.clear();// 把实体管理器中的所有实体变成游离状态 person.setName("我被修改了"); em.merge(person);// 把在游离状态的实体更新同步至数据库 em.getTransaction().commit(); em.close(); } /** * 删除用户 */ @Test public void deletePerson() { EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); // 查找id为1的用户删除掉 Person person = em.find(Person.class, 2L); em.remove(person); em.getTransaction().commit(); em.close(); } // ----------------------查询语句---------------------------------- /** * </pre> JPQL: JPA规范需要写上select 别名. 如果使用hibernate实现jpa,可以省略 </pre> */ @Test public void query() { EntityManager em = emf.createEntityManager(); Query query = em.createQuery("select o from Person o where o.id=?1"); query.setParameter(1, 1L); // query.getResultList();//集合 相当于hibernate list() Person person = (Person) query.getSingleResult();// 唯一结果 // 相当于hibernate的uniqueResult() System.out.println(person); em.close(); } @Test public void delete() { EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); Query query = em.createQuery("delete from Person o where o.id=?1"); query.setParameter(1, 1L).executeUpdate(); em.getTransaction().commit(); em.close(); } @Test public void update() { EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); em.createQuery("update from Person o set o.name=:name where o.id=?1")// .setParameter(1, 2L)// .setParameter("name", "嘻嘻")// .executeUpdate(); em.getTransaction().commit(); em.close(); } /** * 关闭EntityManagerFactory */ @After public void after() { if (null != emf) { emf.close(); } } }
相关推荐
jpa从入门到放弃,你值得拥有!!!!!
**JPA入门(一)** Java Persistence API(JPA)是Java平台上的一个标准,用于对象关系映射(ORM),它允许开发人员使用面向对象的编程模型来操作数据库。这篇入门教程将帮助初学者理解JPA的基本概念和用法。 **1....
### JPA入门实战教程知识点详解 #### 一、JPA简介与重要性 - **JPA定义**: JPA(Java Persistence API)是一种为Java应用程序提供持久化能力的标准接口,允许开发者将Java对象映射到关系型数据库中的表,从而简化...
Spring Framework对JPA的支持本身就很强大,我们不用理会EntityManager的创建,事务处理等等.Spring又进步了,只需要声明一下方法接口,Spring Data JPA可以帮你完成数据访问层的实现代码,开发者把更多的心思放在业务...
【Spring Data JPA 入门实例】 Spring Data JPA 是 Spring 框架的一个模块,它简化了数据库访问层(DAO)的开发,通过提供自动化的 Repository 实现,使得开发者无需编写大量的 CRUD(创建、读取、更新、删除)代码...
在本项目"Spring Data JPA入门项目02"中,我们将深入探讨如何使用Spring Data JPA进行查询操作,包括排序和分页。Spring Data JPA是Spring Framework的一个模块,它为Java Persistence API (JPA) 提供了一种更加便捷...
JPA从入门到精通 推荐
在这个"Spring Data JPA入门项目01"中,我们将探讨如何利用Spring Data JPA来实现基本的CRUD(创建、读取、更新和删除)功能。 首先,我们需要在项目中引入Spring Data JPA的相关依赖。这通常在Maven或Gradle的配置...
**Spring Data JPA 入门详解** Spring Data JPA 是 Spring 框架的一个模块,它简化了数据库访问,提供了一种声明式的方式来处理数据访问层的 CRUD(创建、读取、更新、删除)操作。它与 Java Persistence API (JPA)...
本入门例子将帮助你理解并掌握Spring Data JPA的核心概念和常用功能。 1. **什么是Spring Data JPA** Spring Data JPA是Spring框架的一部分,它为JPA提供了一种声明式的方法来处理数据访问层。通过使用Spring Data...
**事物(Transaction)JPA 入门** Java Persistence API(JPA)是Java平台上的一个标准,用于管理和持久化Java对象到关系数据库。它提供了一种面向对象的方式来处理数据库操作,使得开发人员可以避免直接编写SQL,...
本篇文章将深入探讨Hibernate JPA入门案例所需的依赖,以及如何配置MySQL驱动。 首先,我们需要理解Hibernate和JPA的关系。Hibernate是最初的ORM框架,提供了全面的功能来处理数据库交互。而JPA是Java EE的一部分,...
在"JPA快速入门初步(myeclipse)"中,我们将学习如何在MyEclipse中设置JPA项目,理解基本的JPA概念,以及如何使用注解来定义实体和映射数据库表。 1. **JPA基础概念**: - **实体(Entity)**: 表示数据库中的表...
在"JSF+JPA入门开发示例"中,你可能会学习到以下关键知识点: 1. **JSF生命周期**:JSF组件有六个主要阶段,包括恢复视图、应用请求值、处理验证、更新模型值、调用应用程序和渲染响应。理解每个阶段的功能对于调试...
**SpringDataJPA入门:用户管理系统** 在Java开发领域,Spring框架是不可或缺的一部分,而SpringDataJPA则是Spring框架中的一个重要模块,它为开发者提供了访问数据库的便捷方式。本教程将引导你入门SpringDataJPA...
Java JPA(Java Persistence API)是Java EE 5.0平台的一个重要规范,它提供了ORM(Object-Relational Mapping)框架,使得Java开发者可以更轻松地处理数据库操作。JPA支持通过JDK 5.0的注解或者XML来描述对象与...
### JPA入门教程知识点详解 #### 一、JPA概述 **JPA**(Java Persistence API)作为Java EE 5.0平台的一个标准ORM规范,它旨在简化对象持久化的开发工作并推动ORM领域的标准化进程。这一规范由Sun Microsystems推出...