一、HibernateUtils.class
public class HibernateUtils {
public static final Configuration cfg;
public static final SessionFactory sf;
static{
cfg = new Configuration().configure();
sf = cfg.buildSessionFactory();
}
public static Session openSession(){
return sf.openSession();
}
/*用了此方法,session不用关闭,getCurrentSession是线程实现*/
public static Session getCurrentSession(){
return sf.getCurrentSession();
}
}
二、增(save)、删(delete)、改(update)、查(get、load)、保存更新(saveOrUpdate)等操作。
固定形式:
Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); /*要执行的操作*/ tx.commit(); session.close();
例如:插入一条记录。
public void demo(){
/*session不是线程安全,不能设置它为全局对象*/
Session session = HibernateUtils.openSession();//获取Session对象
Transaction tx = session.beginTransaction();//开启事务
Customer customer = new Customer();
customer.setCust_name("小明");
Serializable id = session.save(customer);
tx.commit();
session.close();
}
三、hibernate 利用Query Criteria 实现简单查询、条件查询、分页查询
注:这里面所用查询的SQL是属于Hibernate面对象的查询语句,如要实现更为复杂的查询应使用SQLQuery
a. Query 使用Query对象,不需要写sql语句,但是要写hql语句
b. Criteria 使用这个对象查询操作不需要写查询语句,直接调用方法就可以实现
c. SQLQuery 查询使用SQLQuery时候,调用底层sql实现
注 :hql和sql语句的区别
-使用sql语句是操作数据库表和字段的
-使用hql语句是操作实体类和属性的
1、Query
public void demo(){
/*.getCurrentSession()方法要配置当前事务绑定session*/
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
/*hibernate 原生SQL语句查询
* from tableName 查询表中所有的数据 简单查询
*
* from Customer where cust_name like ? 按条件查询
*
* 分页查询 下面的两个方法相当于mysql中的limit指令
* query.setFirstResult(0);
* query.setMaxResults(2);
* */
/*String hql = "from Customer where cust_name like ?";
Query query = session.createQuery(hql);
query.setParameter(0,"小%");*/
String hql = "from Customer";
Query query = session.createQuery(hql);
/*分页查询*/
query.setFirstResult(0);
query.setMaxResults(2);
List<Customer> list = query.list();
for(Customer customer:list){
System.out.println(customer);
}
tx.commit();
}
2、Criteria
public void demo(){
/*.getCurrentSession()方法要配置当前事务绑定session*/
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
/*
* 简单查询
Criteria criteria = session.createCriteria(Customer.class);*/
/*条件查询*/
/*Criteria criteria = session.createCriteria(Customer.class);
criteria.add(Restrictions.like("cust_name","王%"));*/
/*分页查询*/
Criteria criteria = session.createCriteria(Customer.class);
criteria.setFirstResult(0);
criteria.setMaxResults(2);
List<Customer> list = criteria.list();
for(Customer customer:list){
System.out.println(customer);
}
tx.commit();
}