jpa

1 .JPA的认识

1.1 什么是JPA–理解

JPA是Java Persistence API的简称,中文名 Java持久层API,它和学的jdbc或者spring-jdbc同一个层次

持久层:dao层 操作数据库那层

1.2 JPA再次理解–理解

(1)JPA它做持久层API

(2)它是对象关系映射(ORM) 规范

ORM:对象 关系 映射

[外链图片转存失败(img-fFESrl3t-1568819779235)(C:\Users\JAVA\AppData\Roaming\Typora\typora-user-images\1568772969907.png)]

(3) JPA的hibernate区别

JPA它是ORM的规范,hibernate是其中一个实现框架

(4)为什么要JPA,不用jdbc? --比较jpa和jdbc优缺点 – 面试题

​ jdbc:

缺点:

​ 代码重复性比较高

​ 封装数据 比较麻烦

​ 移植数据库比较麻烦

​ 没有缓存—提高的访问速度

​ 面向sql。不是面向对象操作

好处:

​ 如果是sql高手,使用jdbc相当爽 操作数据库最底层技术,其他的框架技术都是在jdbc上面进行封装

​ 在实现缓存 就需要在内存里面存储数据 --? Map(key,value)

​ JPA:

​ 好处:

​ 重复性代码不多 完成crud 只需要调用方法就可以搞定 比如保存 perisit(Employee employee)

​ merge

​ 移植数据很方便,到时候只需要配置一些方言就可以搞定

​ 提供的世界级缓存支持(一级缓存 二级缓存)

​ 不用写sql ,会自动生成

​ 面向对象操作,操作对象就相当于操作数据库,但是jpa也是支持sql

​ 缺点:

​ 有时候,我们不能干预sql的生成,如果你对sql要求比较高,不适合使用jpa,而已数据量太大,比如表里面有上亿条数据,也不是我们jpa。有些性能无法控制 select * from ,怎么办?用mybatis

​ JPA 一些中小型的项目

​ SSM(springmvc spring mybatis)

1.3 jpa小结

jpa 是什么:java perisitence api java持久层的api

jpa和hibernate关系:jpa是ORM对象关系映射的规范,hibernate是其中一个实现

jpa和jdbc的区别:

2 使用JPA

2.1JPA基本使用(掌握)

(1)下载

(2)导入包–了解pom.xml

[外链图片转存失败(img-AqiDHnz1-1568819779277)(C:\Users\JAVA\AppData\Roaming\Typora\typora-user-images\1568776897291.png)]

(3)配置文件

persistence.xml配置文件

配置连接数据库配置

(4)测试

得到EntityManagerFactory

2.2 JPA的完成CRUD(掌握)

新增:persist --事务

修改:merge --事务

删除:remove --事务

查询:find

查询所有:使用jpql语句

工具类抽取

2.3 JPA的自动创建表策略(理解)

数据库的建表策略

create: 创建策略 表示每次操作的时候,都要先删除表,在创建表 -- 测试上面
create-drop:创建删除策略 每次在操作的时候,先删除表 在创建表 在删除表 --没有用 比较临时表上面
update : 更新策略 --测试最多的 没有会跟我在数据库创建出来 --掌握
validate :  验证策略 -- 验证数据库配置和实体对象配置是否一致,如果不一致就会报错
			比如数据库没有表,有对应的实体对象 报错
			数据库表有多余字段 ,对应的实体对象没有字段 也不会错误
			数据库少字段 username,实体对象有username ,会报错 --假如数据库已经把所有表创建好,我们自己在代码在创建好
			


<property name="hibernate.hbm2ddl.auto" value="update" />

2.4 JPA核心的类

Persistence:通过它我们可以得到EntityManagerFactory

 Persistence.createEntityManagerFactory("cn.itsource.jpa")

EntityManagerFactory:实体管理工厂对象

作用:它是重量级的对象,因为它和数据库打交道,我们不要频繁的创建和销毁,如果我们频繁创建该对象或者销毁该对象,很损耗系统。尽量满足一个原则,1:1:1

1的应用程序对应1对应数据库 对应1个entityManagerFactory,尽量可以达到共享的效果,而且要注意线程安全问题(ThreadLocal)

(1)包含数据库的连接池在这里

(2)包含二级缓存–(用不到 明天用)

(3)包含预定义的jpql或者sql (PreparedStatement)–(jpql在用)

(4)管理实体的之间关系 Employee(员工) Department(部门) 多对一(第三天)

EntityManager:(经常使用对象) 实体管理对象

(1)可以完成CRUD

这个对象 你可以频繁创建和销毁,不会销毁太多性能 注意,如果多个操作 都在使用在对象,也会线程安全问题

比如转账 强哥 --> $10000 -->hanghang -->entityManager

​ 健健 取钱 -->entityManager

–事务并发带来的问题(后面讲)

(2)维护了一个一级缓存

缓存(内存):容器,装数据 操作之前可以把数据,先从数据库读取出来,放入到缓存里面,下次来使用的,不需要查询数据库,直接从缓存里面取数据

怎么使用一级缓存?

缓存命中条件:同一个entityManagerFactory 同一个entityManager 同一个OID(实体对象主键id)

EntityTransaction(了解)

实体事务对象:

事务:一组操作 同生共死

EntityTransaction transaction = entityManager.getTransaction();

现在事务 都是同一个库下面事务

不同库的事务 强哥 中国银行 女朋友 叶康康 建设银行 --大的银联 --分布式事务

2.5 细节的配置

自己下来练习

@Entity
@Table(name="t_person")
public class Person {
    @Id
    @GeneratedValue
    private Long id; //要求:主键,使用数据库的自动生成策略

    @Column(name="username",nullable=false,unique=true)
    private String name;  //要求:varchar(20),数据库名称为username,不能为空,唯一
    private String password;
    @Column(insertable=false,columnDefinition="int(20) default 25")
    private Integer age = 25; //要求:默认值是25,在插入数据时不允许覆盖(添加数据时不操作该字段)
    private Boolean sex;// 数据库没有布尔类型,bit对象
    @Column(columnDefinition = "decimal(19,2)")
    private BigDecimal salary;// 19,2
    @Temporal(TemporalType.TIMESTAMP)
    @Column(updatable = false)
    private Date createTime;//包含年月日时分秒,不允许修改
    @Temporal(TemporalType.DATE)
    private Date birthday;//包含年月日
    @Temporal(TemporalType.TIME)
    private Date time;//包含时分秒
    @Lob
    private String text;//这是一个大文本

    @Transient//临时字段
    private String temp;//这一个字段不要同步到数据库
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值