一、
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
384

被折叠的 条评论
为什么被折叠?



