zoukankan      html  css  js  c++  java
  • JPA注解

    备注:注解按照英文字母顺序进行排序。

    @Basic

    1、变量的get和set方法没有加上注解,默认注解是@Basic

    2、@Basic:表示一个简单的属性到数据库表的字段的映射

    3、fetch:表示该属性的读取策略,有两种,默认是EAGER。EAGER是主支抓取,LAZY是延迟加载。

    4、optional:表示该属性是否允许null,默认是true

    @Basic(fetch = FetchType.EAGER,optional = true)
    public Integer getId() {
        return id;
    }
    

    @Column

    1、当实体的属性变量与其映射的数据库表的列名不同,需要使用@Column。

    2、可与@Id一起使用。

    3、可以在@Column里面配置属性:name,length,unique,nullable。

    4、@Column标注的columnDefinition属性:表示该字段在数据库中的实际类型。通常ORM框架可根据属性类型自动判断数据库中字段的类型,但是对于Date类型仍然无法确定数据库中字段的类型是DATE,TIME,还是TIMESTAMP。

    @Column(name = "name",length = 5,nullable = true,unique = false)
    private String name;
    

    @Entity

    1、用于实体类的声明语句之前,指出该Java类为实体类,并映射到指定的数据库表

    2、常与@Table一起用,表示映射到指定的数据库表。如果类名与数据库表名不对应,需要添加名字,见下方例子。

    3、用@Entity修饰的java类是实体类,通常放在entity文件夹。

    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import javax.persistence.*;
    
    @Data
    @Entity
    @Table(name = "STU")
    @AllArgsConstructor
    @NoArgsConstructor
    public class Student {
        @Id
        @Column(name = "id")
        private Integer id;
    
        @Column(name = "name",length = 5,nullable = true,unique = false)
        private String name;
    
        @Column(name = "passwors")
        private String password;
    
        @Column(name = "address")
        private String address;
    }
    

    @GeneratedValue

    1、用于标注主键的生成策略。通过strategy属性指定。默认情况下,JPA会自动选择一个最适合底层数据库的主键生成策略。

    2、MySQL对应的主键自增是auto increment,SQL Server对应的是identity。

    //MySQL会自动适配数据表的自增
    @generatedValue(strategy=GenerationType.AUTO)
    @Id
    private int id;
    

    3、几种主键生成策略。

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

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

    SEQUENCE:通过序列产生主键,通过@SequenceGenerator注解产生序列名。MySQL不支持这种方式。Oracle支持这种方式。

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

    @Id

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

    @Modifying

    使用JPA的时候,在dao层使用@Query进行更新/删除操作的时候,需要添加@Modifying表示更新/删除操作

    @Repository
    public interface CustomerRepository extends JpaRepository<Customer,Integer> , JpaSpecificationExecutor<Customer> {
        /**
        * 根据id进行删除
        */
        @Query(value = "delete Customer where id = ?1")
        @Modifying
        void deleteByIdJpql(Integer id);
    }
    

    @Query(value="")

    表示查询操作,value里面写SQL语句。

    @Rollback(value= false)

    1、设置是否会自动回滚。True会回滚,false不回滚。

    2、使用原因:JPA使用jpql完成更新/删除操作,需要手动添加事务的支持。当jpql更新/删除操作结束后,会自动回滚事务,造成数据没有更新/删除的假象。因此需要添加注解 @Rollback(value=false)

    @Query(value = "update Customer set custName = ? where custId = ?")
    @Modifying
    @Transactional   // springdata jpa使用jpql执行插入,更新,删除需要手动提交事务
    @Rollback(false) // 默认在执行之后,回滚事务,这里设置不回滚
    void updateCustomer(String custName, long custId);
    

    @Table

    1、当实体类与其映射的数据库表名不相同的时候,需要使用@Table标注说明,@Table里的name属性需要写对应的数据库表名称。

    2、@Table可以和@Entity并列使用,置于实体类声明语句之前。可写于单独语句行,也可与声明语句同行

    3、@Table标注的常用选项是name,用于指明数据库的表明

    4、@Table还有两个选项是catalog和schema,用于设置表的数据库目录或模式,通常为数据库名

    5、uniqueConstraints选项用于设置约束条件,通常不需要设置。

    @Transient

    如果一个属性并非数据库表的字段映射,就一定要将其标为@Transient,ORM框架将忽略该属性,否则ORM框架会默认其注解为@Basic。

    @Temporal

    出生年月日应该使用@Temporal(TemporalType.DATE)在Java API中并没有定义Date类型的精度在数据库中,表示Date的精度有三种DATE:单纯日期TIME:时间TIMESTAMP:日期+时间示例代码,注解加在get方法上面

    @Column
    private Date birth;
    
    @Temporal(TemporalType.DATE)//使用的日期格式为xxxx-xx-xx
    public Date getBirth() {
        return birth;
    }
    
    public void setBirth(Date birth) {
        this.birth = birth;
    }
    
  • 相关阅读:
    vue-cli的使用
    修饰模式(Decorator结构型)C#简单例子
    c#继承中的函数调用
    c#桥接模式(bridge结构模式)
    c#浅谈反射内存的处理
    C#中的try catch finally
    C#微信公众号开发系列教程(接收事件推送与消息排重)
    用 C# 读取二进制文件
    c#语言-多线程中的锁系统(一)
    .NET程序内,访问私有或者保护成员的技巧
  • 原文地址:https://www.cnblogs.com/YuRong3333/p/14504914.html
Copyright © 2011-2022 走看看