jpa使用小结

JPA

JPA(Java Persistence API)是Java标准中的一套ORM规范,借助JPA技术可以通过注解或者XML描述【对象-关系表】之间的映射关系,并将实体对象持久化到数据库中(即Object Model与Data Model间的映射)。

JPA为我们提供了:

  • ORM映射元数据:JPA支持通过XML和注解两种元数据形式描述对象和表间的映射关系,并持久化到数据库表中。如@Entity、@Table等
  • JPA的Criteria API:提供API来操作实体对象,执行CRUD操作,框架会自动将之转换为对应的SQL,使开发者从繁琐的JDBC、SQL中解放出来。

常用的JPA注解

  • @Entity

    @Entity 标注用于实体类声明语句之前,指出该Java 类为实体类,将映射到指定的关系数据库表。应用了此注解后,将会自动将类名映射作为数据库表名、将类内的字段名映射为数据库表的列名。映射策略默认是按驼峰命名法拆分将类名或字段名拆分成多部分,然后以下划线连接,如StudentEntity -> student_entity、studentName -> student_name。若不按默认映射,则可通过@Table、@Column指定。

  • @Table

    当实体类与其映射的数据库表名不同名时需要使用 @Table 标注说明,该标注与 @Entity 标注并列使用

    @Data
    @Entity //映射数据库表
    @Table(name = "test_user")//对应表名映射数据表(name属性:指定表名)
    
    public class User {
        private String userName;
        private String userPwd;
    }
    

  • @id

    @Id 标注用于声明一个实体类的属性映射为数据库的一个主键列

    @Id标注也可置于属性的getter方法之前。以下注解也一样可以标注于getter方法前。

  • @GeneratedValue

    @GeneratedValue 用于标注主键的生成策略,通过 strategy 属性指定。默认情况下,JPA 自动选择一个最适合底层数据库的主键生成策略:SqlServer 对应 identity,MySQL 对应 auto increment

    IDENTITY:采用数据库 ID自增长的方式来自增主键字段,Oracle 不支持这种方式

    AUTO: JPA自动选择合适的策略,是默认选项

    TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。

    SEQUENCE:通过序列产生主键,通过 @SequenceGenerator 注解指定序列名,MySql 不支持这种方式

  • @Column

    此注解不是必须的,无此字段也会将字段映射到表列。当实体的属性与其映射的数据库表的列不同名时需要使用 @Column 标注说明,其有属性 name、unique、nullable、length 等。

    类的字段名在数据库中对应的字段名可以通过此注解的name属性指定,不指定则默认为将属性名按驼峰命名法拆分并以下划线连接,如createTime对应create_time。注意:即使name的值中包含大写字母,对应到db后也会转成小写,如@Column(name="create_Time")在数据库中字段名仍为create_time。

  • @Transient

    表示该属性并非一个到数据库表的字段的映射,ORM 框架将忽略该属性

    如果一个属性并非数据库表的字段映射,就务必将其标识为 @Transient,否则ORM 框架默认为其注解 @Basic,例如工具方法不需要映射。

  • @MappedSuperClass

    用来修饰一个类,类中声明了各Entity共有的字段,也即数据库中多表中共有的字段,如create_time、update_time、id等。

    标注为@MappedSuperclass的类将不是一个完整的实体类,他将不会映射到数据库表,但是他的属性都将映射到其子类的数据库字段中。

    标注为@MappedSuperclass的类不能再标注@Entity或@Table注解,也无需实现序列化接口。

  • @EntityListeners(AuditingEntityListener.class)

    该注解用于指定Entity或者superclass上的回调监听类。该注解可以用于Entity或者superclass上。这是一个JPA Entity Listener,用于捕获监听信息,当Entity发生持久化和更新操作时。

    配合此注解,可以在字段或方法上使用(@CreatedDate、 @CreatedBy、@LastModifiedDate、 @LastModifiedBy),当进行实体插入或者更新可以自动赋值。

    (@CreatedDate 创建时间、@CreatedBy 创建人、@LastModifiedDate 更新时间、@LastModifiedBy 更新人)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值