一.事务代码规范
Session session=null;
Transaction transaction=null;
try {
session=HibernateUtils.getSession();
transaction=session.beginTransaction();
User user = new User();
user.setUserName("li");
user.setPassword("123");
session.save(user);
transaction.commit();
}
catch (Exception e){
transaction.rollback();
}
finally {
session.close();
}
二.session与本地线程的绑定
保证session为单线程对象,获取本地线程绑定的session不需要手动关闭。
在Hibernate配置文件中添加:
<property name="hibernate.current_session_context_class">thread</property>
通过如下获取session对象:
package com.lgh.utils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* Created by LGH on 2018/3/9.
*/
public class HibernateUtils {
private static final Configuration cfg;
private static final SessionFactory sessionFactory;
static {
cfg=new Configuration().configure();
sessionFactory=cfg.buildSessionFactory();
}
public static Session getCurrentSession(){
return sessionFactory.getCurrentSession();
}
}
三.Hibernate的Api使用
Query对象
1.使用Query对象不需要使用sql语句,但是需要使用Hql语句;
2.使用Hql操作实体类,和实体类的属性。
示例:
Session session=null;
Transaction transaction=null;
try {
session=HibernateUtils.getCurrentSession();
transaction=session.beginTransaction();
Query query = session.createQuery("from User");
List<User> userList = query.list();
for (User u:userList) {
System.out.println(u);
}
transaction.commit();
}
catch (Exception e){
transaction.rollback();
}
Criteria对象
使用该对象做查询操作,不需要写语句,直接用方法就可以实现。
Session session=null;
Transaction transaction=null;
try {
session=HibernateUtils.getCurrentSession();
transaction=session.beginTransaction();
Criteria criteria = session.createCriteria(User.class);
List<User> userList = criteria.list();
for (User u:userList) {
System.out.println(u);
}
transaction.commit();
}
catch (Exception e){
transaction.rollback();
}
SQLQuery对象
用SQLQuery对象调用底层sql语句实现
Session session=null;
Transaction transaction=null;
try {
session=HibernateUtils.getCurrentSession();
transaction=session.beginTransaction();
SQLQuery sqlQuery = session.createSQLQuery("SELECT * FROM TB_USER");
sqlQuery.addEntity(User.class);
List<User> userList = sqlQuery.list();
for (User u:userList) {
System.out.println(u);
}
transaction.commit();
}
catch (Exception e){
transaction.rollback();
}