JPQL
内连接和外连接的区别和适用场景
内连接时,返回查询结果集合中的仅是符合查询条件( WHERE
搜索条件或 HAVING
条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行
sql连接语句:
内连接:inner join
左外连接:left join
右外连接:right join
全外连接:mysql不支持
JPQL:join
不需要on
,条件是对象.属性
分页
查询总条数:Long count= (Long)querySingleResult()
JPQL语句运行时翻译为原生SQL
1.并不是所有的sql都有对应的JPA方法(JPQL)
2、JPA效率低:
* 不重要的地方,写JPA,JPQL
* 使用缓存(一级、二级)
* 需要重点优化的地方写原生sql
事务:
* 原子性:同一组事务,同时成功,同时失败
* 一致性:事务操作完成后,两边数据结果一致(能量守恒)
* 隔离性:一组事务执行时,不受另一组事务的影响
* 持久性:提交了事务,数据就保存到断电不丢失数据的设备中
事务并发的问题:
大问题:
丢失更新问题 --多个事务同时进行更新操作
脏读 – 一个事务读取到另一个事务提交更新前的数据
小问题:
不可重复 – 一个事务督导另一个事务update
更新前后的数据
幻读(虚读) – 一个事务读到另一个事务insert
插入前后的数据
悲观锁:只允许同时只有一个事务执行,效率低,安全性高
乐观锁:打标记,效率较高,安全性较低