jpa_day04学习总结

一.JPQL的认识与使用

把18个题都写

  • JPA的查询语句(面向对象的)
  • 关键字和SQL是一样的
  • 使用的类和属性(区分大小写)
  • 如果获取的是多个值 List<Object[]>
  • 关连的法则(1.不写on 2.前面对象的别名.属性)
  • 模糊查询JPQL中写? , 设置值 %name%

2 JPA的分页

支持所有数据库(根据方言)

  • 设置从第几条数据开始 query.setFirstResult(0)
  • 设置每页条数 query.setMaxResults(5)
EntityManager entityManager = JpaUtil.getEntityManager();
    //query:查询对象
    Query query = entityManager.createQuery("from Employee");
    //query.setFirstResult(5);
    //query.setMaxResults(5);
    query.setFirstResult(15).setMaxResults(5);
    List<Employee> list = query.getResultList();

    list.forEach(e -> System.out.println(e));
    entityManager.close();

拿出到总条数

  • 如果确定有且只有一个数据,使用 getSingleResult
  • 类型是Long(hibernate3.X是Integer)
 EntityManager entityManager = JpaUtil.getEntityManager();
//query:查询对象
// 这条SQL百之百确认只会查到一个数据
Query query = entityManager.createQuery("select count(o) from Employee o");

//Single:单个 这里拿到的是Long类型
//  hibernate3.X的版本都使用的Integer
Long count = (Long)query.getSingleResult();
System.out.println(count);
entityManager.close();

3 原生SQL的操作

  • 执行SQL,但是需要手动封装对象
  • entityManager.createNativeQuery(sql)
 String sql = "select * from employee";
EntityManager entityManager = JpaUtil.getEntityManager();
//query:查询对象 Native:原生
Query query = entityManager.createNativeQuery(sql);

List<Object[]> list = query.getResultList();
list.forEach(objs -> {
    System.out.println(Arrays.asList(objs));
});
entityManager.close();
  • 执行SQL,但是需要自动封装对象
  • entityManager.createNativeQuery(sql,Employee.class);
  String sql = "select * from employee";
    EntityManager entityManager = JpaUtil.getEntityManager();
    //query:查询对象 Native:原生
    Query query = entityManager.createNativeQuery(sql,Employee.class);

    List<Employee> list = query.getResultList();
    list.forEach(e -> System.out.println(e));

    entityManager.close(); 

4 事务隔离与锁

4.1 事务的四大特性(ACID)

  • 原子性(atomic),事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全- 都不执行
  • 一致性(consistent),事务在完成时,必须使所有的数据都保持一致状态。
  • 隔离性(insulation),由事务并发所作的修改必须与任何其它并发事务所作的修改隔离。
  • 持久性(Duration),事务完成之后,它对于系统的影响是永久性的。

4.2 事务并发会产生哪些问题

  • 脏读,虚读,不可重复读,第一类丢失更新,第二类丢失更新
  • 脏读,虚读,不可重复读是有事务隔离级别解决(数据库自带)
  • 两个丢失更新需要我们自己加锁(乐观(版本号:version),悲观)

4.3 事务隔离级别

  • MySql默认隔离级别为:Repeatable Read(可能会出现虚读)
  • Oracle 支持READ COMMITTED 和 SERIALIZABLE这两种事务隔离级别 默认隔离级别为READ COMMITTED
  • READ UNCOMMITTED 幻想读、不可重复读和脏读都允许。
  • READ COMMITTED 允许幻想读,不a可重复读,不允许脏读
  • REPEATABLE READ 允许幻想读,不允许不可重复读和脏读
  • SERIALIZABLE 幻想读、不可重复读和脏读都不允许
    在这里插入图片描述

4.4 怎么完成乐观锁

在这里插入图片描述

JPA解决乐观锁

 //搞定乐观锁
@Version
private Integer version;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值