`
H.Z
  • 浏览: 16755 次
  • 来自: 长沙
社区版块
存档分类
最新评论

JPA入门(二)

    博客分类:
  • JPA
 
阅读更多



 

基础测试:

 

第一步:配置依赖:

 

               <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();
		}
	}
}

 

 

 

 

 

  • 大小: 4.2 KB
  • jap.zip (16.4 KB)
  • 下载次数: 0
分享到:
评论

相关推荐

    JPA从入门到精通

    jpa从入门到放弃,你值得拥有!!!!!

    JPA入门(一)

    **JPA入门(一)** Java Persistence API(JPA)是Java平台上的一个标准,用于对象关系映射(ORM),它允许开发人员使用面向对象的编程模型来操作数据库。这篇入门教程将帮助初学者理解JPA的基本概念和用法。 **1....

    Spring Data JPA从入门到精通

    'SpringDataJPA从入门到精通'以SpringBoot为技术基础 从入门到精通 由浅入深地介绍SpringDataJPA的使用。有语法 有实践 有原理剖析。'SpringDataJPA从入门到精通'分为12章 内容包括整体认识JPA、JPA基础查询方法、...

    spring Data Jpa入门

    Spring Framework对JPA的支持本身就很强大,我们不用理会EntityManager的创建,事务处理等等.Spring又进步了,只需要声明一下方法接口,Spring Data JPA可以帮你完成数据访问层的实现代码,开发者把更多的心思放在业务...

    spring data jpa入门实例

    【Spring Data JPA 入门实例】 Spring Data JPA 是 Spring 框架的一个模块,它简化了数据库访问层(DAO)的开发,通过提供自动化的 Repository 实现,使得开发者无需编写大量的 CRUD(创建、读取、更新、删除)代码...

    Spring Data JPA入门项目02

    在本项目"Spring Data JPA入门项目02"中,我们将深入探讨如何使用Spring Data JPA进行查询操作,包括排序和分页。Spring Data JPA是Spring Framework的一个模块,它为Java Persistence API (JPA) 提供了一种更加便捷...

    JPA从入门到精通 推荐

    JPA从入门到精通 推荐

    Spring Data JPA入门项目01

    在这个"Spring Data JPA入门项目01"中,我们将探讨如何利用Spring Data JPA来实现基本的CRUD(创建、读取、更新和删除)功能。 首先,我们需要在项目中引入Spring Data JPA的相关依赖。这通常在Maven或Gradle的配置...

    Spring Data JPA 入门例子极简代码

    **Spring Data JPA 入门详解** Spring Data JPA 是 Spring 框架的一个模块,它简化了数据库访问,提供了一种声明式的方式来处理数据访问层的 CRUD(创建、读取、更新、删除)操作。它与 Java Persistence API (JPA)...

    spring data jpa 入门例子

    本入门例子将帮助你理解并掌握Spring Data JPA的核心概念和常用功能。 1. **什么是Spring Data JPA** Spring Data JPA是Spring框架的一部分,它为JPA提供了一种声明式的方法来处理数据访问层。通过使用Spring Data...

    事物JPA入门

    **事物(Transaction)JPA 入门** Java Persistence API(JPA)是Java平台上的一个标准,用于管理和持久化Java对象到关系数据库。它提供了一种面向对象的方式来处理数据库操作,使得开发人员可以避免直接编写SQL,...

    hibernate jpa 入门案例依赖jar

    本篇文章将深入探讨Hibernate JPA入门案例所需的依赖,以及如何配置MySQL驱动。 首先,我们需要理解Hibernate和JPA的关系。Hibernate是最初的ORM框架,提供了全面的功能来处理数据库交互。而JPA是Java EE的一部分,...

    JPA快速入门初步(myeclipse)

    在"JPA快速入门初步(myeclipse)"中,我们将学习如何在MyEclipse中设置JPA项目,理解基本的JPA概念,以及如何使用注解来定义实体和映射数据库表。 1. **JPA基础概念**: - **实体(Entity)**: 表示数据库中的表...

    JSF+JPA入门开发示例

    在"JSF+JPA入门开发示例"中,你可能会学习到以下关键知识点: 1. **JSF生命周期**:JSF组件有六个主要阶段,包括恢复视图、应用请求值、处理验证、更新模型值、调用应用程序和渲染响应。理解每个阶段的功能对于调试...

Global site tag (gtag.js) - Google Analytics