1 jpql
1.1 jpql和sql有区别
(1)jpql操作对象和对象里面的属性 sql操作 表 和表里面的列 区分大小写
(2)在jpql里面 不能出现 * ,不能出现表名
(3) jpql和sql 他们关键字是相同 ,关键字不区分大小写
1.2 jpql的语法
jpql一般查询
1
select o.name,o from 类 o where o.属性名
1.3 jpql里面join
jpql:
select o from Employee o join o.department d
1.4jpql的数据计算
jpql里面不能使用没有* 所以没有count(*)用的是size(最终换成sql的count查询)
select o from Department o where o.employees.size>0
.
1.5jpql的分页查询
String jpql = “select o from Employee o”;
Query query = entityManager.createQuery(jpql);
// 从那里开始取数据,索引从0开始
int firstResult = (currentPage - 1) * pageSize;
// 取多少条
int maxResults = pageSize;
query.setFirstResult(firstResult).setMaxResults(maxResults);
2. 事务4个特性ACID回顾
原子性(atomic),事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行
一致性(consistent),事务在完成时,必须使所有的数据都保持一致状态。
隔离性(insulation),由事务并发所作的修改必须与任何其它并发事务所作的修改隔离。
持久性(Duration),事务完成之后,它对于系统的影响是永久性的。
2.1事务并发
通常为了获得更好的运行性能,各种数据库都允许多个事务同时运行,这就是事务并发。
当并发的事务访问或修改数据库中相同的数据(同一行同一列)时,通常需要采取必要的隔离机制。隔离机制的实现必须使用锁
JPA只能处理第一、二类丢失更新,其他3种必须由数据库自己处理
如果使用了悲观锁(加了一个行锁),如果事务没有被释放,就会造成其他事务处于等待
不用
乐观锁的配置
@Version
private Integer version
3.如何优化JPA
1.使用双向一对多关联,不使用单向一对多–效率高一点
2.灵活使用单向多对一关联 --多方来维护效率高一点
3.不用一对一,用多对一取代(不要使用共享主键一对一,使用唯一外键一对一)
4.配置对象二级缓存(配置 Cacheable),查询缓存(jpql查询),
没有查询条件才使用查询缓存(如果有条件命中是很低)
5.组合关系集合使用list(顺序,重复)–第二个项目 单据模块,多对多集合使用set
6.表字段要少,表关联不要怕多,有二级缓存撑腰,设计表尽量达到第三范式(外键)