Configuration
功能
配置加载类,用于加载主配置,orm元数据加载
创建
//创建,调用空参构造
Configuration conf = new Configuration();
加载主配置
//读取指定主配置文件=>空参加载方法,加载src下的hibernate
conf.configure();
加载orm元数据(了解)
//读取指定orm元数据,如果主配置中已经引入映射配置,不需要手动加载
conf.addResource(ResourceName);
conf.addClass(persistentClass);
创建sessionFactory
//根据配置信息,创建SessionFactory对象
SessionFactory sf = con.buildSessionFactory();
SessionFactory
功能
用于创建操作数据库核心对象session对象的工厂
注意
- sessionFactory 负责保存和使用所有配置信息,消耗内存资源非常大
- sessionFactory 属于线程安全的对象设计
结论
保证在web项目中,只创建一个sessionFactory()
获得session对象
Session session = sf.openSession();
获得一个与线程绑定的session对象
sf.getCurrentSession();
Session(Hibernate框架与数据库之间的连接)
功能
类似于JDBC的connection对象,还可以完成对数据库中数据的增删改查操作,Session是Hibernate操作数据库的核心对象
操作事务
//获得操作事务的对象
Transaction transaction = session.getTransaction();
获取操作事务的对象,并且开启事务
Transaction transaction = session.beginTransaction();
session的操作
//1. 添加数据库列
//1.1 创建user对象
User user = new User();
//1.2 完善user对象
user.setUsername("小明");
//1.3 将对象映射插入到数据库表中
session.save(user);
//2. 删除数据库列(id)
//2.1 获得要删除的对象
User user = session,get(User.class, 1l);
//2.2 调用delete删除对象
session.delete(user);
User user = session.get(User.class,)
//3. 修改数据库列(id)
//3.1 获得要修改的对象
User user = new User();
//3.2 修改对象属性
user.setUsername("小样");
//3.3 执行update方法进行提交
session.update(user);
//4. 查询数据库列(id)
//4.1 获取列对应的对象(id,1l对应,1表示id为1的列,l表示id的类型为long型)
User user = session.get(Customer.class,1l);
事务提交与回滚
transaction.commit();
transaction.rollback();
释放资源
//释放session资源
session.close();
//释放sessionFactory资源
sessionFactory.close();
代码整合
package com.Pu1satilla.demo;
import com.Pu1satilla.domain.UserEntity;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class Demo {
public static void main(String[] args) {
// 1.加载主配置
Configuration configuration = new Configuration();
configuration.configure();
// 2.创建sessionFactory
SessionFactory sessionFactory = configuration.buildSessionFactory();
// 3.获取session连接数据库会话对象
Session session = sessionFactory.openSession();
// 4.获取操作事务对象并开启
Transaction transaction = session.beginTransaction();
// 5.hibernate操作数据库
UserEntity userEntity = new UserEntity();
userEntity.setUsername("小明");
userEntity.setPassword(":");
userEntity.setUid(1);
session.save(userEntity);
Object o = session.get(UserEntity.class, 1);
System.out.println(o);
// 6.提交事务,释放资源
transaction.commit();
session.close();
sessionFactory.close();
}
}
抽取代码(HibernateUtils)
package com.Pu1satilla.utils;
import com.Pu1satilla.domain.UserEntity;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
/**
* 工具类,抽取hibernate常用Api,简化编写代码
*/
public class HibernateUtils {
private static SessionFactory sessionFactory;
static {
Configuration configure = new Configuration().configure();
ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(configure.getProperties()).buildServiceRegistry();
sessionFactory = configure.buildSessionFactory(registry);
}
/**
* @return 连接数据库会话对象
*/
public static Session getSession() {
return sessionFactory.openSession();
}
/*demo
public static void main(String[] args) {
// 1.建立与数据库表映射对象
UserEntity userEntity = new UserEntity();
userEntity.setUsername("小花");
userEntity.setUid(1);
// 2.通过工具类获取session对象
Session session = HibernateUtils.getSession();
// 3.获取事务并提交
Transaction transaction = session.beginTransaction();
// 4.执行hibernate语句
session.save(userEntity);
System.out.println(session.get(UserEntity.class, 1));
// 5.事务提交
transaction.commit();
// 6.释放资源
session.close();
sessionFactory.close();
}
*/
}