Hibernate管理Session(二)

2023-05-16 13:43:47 浏览数 (3)

查询和更新操作

Session对象提供了丰富的方法来执行查询和更新操作。您可以使用createQuery方法执行HQL查询,使用createSQLQuery方法执行原生SQL查询,并使用createCriteria方法创建Criteria查询。例如:

代码语言:javascript复制
Session session = sessionFactory.openSession();

// HQL查询
Query query = session.createQuery("FROM Product WHERE price > :price");
query.setParameter("price", 100.0);
List<Product> products = query.list();

// 原生SQL查询
SQLQuery sqlQuery = session.createSQLQuery("SELECT * FROM products");
sqlQuery.addEntity(Product.class);
List<Product> products = sqlQuery.list();

// Criteria查询
Criteria criteria = session.createCriteria(Product.class);
criteria.add(Restrictions.gt("price", 100.0));
List<Product> products = criteria.list();

session.close();

对象状态管理

Session负责管理对象的状态,包括持久化、游离和临时状态。当您使用Session保存、更新或删除对象时,Hibernate会自动将对象的状态从临时状态转换为持久化状态,并在适当的时候将更改同步到数据库中。例如:

代码语言:javascript复制
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();

// 创建一个新的对象
Product product = new Product();
product.setName("Example Product");
product.setPrice(99.99);

// 将对象保存到数据库中
session.save(product);

// 修改对象的属性
product.setPrice(109.99);

// 更新对象到数据库
session.update(product);

// 删除对象
session.delete(product);

transaction.commit();
session.close();

缓存管理

Hibernate还提供了一级缓存(Session缓存)来提高性能。Session缓存保存了Session中加载的对象,以避免频繁的数据库查询。Hibernate会自动管理一级缓存,以确保数据的一致性和正确性。例如,当从数据库中检索一个对象时,Hibernate会首先检查Session缓存中是否存在该对象,如果存在,则直接从缓存中获取,而不是查询数据库。示例代码如下:

代码语言:javascript复制
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();

// 从数据库中加载一个对象
Product product = session.get(Product.class, 1L);
System.out.println(product.getName()); // 从缓存中获取

// 再次加载相同的对象
Product product2 = session.get(Product.class, 1L);
System.out.println(product2.getName()); // 从缓存中获取

transaction.commit();
session.close();

0 人点赞