jpa使用java EE 5的Annotation机制不同于hibernate等的把配置信息写到xml中
类似于Hibernate 的传统模式的ORM 框架大都是采用xml 作为配置文件,但采用文本的xml 配置存在一些缺陷:
1.描述符多,不容易记忆和掌握
2.无法做自动的校验,需要人工排错
3.当系统变大时,大量的 xml 配置难以管理
4.读取和解析 xml 配置非常耗时,导致应用启动缓慢,不利于测试和维护
5.做 O/R Mapping 的时候需要在java 文件和xml 配置文件之间交替,增大了工作量
6.运行中保存 xml 配置需要消耗额外的内存
采用标注可以很好的解决这些问题:
1. 描述符大量减少。以往在xml 配置中往往需要描述java 属性的类型,关系等等。
而标注本身就是java 语言,从而省略了大量的描述符
2. 编译期校验。错误的批注在编译期间就会报错。
3. 标注批注在java 代码中,避免了额外的文件维护工作
4. 标注被编译成java bytecode,消耗小的多内存,读取也非常迅速,往往比xml 配
置解析快几个数据量级,利于测试和维护
@Entity:将JavaBean 标注为一个实体.
@Table:定义当前Entity 对应数据库中的表,用name属性标识
@Id:定义了实体的主键信息。在一个实体类中只有一个主键标注,而此标注也是必须
的!它本身没有任何额外的属性可以设置
@GeneratedValue:一般它和ID 的标注配合使用,用来制定主键的生产策略。通过
strategy 属性指定。默认情况下,JPA 自动选择一个最适合底层数据库的主键生成策略,如
SqlServer 对应identity,MySql 对应auto increment。在javax.persistence.GenerationType
这个枚举类中定义了以下几种可供选择的策略:
1) IDENTITY:表自增键字段,Oracle 不支持这种方式;
2) AUTO: JPA 自动选择合适的策略,是默认选项(不幸的是大部分时候都会选择成
Sequence);
3) SEQUENCE:通过序列产生主键,还可以进一步通过@SequenceGenerator 标注来指定
更详细的生产方式,MySql 不支持这种方式(注:@SequenceGenerator 用法示例:
@GeneratedValue(strategy=GenerationType.SEQUENCE)
@SequenceGenerator(name="SEQ_TEST", // 此生成器的别名
sequenceName="User_SEQ",// 对应的 Oracle sequence 的名字
allocationSize=25)
);
4) TABLE:通过表产生主键,框架借由表模拟序列(sequence)产生主键,使用该策略可
以使应用更易于数据库移植。不同的JPA 厂商所默认生成的表名是不同的,如 OpenJPA
生成openjpa_sequence_table 表,Hibernate 生成一个hibernate_sequences 表,而
TopLink 则生成sequence 表。这些表都具有一个序列名和对应值两个字段,如SEQ_NAME
和SEQ_COUNT。
另外还有一个重要的属性就是 generator,它可以更进一步制定主键生成器所采用的参
数,例如sequence 表的表名可以这样定义:@GeneratedValue(strategy=SEQUENCE,
generator="CUST_SEQ") 。同样的也可以用于TABLE 方式的生成器上:
@GeneratedValue(strategy=TABLE, generator="CUST_GEN")。
@Column:属性或者变量对应的表字段。一般来说我们并不需要指定表字段的类型,
因为JPA 会根据反射从实体属性中获取类型;如果是字符串类型,我们可以指定字段长度,
以便可以自动生成DDL 语句;还可以指定一些其它的属性例如是否唯一(unique),是否可
以为空(nullable),是否可以插入和更新等等(insertable 和updatable);name 属性指定
了它对应于数据库中的列名。如果是时间类型,一般还需要指定精度,用@Temporal 来进
行标注。同样的这个标注也不是必须的,如果没有写任何参数的话,它的名字和类型都和当
前标注的属性或者变量的名字和类型相同。
@Temporal:如果属性是时间类型,因为数据表对时间类型有更严格的划分,所以必
须指定具体时间类型。在javax.persistence.TemporalType 枚举中定义了3 种时间类型:
1) DATE :等于java.sql.Date;
2) TIME :等于java.sql.Time;
3) TIMESTAMP :等于java.sql.Timestamp。
用法示例:
@Column(name = "BIRTHDAY")
@Temporal(TemporalType.DATE)
。同样的这个标注不是必须的,但是它没有默认值,所以必须指定一个取值。
以上是一些常用的标注简单介绍
@Entity(name="User")
@Table(name = "myuser", catalog = "test", uniqueConstraints = {})
public class Myuser implements java.io.Serializable {
// 变量定义
private Integer id;
private String username;
private String password;
public Myuser() {
}
// Property accessors
@Id
@Column(name = "id", unique = true, nullable = false, insertable =
true, updatable = true)
@GeneratedValue(strategy=GenerationType.IDENTITY)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
分享到:
相关推荐
**JPA入门(一)** Java Persistence API(JPA)是Java平台上的一个标准,用于对象关系映射(ORM),它允许开发人员使用面向对象的编程模型来操作数据库。这篇入门教程将帮助初学者理解JPA的基本概念和用法。 **1....
【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入门实战教程知识点详解 #### 一、JPA简介与重要性 - **JPA定义**: JPA(Java Persistence API)是一种为Java应用程序提供持久化能力的标准接口,允许开发者将Java对象映射到关系型数据库中的表,从而简化...
在这个"Spring Data JPA入门项目01"中,我们将探讨如何利用Spring Data JPA来实现基本的CRUD(创建、读取、更新和删除)功能。 首先,我们需要在项目中引入Spring Data JPA的相关依赖。这通常在Maven或Gradle的配置...
Spring Framework对JPA的支持本身就很强大,我们不用理会EntityManager的创建,事务处理等等.Spring又进步了,只需要声明一下方法接口,Spring Data JPA可以帮你完成数据访问层的实现代码,开发者把更多的心思放在业务...
**Spring Data JPA 入门详解** Spring Data JPA 是 Spring 框架的一个模块,它简化了数据库访问,提供了一种声明式的方式来处理数据访问层的 CRUD(创建、读取、更新、删除)操作。它与 Java Persistence API (JPA)...
在"JSF+JPA入门开发示例"中,你可能会学习到以下关键知识点: 1. **JSF生命周期**:JSF组件有六个主要阶段,包括恢复视图、应用请求值、处理验证、更新模型值、调用应用程序和渲染响应。理解每个阶段的功能对于调试...
本篇文章将深入探讨Hibernate JPA入门案例所需的依赖,以及如何配置MySQL驱动。 首先,我们需要理解Hibernate和JPA的关系。Hibernate是最初的ORM框架,提供了全面的功能来处理数据库交互。而JPA是Java EE的一部分,...
**SpringDataJPA入门:用户管理系统** 在Java开发领域,Spring框架是不可或缺的一部分,而SpringDataJPA则是Spring框架中的一个重要模块,它为开发者提供了访问数据库的便捷方式。本教程将引导你入门SpringDataJPA...
**JPA入门(二)** Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的数据。它是Java EE和Java SE环境中的一种ORM(对象关系映射)解决方案,使得开发人员可以使用面向对象的编程模型来...
【标题】:“Hibernate+Struts+JPA入门例子”是一个典型的Java Web开发示例,它结合了三个重要的技术框架:Hibernate、Struts和Java Persistence API(JPA)。这个压缩包包含了一个初学者如何将这三个框架整合到一个...
**事物(Transaction)JPA 入门** Java Persistence API(JPA)是Java平台上的一个标准,用于管理和持久化Java对象到关系数据库。它提供了一种面向对象的方式来处理数据库操作,使得开发人员可以避免直接编写SQL,...
jpa从入门到放弃,你值得拥有!!!!!
在"JPA入门Demo"中,我们可以看到如何使用这些概念和API来创建一个简单的JPA应用,包括定义实体类、设置关联关系、编写查询语句以及进行数据操作。通过实践这些示例,开发者可以更好地理解和掌握JPA在实际项目中的...
通过提供的"jpa入门范例"项目,初学者可以实际操作,深入理解JPA的工作原理和用法。这个项目可能包含了创建实体、配置数据源、执行CRUD操作、以及处理关联关系等基本示例,非常适合初学者练习和实践。
本入门例子将帮助你理解并掌握Spring Data JPA的核心概念和常用功能。 1. **什么是Spring Data JPA** Spring Data JPA是Spring框架的一部分,它为JPA提供了一种声明式的方法来处理数据访问层。通过使用Spring Data...