知识点:
【
开发JPA依赖的jar文件:(这里使用JPA实现产品hibernate)
注意:导入*.jar文件的时候不要有中文路径和空格,最好是在项目中建立一个包来存放这些jar文件
Hiberante核心包(8个文件)
hibernate-distribution-3.3.1.GA
---------------------------------------------
hibernate3.jar
lib\bytecode\cglib\hibernate-cglib-repack-2.1_3.jar
lib\required\*.jar
Hiberante注解包(3个文件):hibernate-annotations-3.4.0.GA
------------------------------------------------------------------------------------
hibernate-annotations.jar
lib\ejb3-persistence.jar、hibernate-commons-annotations.jar
Hibernate针对JPA的实现包(3个文件):hibernate-entitymanager-3.4.0.GA
------------------------------------------------------------------------------------------------------
hibernate-entitymanager.jar
lib\test\log4j.jar、slf4j-log4j12.jar
需要的包可见附件...
JPA的配置文件:
JPA规范要求在类路径的META-INF目录下放置persistence.xml,文件的名称是固定的,配置模版如下:
<?xml version="1.0"?>
<persistence 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" version="1.0">
<persistence-unit name="person" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
<property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="123456"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=UTF-8"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
】
照样实现步骤:
第一步:导入JPA实现的产品*.jar 和相应的数据库驱动
第二步:类路径的META-INF目录下 persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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"
version="1.0">
<!-- 以transaction-type下是 事务提交类型有两种事务:第一、本地事务(在同一个数据库中完成事务) 第二、全局事务(在不同数据库中需要在同一事务中完成不同数据库的操作)-->
<persistence-unit name="person" transaction-type="RESOURCE_LOCAL">
<properties>
<!-- 使用的方言 -->
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<!-- 数据库驱动 -->
<property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver" />
<!-- 数据库用户名 -->
<property name="hibernate.connection.username" value="root" />
<!-- 数据库密码 -->
<property name="hibernate.connection.password" value="liyong" />
<!-- 数据库连接url -->
<property name="hibernate.connection.url"
value="jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=UTF-8" />
<!-- 表结构发生变化的时候更新表结构 ,表不存在是创建表-->
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>
第三步:编写实体
@Entity
public class Person {
private Integer id;
private String name;
public Person(){}
public Person(String name){
this.name=name;
}
//@Id表示这个属性为主键 (可以标注在字段上或是getter属性上)
//@GeneratedValue(strategy=GenerationType.AUTO)表示生成主键策略为自增长 ,为默认
//下面的两种策略在不同数据库中有些是不支持的所有,最好使用上面的策略它会根据方言自动来识别
//@GeneratedValue(strategy=GenerationType.IDENTITY
//@GeneratedValue(strategy=GenerationType.SEQUENCE
//@GeneratedValue(strategy=GenerationType.TABLE通用效率低
@Id @GeneratedValue(strategy=GenerationType.AUTO)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
第四步:编写单元测试
public class PersonTest {
@Test
public void save()
{
//得到这个EntityManagerFactory时就会去创建表
//hibernate 中得到sessionFactory同等
EntityManagerFactory entityFactory=Persistence.createEntityManagerFactory("person");
//得到EntityManager
//hibernate中得到session等同
EntityManager entity=entityFactory.createEntityManager();
//开启事务和hibernate一样
entity.getTransaction().begin();
entity.persist(new Person("liyong"));
entity.getTransaction().commit();
//关闭EntityManager
entity.close();
//关闭 EntityManagerFactory
entityFactory.close();
}
}
第五步:运行...
分享到:
相关推荐
本压缩包文件"04_JPA详解_第一个JPA实例与JPA主键生成策略.zip"包含了关于如何在实际项目中运用JPA,以及理解JPA主键生成策略的详细教程。 ### JPA基础 1. **JPA简介**: JPA是Java EE的一部分,它提供了一套规范,...
【标题】"04_传智播客JPA详解_第一个JPA实例与JPA主键生成策略"涉及的关键知识点主要包括Java Persistence API (JPA)的基础应用、首个JPA实例的创建以及JPA主键生成策略的理解和配置。JPA是Java平台上的一个标准,...
例如,@Entity表示一个Java类对应数据库中的一个表,@Id表示主键字段,@GeneratedValue则用于指定主键生成策略。 在搭建JPA环境时,我们需要以下几个关键的jar包: 1. **JPA API**:这是JPA规范的接口定义,通常...
JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用对象持久化的开发工作,实现ORM的统一。JPA详解视频教程 第4讲 第一个JPA实例与JPA主键生成策略.avi
6. **懒加载(Lazy Loading)与即时加载(Eager Loading)**: JPA支持关联对象的懒加载和即时加载策略。懒加载意味着关联的对象只有在真正需要时才会被加载,而即时加载则会在加载主体对象时一起加载关联对象。 7. ...
本篇文章将深入探讨JPA的4种主键生成策略以及Hibernate的13种主键生成策略,并通过实例来帮助理解。 ### JPA主键生成策略 1. **`GenerationType.AUTO`**:这是最常用的策略,具体的生成方式由数据库供应商决定,...
seqhilo是一种通过hilo算法实现的主键生成策略,但是主键历史保存在Sequence中。这种策略适用于支持Sequence的数据库,如Oracle。 increment increment是一种插入数据的时候hibernate会给主键添加一个自增的主键的...
2. **持久化上下文(Persistence Context)**:这是JPA管理实体对象的环境,它可以跟踪实体的状态(新建、已修改、未改变或已删除),并负责与数据库的交互。 3. ** EntityManager**:它是JPA的主要接口,提供了对...
本教程将详细讲解如何搭建JPA开发环境以及如何理解与应用全局事务。 首先,我们需要了解**JPA的基本概念**。JPA提供了一种面向对象的方式来映射关系数据库,使得开发者可以使用Java对象来操作数据库,而无需直接...
本教程将指导你如何搭建一个基于JPA和Hibernate的实例,以便在Java项目中进行数据库操作。 首先,理解JPA的核心概念至关重要。JPA提供了一套规范,允许开发者使用面向对象的编程方式来处理关系型数据库。它定义了...
5. **注解驱动(Annotation-driven)**: JPA支持使用注解来配置实体类,如`@Table`定义表名,`@Id`标记主键,`@GeneratedValue`控制主键生成策略等。 6. **查询语言(JPQL)**: Java Persistence Query Language,...
**JPA+Spring+Struts整合实例** 整合JPA、Spring和Struts的主要目标是实现数据访问层(DAO)、业务逻辑层(Service)和表示层(View)的有效协同工作。 **1. 配置环境** 首先,确保你的项目中包含了这三个框架的...
例如,假设有一个名为`User`的实体,我们可以创建一个`UserRepository`接口,该接口继承自`JpaRepository, Long>`,这里的Long代表主键类型。`JpaRepository`接口提供了基础的CRUD操作,如`save()`, `findAll()`, `...
下面我们将详细探讨如何将Spring与JPA整合,以及如何创建一个简单的实例。 首先,我们需要理解Spring和JPA的核心概念。Spring框架提供了一种依赖注入(Dependency Injection)的机制,使得代码更加灵活和可测试。而...
本文将详细介绍如何在Eclipse环境中配置JPA,以便自动生成数据库表对应的已注解实体类。 首先,我们需要创建一个JPA项目。在Eclipse中,右键点击工作空间,选择"New" -> "Other…",在弹出的对话框中,搜索并选择...
在这个实例中,我们将探讨如何将Spring与Hibernate JPA2整合,以实现高效且灵活的数据访问。 首先,让我们理解Spring与Hibernate JPA2整合的基础。Spring通过其`LocalContainerEntityManagerFactoryBean`类支持JPA...
实体类需要使用`@Entity`注解标记,并且通常有一个与表主键对应的字段,标记为`@Id`。 2. **实体管理器(EntityManager)**: 它是JPA的主要接口,负责实体的生命周期管理,包括创建、查找、更新和删除实体。 3. **...
spring data jpa 实例源码 spring data jpa 实例源码 spring data jpa 实例源码