概述
@Entity
@Entity - 这是一个标记注释,表明这个类是一个实体。这个注释必须放在类名称上。
@id
@Id - 此注释位于持有持久标识属性的特定字段上。该字段被视为数据库中的主键。
@Table
@Table - 当实体类与其映射的数据库表名不同名时需要使用 @Table 标注说明,该标注与 @Entity 标注并列使用,置于实体类声明语句之前,可写于单独语句行,也可与声明语句同行。
- @Table 标注的常用选项是 name,用于指明数据库的表名
- @Table标注还有一个两个选项 catalog 和 schema 用于设置表所属的数据库目录或模式,通常为数据库名。uniqueConstraints选项用于设置约束条件,通常不须设置。
@Column
@Column注解是用来标识实体类中属性与数据表中字段的对应关系w.
- name:映射的列名。如:映射tbl_user表的name列,可以在name属性的上面或getName方法上面加入;
- unique:是否唯一;
- nullable:是否允许为空;
- length:对于字符型列,length属性指定列的最大字符长度;
- insertable:是否允许插入;
- updatetable:是否允许更新;
- columnDefinition:定义建表时创建此列的DDL(数据库定义语言);
- secondaryTable:从表名。如果此列不建在主表上(默认是主表),该属性定义该列所在从表的名字。
备注:DML、DDL、DCL的区别
@MapsId
@MapsId注解用来标识实体类中属性对应数据库表中的主键。
@GeneratedValue
@GeneratedValue注解为一个实体生成一个唯一标识的主键,并提供主键的生成策略。
- generator:值是一个字符串,默认为"",其声明了主键生成器的名称。
- strategy:AUTO默认选项,程序控制;IDENTITY 主键由数据库生成, 采用数据库自增长, Oracle不支持这种方式;SEQUENCE 通过数据库的序列产生主键, MYSQL 不支持;Table 提供特定的数据库产生主键, 该方式更有利于数据库的移植。
@ElementCollection
@ElementCollection主要用于映射非实体。
@ElementCollection
private List<Address> address = new ArrayList<Address>();
@Embeddable
@Embeddable声明可嵌入对象,和ElementCollection配合使用。
@PersistenceContext
@PersistenceContext注入实体管理器,执行持久化操作,需要配置文件persistence.xml。
private EntityManager em;
@PersistenceContext
public void setEm(EntityManager em) {
this.em = em;
}
@Resource
@Resource注入容器提供的资源对象,比如SessionContext MessageDrivenContext。或者你那个name指定的JNDI对象。
@QueryHints
通过@QueryHint来实现查询缓存。
@QueryHints({@QueryHint(name = "org.hibernate.cacheable", value ="true")})
关系映射
对象关系映射(ORM)是一种功能,用于通过将对象状态映射到数据库列来开发和维护对象和关系数据库之间的关系。 它能够轻松处理(或执行)各种数据库操作,如插入,更新,删除等。
- @OneToOne(一对一),一个实体实例映射到另一个实体实例。
- @OneToMany(一对多),一个实体实例可以映射到另一个实体的任意数量实例。
- @ManyToOne(多对一),实体集合与相似实体单值关联。
- @ManyToMany(多对多),任意数量实体与其他实体集合关联。
EntityManager
EntityManager实体管理器。
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
EntityManager em = emf.createEntityManager();
em.persist(s1); //s1实体,插入
em.getTransaction().commit(); //提交
//StudentEntity s = em.find(StudentEntity.class, 1001); 根据主键搜索元素
//s.setS_age(30); 更新实体
//em.remove(s); 删除实体
em.close();
emf.close();
Persistence Unit
将实体类和其他数据库配置映射到persistence.xml文件中。
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="Student_details">
<class>com.yiibai.jpa.student.StudentEntity</class>
<properties>
<property name="javax.persistence.jdbc.driver"
value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url"
value="jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="123456" />
<property name="eclipselink.logging.level" value="SEVERE" />
<property name="eclipselink.ddl-generation"
value="create-or-extend-tables" />
</properties>
</persistence-unit>
java.util
集合(Collection)是一个将多个对象分组为一个单元的java框架。它用于存储,检索和操作汇总数据。
在JPA中,可以使用集合来持久化包装类和String的对象。JPA允许三种对象存储在映射集合中 - 基本类型,实体和嵌入式类型。
- List:基于索引插入和删除。
- Set:包含唯一元素。
- Map:唯一键与对象值相关联,基于键进行增删改查。
级联操作
枚举类型:javax.persistence.cascadeType
PERSIST ,DETACH ,REFRESH ,REMOVE ,MERGE
JPQL
面向对象查询语言,使用实体对象操作SQL查询。
支持静态查询和动态查询。
//动态查询
Query query = em.createQuery("select s.name from StudentEntity s");
//静态查询,创建在实体中定义的静态查询
@NameQuery(name="find me", query="select s from StudentEntity s")
Query query = em.createNameQuery("find me");
//Query接口方法
int executeUpdata 更新或删除
int getFirstResult 获取第一个结果检索位置
int getMaxResult 获取最大结果数检索值
java.util.List getResultList 返回结果列表
Query setFirstResult 设置检索起始位置
Query setMaxResults 设置检索最大结果数
//筛选
where id>2
where age in(22,23,45)
where name like `%%`
//聚合
select count(*)
select max(age)
select min(age)
//排序
group by age desc
CreteriaQuery API
构建实体和持久状态查询。
EntityManager em = emf.createEntityManager();
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery<StudentEntity> cq=cb.createQuery(StudentEntity.class);
Root<StudentEntity> stud=cq.from(StudentEntity.class);。
CriteriaQuery<StudentEntity> select = cq.select(stud);
Query q = em.createQuery(select);
List<StudentEntity> list = q.getResultList();
子句
- SELECT CriteriaQuery select()
- FROM AbstractQuery from()
- WHERE AbstractQuery where()
- ORDER BY CriteriaQuery orderBy()
- GROUP BY AbstractQuery groupBy()
- HAVING AbstractQuery having()
JPA继承
- @Inheritence - 此注解应用于根实体类以定义继承策略。 如果没有使用此注释定义策略类型,那么它遵循单表战略。
//单表策略:子类实例作为属性
@Inheriatance(stategy=Inheriatance.SINGLE_TABLE)
//连接策略:每个实体生成单独的表
@Inheriatance(stategy=Inheriatance.JOINED)
//按类表策略:仅子类生成单独的表
@Inheriatance(stategy=Inheriatance.TABLE_PER_CLASS)
- @MappedSuperclass - 此注释应用于由其子类继承的类。 映射的超类不包含任何单独的表。
- @DiscriminatorColumn - 鉴别器属性将一个实体与另一个实体区分开来。 因此,该注释用于提供鉴别器列的名称。 仅需要在根实体类上指定此注释。
- @DiscriminatorValue - 此注释用于指定表示特定实体的值的类型。 需要在子实体类中指定此注释。
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 阿里巴巴连接池Druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.5</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.3.7.Final</version>
</dependency>
JPA配置
- 数据库基本配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/jpatest?serverTimezone=Asia/Shanghai
spring.datasource.username=JPA_TEST(Zujuq4uSPX4ciVivGYDFlSYkxXGJjkcl)
spring.datasource.password=JPA_TEST(gNaKlGt35SGsU6HkpmJKVVKUldFFncZx)
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.database=MYSQL - 显示后台处理的SQL语句,方便在开发阶段调试
spring.jpa.show-sql=true - 自动检查实体和数据库表是否一致,如果不一致则会进行更新数据库表
spring.jpa.hibernate.ddl-auto=update - 自动将驼峰命名转换为小写和下划线 userId -> user_id
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl - 不加这句则默认为myisam引擎
spring.jpa.database-platform= org.hibernate.dialect.MySQL5InnoDBDialect
最后
以上就是甜美发卡为你收集整理的JPA注解、配置及接口的全部内容,希望文章能够帮你解决JPA注解、配置及接口所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复