query接口简单了解下就可以,
criteria接口很适合来做条件查询语句
绑定本地session来确保session一致性处理事务问题
处于持久态的对象可以通过hibernate中session对象一级缓存的快照技术来自动更新数据库
详见代码:
/*
* 持久态对象的演示
*/
@org.junit.Test
public void updateTest() {
Session session = HibernateUtils.getSession();
Transaction tr = session.beginTransaction();
//先查询出给客户
Customer c = session.get(Customer.class, 109L);
c.setCust_name("updated_alex1");
//处在持久态的对象可通过快照功能自动更新,不用执行session的update
// session.update(c);
tr.commit();
session.close();
}
* criteria接口演示
*/
@Test
public void criteriaTest() {
Session session = HibernateUtils.getSession();
Transaction tr = session.beginTransaction();
//获得实例
Criteria criteria = session.createCriteria(Customer.class);
//查询所有
List<Customer> list = criteria.list();
for (Customer customer : list) {
System.out.println(customer);
}
System.out.println("list查询完成。");
/*
*条件查询调用criteria的add方法添加Restrictions工具类的条件即可,其方法都是静态的
*/
criteria.add(Restrictions.gt("cust_id", 104L));
criteria.add(Restrictions.like("cust_name", "%a%"));
//调用list方法
List<Customer> list2 = criteria.list();
for (Customer customer : list2) {
System.out.println(customer);
}
tr.commit();
session.close();
}
/*
* 绑定本地session测试,处理事务
*/
@org.junit.Test
public void tansactionTest() {
//获得同线程中的同一个session
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
try {
Customer c1 = session.get(Customer.class, 100L);
Customer c2 = session.get(Customer.class, 101L);
c1.setCust_level("22");
//模拟故障,开启事务时不会更新到服务器
// int a = 1/0;
c2.setCust_level("33");
tr.commit();
} catch (Exception e) {
e.printStackTrace();
tr.rollback();
}finally {
session.close();
}
}
/*
* 测试hibernate中session对象的一级缓存
* 在一个session执行insert和查询两个操作,最后可以看到没有输出查询sql语句
*/
@org.junit.Test
public void cacheTest() {
Session session = HibernateUtils.getSession();
Transaction tr = session.beginTransaction();
//先创建一个用户
Customer c = new Customer();
c.setCust_name("测试一级缓存");
//获得返回的id
Serializable id = session.save(c);
//再通过ID查询刚创建的用户
session.get(Customer.class, id);
tr.commit();
session.close();
}
/*
* query 查询接口测试
*/
@org.junit.Test
public void queryTest() {
Session session = HibernateUtils.getSession();
Transaction tr = session.beginTransaction();
//query对象需要from 后需要填入类名
Query query = session.createQuery("from Customer");
//查询所有记录
List<Customer> list = query.list();
for (Customer customer : list) {
System.out.println(customer);
}
tr.commit();
session.close();
}