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实战,JPA入门的好帮手,JPA入门帮手,适合初学者入门
NULL 博文链接:https://jzkangta.iteye.com/blog/965714
Spring Framework对JPA的支持本身就很强大,我们不用理会EntityManager的创建,事务处理等等.Spring又进步了,只需要声明一下方法接口,Spring Data JPA可以帮你完成数据访问层的实现代码,开发者把更多的心思放在业务...
Spring Data JPA入门项目01(添加、修改、删除、查询功能的基本实现)
Spring Data JPA入门项目02(查询操作的基本实现(排序、分页))
事物JPA入门,样例和PPT~事物JPA入门,样例和PPT~事物JPA入门,样例和PPT
Spring Data JPA 入门例子,博文地址http://blog.csdn.net/wu_boy/article/details/45172625
SpringDataJPA 入门 用户管理系统
jpa入门案例:单表查询,包括分页查询 使用springboot来整合实现
jpa从入门到放弃,你值得拥有!!!!!
JPA详细教程,用于JPA入门与参考很不错
JPA入门教程 非经典不上传 测试 spring开发 jpa必经之路
hibernate+strut+jpa入门例子
spring Data家族给我们提供了一个现成的dao层框架,这里面有不同的项目,如Spring Data JPA, Spring Data Neo4j and Spring Data MongoDB,他们的共同特点是他们给我们提供了框架代码,不再需要我们自己去实现了。
jpa入门项目,时候初学者练习,注解基于java persistence
里面用实例讲解了JPA标签的作用,对初次接触JPA的人有很大的帮助
关于JSF和JPA的一个入门示例录象,入门的朋友可以看看,用的NETBEANS开发工具
JPA从入门到精通 推荐
我所上传的都是我亲自写的和验证过的,spring data jpa 从网上收集了好多资料才弄好的,真辛苦。