上一篇中用最原始的方法来获取Session,这一篇用工具类来获取Session对象。
数据库配置:主键自增长,不是自增长的情况下,情况可能会不一样,一般都是自增长。
工具类
package com.utils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* 获取Session工具类
*/
public class HibernateUtils {
private static SessionFactory sessionFactory = null;
//只需要加载一次
static {
Configuration cfg = new Configuration();
cfg.configure();
sessionFactory = cfg.buildSessionFactory();
}
//获得session====>获得全新session
public static Session openSession(){
Session session = sessionFactory.openSession();
return session;
}
}
保存对象
/**
* 保存对象
*/
@Test
public void run2(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
User user = new User();
user.setName("jack");
user.setPwd("123");
user.setBirthday(new Date());
session.save(user);
tx.commit();
session.close();
}
更新对象
/**
* 更新对象
*/
@Test
public void run3(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
User user = new User();
//注意:给User的id进行赋值,才可以进行更新
user.setId(1L);
user.setName("小佳");
user.setPwd("666");
user.setBirthday(new Date());
session.update(user);
tx.commit();
session.close();
}
保存或更新对象
/**
* 保存或更新对象
*/
@Test
public void run4(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
User user = new User();
//注意:给User的id进行赋值,才可以进行更新,如果没有赋值,则进行添加
// user.setId(2L);
user.setName("小袁");
user.setPwd("111");
user.setBirthday(new Date());
session.saveOrUpdate(user);
tx.commit();
session.close();
}
删除对象
/**
* 删除对象
* 注意:这个测试需要将前面映射配置中的name的 not-null="true"删除
*/
@Test
public void run5(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
User user = new User();
//注意:底层是根据id值进行删除操作
user.setId(1L);
session.delete(user);
tx.commit();
session.close();
}
获取对象
/**
* 获取对象
* get(Class clz, Serialize id):获取对象
* load(Class clz, Serialize id):获取对象
*/
@Test
public void run6(){
Session session = HibernateUtils.openSession();
User user = session.get(User.class, 2L);
System.out.println(user);
session.close();
}
@Test
public void run7(){
Session session = HibernateUtils.openSession();
User user = session.load(User.class, 2L);
System.out.println(user);
session.close();
}
总结(数据库 id自增长的情况下)
保存对象
因为我在Hibernate核心配置文件中配置了主键自动增长所以在测试类中给不给id赋值都没有关系都可以进行保存。
更新对象
必须要给id进行赋值,才可以进行更新,因为底层就是根据id查找到相应数据之后进行更新,所以需要有id。
保存或更新对象
当没有设置id值的时候是保存一个对象,前提是id自动增长。当设置id的时候就是更新操作了,此时设置的id值必须在数据库中有对应的id,否则运行会报错。
删除对象
当对象中只赋值id进行删除的时候,需要在配置中排除一些非空的设置。
获取对象
有两种方式来获取对象,分别是get方法和load方法。这两种方法都可以进行查询,区别后面会写到。