本文共 1626 字,大约阅读时间需要 5 分钟。
一:JPQL
JPA的查询语句JPQL与sql语句很像,但是JPQL是面向对象的JPQL 是区分大小写的,不要写 * 要用别名代替Sql 不区分大小写Listlist = query.getResultList(); // 当查询结果是一个对象的时候,我们指定用该对象就收查询结果List
二:JPQL常用格式
1)外部传入,后台接收格式 jpql=“select o from Employee o where o.department.city in (?1,?2)”;Query query = entityManager.createQuery(jpql);
query.setParameter(1, “成都”).setParameter(2, “广州”); // 默认是从1开始的,支持自定义数字
2)支持根据指定的参数【排序】
String jpql = “select o from Employee o order by desc”; // 默认升序,这里是指定降序排列
3)使用【相似查询】
String jpql=“select o from Employee o where like ?1 or like ?2”;Query query = entityManager.createQuery(jpql);
query.setParameter(1, “%er%”).setParameter(2,"%en%");
4)使用distinct【消除笛卡尔积】
String jpql="select distinct , from Employee o ";5)所有集合都有一个Size属性【计数】
String jpql=“select d from Department d where d.employees.size>0”;6)将集合转换成数组
list.forEach(e-> System.out.println(Arrays.asList(e)));7)聚合函数使用
avg (e.salary) 求平均值 max (e.salary) 求最大值 8)JOIN LEFT JOIN 1.不需要手动消除笛卡尔积 2.关联的是属性 对象的别名.属性9)分组
String jpql=“select ,avg (e.salary),max (e.salary) from Employee e group by e.department” 三:分页 假分页: 一条sql看到所有的数据 每次用到缓存中去找 优点:第N次速度非常快 缺点:数据比较多时,占用内存很多,第一次查询慢 第几条到第几条 Query.getResultList.subList(?,?)真分页:
每次查询到数据库中去找
SetFirstResult() 第几条开始
SetMaxResult() 每次查询多少条 GetSingleResult() 获得单个值 四:在jpql中使用sql原生查询 CreateNativeQuery(sql语句,指定查询类型) 五:事务并发,几个事务同时运行 原子性:最小单位,不可分割 一致性:开始到结束,数据是一致的 持久性:当我们操作完成,数据永久保存 隔离性:由事务并发所作修改必须与任何其它并发事务所作的隔离第一类丢失更新、第二类丢失更新: 使用乐观锁解决 悲观锁:安全性能最高,但是性能最低脏读虚读不可重复乐观锁:解决办法是加一个 版本号 在版本号上加注解:@version 运行时,版本号自动加1后,就锁定版本,不再允许该类的字段被修改了,从而达到锁定的目的
转载地址:http://gexxi.baihongyu.com/