Hibernate的主要对象
Configuration
作用:每个HIbernate配置文件对应一个Configuration对象,用于定位映射文件与核心配置位置。
- 使用hibernate.properties作为配置文件,需要添加映射文件。
Configuration cfg = new Configuration();
//调用addResource()方法,添加映射文件
cfg.addResource("Item.hbm.xml")
- 使用hibernate.cfg.xml作为配置文件,由于在配置文件中已经配置过映射文件,所以不需要再次添加映射文件
Configuration cfg = new Configuration().configure();
SessionFactory:session工厂
初始化Hibernate,作为提取hibernate的工具类,负责创建Session对象。由于SessionFactory是线程安全的,所以可以定义为全局,初始化一次就足够了。当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
//加载核心配置文件
Configuration configuration=new Configuration().configure();
//创建sessionfactory类似于JDBC的连接池
SessionFactory sessionFactory=configuration.buildSessionFactory();
Session
Session是与数据库交互的桥梁,类似于我们之前接触过的connection作为连接对象的作用,但是它是非线程安全的,即一个Session实例同时只可由一个线程使用,同一个Session实例的多线程并发调用将导致难以预知的错误,所以只能作为局部变量。
它提供了众多持久化方法,如save、update、delete等,相应的完成对象的增加、删除、修改、查找等操作。
//加载核心配置文件
Configuration configuration=new Configuration().configure();
//创建sessionfactory类似于JDBC的连接池
SessionFactory sessionFactory=configuration.buildSessionFactory();
//获取session对象 相当于Connection
Session session=sessionFactory.openSession();
主要API
-
save 保存
-
load/get 查询
特别注意get与load的区别
get: 立即加载,马上发送SQL语句;不存在对象时返回null
load: 延迟加载,使用对象时才发送SQL语句;不存在对象时,抛异常返回 ObjectNotFooundException -
update 修改
a. 创建对象后修改
b. 查询后修改 -
delete 删除
a. 创建对象后删除
b. 查询后删除 -
saveOrUpdate 保存或者更新(不常用)
-
查询所有
a. 接受HQLQuery query=session.createQuery("from Customer"); List<Customer> list=query.list();
b. 接受SQL
SQLQuery query=session.createSQLQuery("selsct * from cst_customer"); List<Object[]> list=query.list();
简单实例
@Test
//保存
public void demo1(){
Session session=HibernateUtils.openSession();
Transaction tx=session.beginTransaction();
Customer customer=new Customer();
customer.setCust_name("小西");
Serializable id = session.save(customer);
System.out.println(id);
tx.commit();
session.close();
}
@Test
//查询
public void demo2(){
Session session=HibernateUtils.openSession();
Transaction tx=session.beginTransaction();
//get查询
//Customer customer= session.get(Customer.class, 1l);
//System.out.print(customer);
//load查询
Customer customer= session.load(Customer.class, 1l);
System.out.print(customer);
tx.commit();
session.close();
}
@Test
//修改
public void demo3(){
Session session=HibernateUtils.openSession();
Transaction tx=session.beginTransaction();
//创建对象后修改
/*
Customer customer=new Customer();
customer.setCust_id(1l);
customer.setCust_name("小明");
session.update(customer);
*/
//直接查询后修改
Customer customer=session.get(Customer.class, 1l);
customer.setCust_name("小花");
session.update(customer);
tx.commit();
session.close();
}
@Test
//删除
public void demo4(){
Session session=HibernateUtils.openSession();
Transaction tx=session.beginTransaction();
//创建对象后修改
/*
Customer customer=new Customer();
customer.setCust_id(2l);
session.delete(customer);
*/
//先查询后删除
Customer customer=session.get(Customer.class, 2l);
session.delete(customer);
tx.commit();
session.close();
}
@Test
//保存或跟新
public void demo5(){
Session session=HibernateUtils.openSession();
Transaction tx=session.beginTransaction();
Customer customer=new Customer();
customer.setCust_id(2l);
customer.setCust_name("lisa");
session.saveOrUpdate(customer);
tx.commit();
session.close();
}
@Test
//查询所有
public void demo6(){
Session session=HibernateUtils.openSession();
Transaction tx=session.beginTransaction();
//接受HQL
/*
Query query=session.createQuery("from Customer");
List<Customer> list=query.list();
for(Customer customer:list){
System.out.println(customer);
}*/
//接受SQL
SQLQuery query=session.createSQLQuery("selsct * from cst_customer");
List<Object[]> list=query.list();
for(Object[] objects:list){
System.out.println(Arrays.toString(objects));
}
tx.commit();
session.close();
}
Transaction 事务
常用方法:
commit():提交
rollback():回滚
//加载核心配置文件
Configuration configuration=new Configuration().configure();
//创建sessionfactory类似于JDBC的连接池
SessionFactory sessionFactory=configuration.buildSessionFactory();
//获取session对象 相当于Connection
Session session=sessionFactory.openSession();
//手动开启事务
Transaction transaction=(Transaction) session.beginTransaction();
//编写代码
Customer customer=new Customer();
customer.setCust_name("王有二");
session.save(customer);
//提交事务
transaction.commit();
//资源释放
session.close();
sessionFactory.close();