Hibernate(3):事务&查询

xiaoxiao2025-09-18  36

文章目录

(一)事务(1)悲观锁(2)乐观锁(3)绑定当前线程的session (二)查询(1)HQL(2)Criteria (三)1099占用解决方案

既然Hibernate要和数据库交互,那么事务是必须要掌握的部分

(一)事务

为什么要锁:在并发访问的时候,不使用锁会导致部分数据并不能保存到数据库

(1)悲观锁

悲观锁:数据库提供 被一个事务操作的一条数据会被加锁,操作完成之后释放锁缺点:效率低

(2)乐观锁

乐观锁 在Javabean中添加一个字段version以及对应方法在xx.hbm.xml中配置version private int version; //版本号 public void setVersion(int version){ this.version = version; } public int getVersion(){ return this.version; } <version name="version"/>

(3)绑定当前线程的session

目的:为了能在业务层开启事务,而不是在持久层首先在hibernate.cfg.xml中配置 <property name="hibernate.current_session_context_class">thread</property> 没有框架的情况:使用ThreadLocal保存Transaction对象,保证同一个线程使用的是同一个事务使用Hibernate框架:SessionFactory的getCurrentSession()获取当前线程下的session

(二)查询

相比于使用原生的JDBC的DAO层的查询时构造的工具类,Hibernate中的查询简化了部分语句,可以直接使用封装好的方法 //一个查询Demo Session session = HibernateUtils.getSession(); Transaction tr = session.beginTransaction(); //使用JPA-style的查询语句 Query query = session.createQuery("from User where age > ?0"); query.setInteger(0,100); List<User> list = query.list(); for(User user : list){ System.out.println(user.getName()); } tr.commit(); session.close();

(1)HQL

HQL(Hibernate Query Language) Query query = session.createQuery("from User where age > ?0");

(2)Criteria

Hibernate5.2版本之后Criteria接口已经过时,懒得填坑了…

(三)1099占用解决方案

最近在使用IDEA跑项目的时候经常遇到的报错Error running 'Unnamed': Address localhost:1099 is already in use解决方案 cmd中netstat -ano|findstr 1099,找到TCP 1099端口占用的进程ID(PID) 任务管理器中找到PID对应的进程(一般是java.exe),结束进程
转载请注明原文地址: https://www.6miu.com/read-5036547.html

最新回复(0)