1.JPQL
jpql:就是jpa提供的一种查询语言,类似sql。
最基本的JPQL的格式
只能写java的类名和属性名
SELECT o[o.property,o.property*] FROM Entity o
[WHERE conditions]
[GROUP BY conditions]
[HAVING conditions]
[ORDER BY o.property[ASC|DESC]]
JPQL本质是JPA通过antlr-2.7.7.jar翻译成sql并且封装执行的。
jpql和sql的区别:
(1)jpql操作对象和对象里面的属性 sql操作 表 和表里面的列 区分大小写
(2)在jpql里面 不能出现 * ,不能出现表名
(3) jpql和sql 他们关键字是相同 ,关键字不区分大小写
JPQL书写规则:
JPA的查询语言,类似于sql
1.里面不能出现表名,列名,只能出现java的类名,属性名,区分大小写
2.出现的sql关键字是一样的意思,不区分大小写
3.不能写select * 要写select 别名
2.集合的操作
sql里面没有size(最终换成sql的count查询)
2.1JOIN:
JPA中的JOIN和LEFT JOIN(使用SQL/JPQL对比)
sql:select * 表1 join 表2 on 条件
jpql:
1.不写on子句
2.模型 模型的别名 join 写前面模型别名.出来的对象属性
Employee e join e.department d
2.2 聚集(组)函数/GROUP/HAVING
count 求记录数 max 求最大值 sum 求和 min 求最小 avg 求平均
3.SQL的支持
createNativeQuery
4.事务并发
事务的四个特性:
1.原子性(atomic),事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行
2.一致性(consistent),事务在完成时,必须使所有的数据都保持一致状态。
3.隔离性(insulation),由事务并发所作的修改必须与任何其它并发事务所作的修改隔离。
4.持久性(Duration),事务完成之后,它对于系统的影响是永久性的。
5.数据库隔离机制
四种
READ UNCOMMITTED(读未提交) 幻想读(虚读)、不可重复读和脏读都允许。
READ COMMITTED 允许幻想读,不可重复读,不允许脏读
REPEATABLE READ 允许幻想读,不允许 不可重复读和脏读
SERIALIZABLE 幻想读、不可重复读和脏读都不允许–性能肯定会变低
6.JPA的使用规则
经验:
1.使用双向一对多关联,不使用单向一对多–效率高一点
2.灵活使用单向多对一关联 --多方来维护外键效率高一点
3.不用一对一,用多对一取代(不要使用共享主键一对一,使用唯一外键一对一)
4.配置对象二级缓存(配置 Cacheable),查询缓存(jpql查询),
没有查询条件才使用查询缓存(如果有条件命中是很低)
查询缓存:
同一个EntityManagerFactory 不同entityManager 发送jpql相同和条件值相同
5.组合关系集合使用list(顺序,重复)–第二个项目 单据模块,多对多集合使用set
6.设计表的时候,表字段要少,表关联不要怕多,有二级缓存撑腰,设计表尽量达到第三范式(外键)
数据库范式:数据库规则
1NF:设计的时候,尽量保证 表里面列不能存放多个值,列最小单元,不能分割 --体系列原子性
2NF:表里面每一行数据都应该有一个唯一能够区分的值,建议你都创建主键
3NF:表里面不应该存放另外一个表非主键的信息 --建议你一个外键