JPA、hirbnate

一、

1)JPA是一套接口规范:ORM映射元数据:JPA支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;

如:@Entity、@Table、@Column、@Transient等注解。

2)JPA 的API:用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。

如:entityManager.merge(T t);

3)JPQL查询语言:通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。

如:from Student s where s.name = ?

二、

JPA仅仅是一种规范,也就是说JPA仅仅定义了一些接口,而接口是需要实现才能工作的。所以底层需要某种实现,而Hibernate就是实现了JPA接口的ORM框架。JPA是一套ORM规范,Hibernate实现了JPA规范

三、

spirng data jpa是spring提供的一套简化JPA开发的框架,按照约定好的【方法命名规则】写dao层接口,就可以在不写接口实现的情况下,实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能,如分页、排序、复杂查询等等。

Spring Data JPA 可以理解为 JPA 规范的再次封装抽象,底层还是使用了 Hibernate 的 JPA 技术实现。

四、

介绍一下JPA的注解

1)类注解

  1.@Entity注解,指定该实体类是一个基于JPA规范的实体类

  2.@Table(name="tb_student") 注解,指定当前实体类关联的表

  3.@Cache(usafge = CatcheConcurrencyStraregy.READ_WRITE,region='POJO') 表示缓存注解,缓存类型

  4.@NameQueries({@NameQuery(name="Student.listByName",query=''from Student s where s.name = ?')})
  这个注解是表示预定义查询;DAO层可以根据这个name查询,返回的学生集合。
  使用:在继承BaseDAO的基础上,(findByNameQuery是baseDAO中写好的方法)进行查询
  public List<Student> listByName(String name){
	return findByNameQuery("Student.listByName",name);
}

先写到这里;
方法注解

1.@Id注解:声明属性为一个OID属性
2.@GeneratedValue(strategy=GenerationType.IDENTITY)注解,指定主键生成策略
3.@Column(name="stu_id")注解,设置属性与数据库字段的关系,如果属性名和表的字段名相同,可以不设置
4.

补充

//同一个应用中,应该保证只有一个实例工厂。

public static EntityManagerFactory emf = createEntityManagerFactory();
//1.获得实体管理工厂
private static EntityManagerFactory createEntityManagerFactory(){
	EntityManagerFactory emf = Persistence.createEntityManagerFactory("mysql-jpa");
	return emf;
}

EntityManager entityManager = JPAUtils.getEntityManger();
//下除了查询都是要开启事物的
EntityTransaction transaction = manager.getTransaction();
transaction.begin();
还有提交transaction.commit();还有关闭manager等。
entityManager.remove(s);删除
entityManager.merge(s);更新
entityManager.find(Student.class, 1L);查询
manager.persist(s);保存

 getReference()和find()方法的区别:

* getReference基于懒加载机制,即需要使用对象的时候,才执行查询。
@GenerateValue声明属性(Object ID)的主键生成策略

@SequenceGenerate使用SEQUENCE策略时,用于设置策略的参数

@TableGenerate使用TABLE主键策略时,用于设置策略的参数

@JoinTable关联查询时,表与表是多对多的关系时,指定多对多关联表中间表的参数。

@JoinColumn关联查询时,表与表是一对一、一对多、多对一以及多对多的关系时,声明表关联的外键字段作为连接表的条件。必须配合关联表的注解一起使用 <key>

@OneToMany关联表注解,表示对应的实体和本类是一对多的关系

@ManyToOne关联表注解,表示对应的实体和本类是多对一的关系

@ManyToMany关联表注解,表示对应的实体和本类是多对多的关系

@OneToOne关联表注解,表示对应的实体和本类是一对一的关系
JPA常用API说明

API说明

Persistence用于读取配置文件,获得实体管理工厂

EntityManagerFactory用于管理数据库的连接,获得操作对象实体管理类

EntityManager实体管理类,用于操作数据库表,操作对象

EntityTransaction用于管理事务。开始,提交,回滚

TypeQuery用于操作JPQL的查询的

Query用于操作JPQL的查询接口,执行没有返回数据的JPQL(增删改)

CriteriaBuilder用户使用标准查询接口 Criteria查询接口

一对多实例,多对一参考:https://www.jianshu.com/p/6d38a6c561f8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值