文章目录
(一)事务(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中的查询简化了部分语句,可以直接使用封装好的方法
Session session
= HibernateUtils
.getSession();
Transaction tr
= session
.beginTransaction();
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),结束进程