|-- Configuration 配置管理类对象
config.configure(); 加载主配置文件的方法(hibernate.cfg.xml)
默认加载src/hibernate.cfg.xml
config.configure(“cn/config/hibernate.cfg.xml”); 加载指定路径下指定名称的主配置文件
config.buildSessionFactory(); 创建session的工厂对象
|-- SessionFactory session的工厂(或者说代表了这个hibernate.cfg.xml配置文件)
sf.openSession(); 创建一个sesison对象
sf.getCurrentSession(); 创建session或取出session对象
|--Session session对象维护了一个连接(Connection), 代表了与数据库连接的会话。
Hibernate最重要的对象: 只用使用hibernate与数据库操作,都用到这个对象
session.beginTransaction(); 开启一个事务; hibernate要求所有的与数据库的操作必须有事务的环境,否则报错!
更新: session.save(obj); 保存一个对象 session.update(emp); 更新一个对象 session.saveOrUpdate(emp); 保存或者更新的方法: 没有设置主键,执行保存;有设置主键,执行更新操作; 如果设置主键不存在报错! 主键查询: session.get(Employee.class, 1); 主键查询 session.load(Employee.class, 1); 主键查询 (支持懒加载) HQL查询: HQL查询与SQL查询区别: SQL: (结构化查询语句)查询的是表以及字段; 不区分大小写。 HQL: hibernate query language 即hibernate提供的面向对象的查询语言 查询的是对象以及对象的属性。 区分大小写。
Criteria查询: 完全面向对象的查询。 本地SQL查询: 复杂的查询,就要使用原生态的sql查询,也可以,就是本地sql查询的支持! (缺点: 不能跨数据库平台!) |
|-- Transaction hibernate事务对象
public class App2 {
private static SessionFactory sf;
static {
/*
//1. 创建配置管理类对象
Configuration config = new Configuration();
// 加载配置文件 (默认加载src/hibernate.cfg.xml)
config.configure();
//2. 根据加载的配置管理类对象,创建SessionFactory对象
sf = config.buildSessionFactory();
*/
// 创建sf对象
sf = new Configuration().configure().buildSessionFactory();
}
//1. 保存对象
@Test
public void testSave() throws Exception {
// 对象
Employee emp = new Employee();
emp.setEmpName("张三123");
emp.setWorkDate(new Date());
//根据session的工厂,创建session对象
Session session = sf.openSession();
// 开启事务
Transaction tx = session.beginTransaction();
//-----执行操作-----
session.save(emp);
// 提交事务/ 关闭
tx.commit();
session.close();
}
//更新
@Test
public void testUpdate() throws Exception {
// 对象
Employee emp = new Employee();
emp.setEmpId(1000000);
emp.setEmpName("张三3");
// 创建session
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
//-------执行操作-------
// 没有设置主键,执行保存;有设置主键,执行更新操作; 如果设置主键不存在报错!
session.saveOrUpdate(emp);
tx.commit();
session.close();
}
}
public class App3 {
private static SessionFactory sf;
static {
// 创建sf对象
sf = new Configuration().configure().buildSessionFactory();
}
//HQL查询 【适合有数据库基础的】
@Test
public void testQuery() throws Exception {
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
// 主键查询
//Employee emp = (Employee) session.get(Employee.class, 1);
// HQL查询,查询全部
Query q = session.createQuery("from Employee where empId=1 or empId=2");
List<Employee> list = q.list();
System.out.println(list);
tx.commit();
session.close();
}
//QBC查询 , query by criteria 完全面向对象的查询
@Test
public void testQBC() throws Exception {
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
Criteria criteria = session.createCriteria(Employee.class);
// 条件
criteria.add(Restrictions.eq("empId", 1));
// 查询全部
List<Employee> list = criteria.list();
System.out.println(list);
tx.commit();
session.close();
}
//sQL
@Test
public void testSQL() throws Exception {
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
// 把每一行记录封装为对象数组,再添加到list集合
// SQLQuery sqlQuery = session.createSQLQuery("select * from employee");
// 把每一行记录封装为 指定的对象类型
SQLQuery sqlQuery = session.createSQLQuery("select * from employee").addEntity(Employee.class);
List list = sqlQuery.list();
System.out.println(list);
tx.commit();
session.close();
}
}
一个综合的例子
//工具类 public class HibernateUtils { private static SessionFactory sf; |
//sql执行的类 public class EmployeeDaoImpl implements IEmployeeDao{ @Override @Override @Override @Override @Override @Override @Override |
测试类
public class App { @Test @Test @Test @Test @Test @Test @Test } |