1 先编写一个封装session对象的封装类
package com.heshihua.hibernate.utils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/*
* hibernate的工具类
* */
public class HibernateUtils {
public static final Configuration cfg;
public static final SessionFactory sf;
static {
cfg = new Configuration().configure();
sf = cfg.buildSessionFactory();
}
public static Session openSession() {
return sf.openSession();
}
}
由于SessionFactory是一个重量级的对象随意需要封装起来只用一个即可
接下来的增删改查都要用到此工具类
2 增加
@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();
}
3 查询
@Test
//查询
public void demo2() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
/*
* get方法
* 采用的是立即加载的方法,执行到这行语句的时候就会发送sql语句
* 查询后返回的是真是的对象
* 查询一个找不到的对象的时候返回的是一个null
* load方法
* 采用延迟加载方法(懒加载),执行到这行不会发送sql语句,再使用此对象的时候才会发送sql语句
* 返回的是代理的对象。Javassist-3.18.1-GA.jar利用Javassist产生的代理
* 查询一个找不到的对象会返回一个ObjectNotFoundException
* */
//使用get方法进行查询
// Customer customer = session.get(Customer.class, 1l);
// System.out.println(customer.toString());
//使用load进行查询
Customer customer = session.load(Customer.class, 2l);
System.out.println(customer.toString());
tx.commit();
session.close();
}
4 修改
@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("张杰");
tx.commit();
session.close();
}
5 删除
@Test
//删除
public void demo4() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//直接创建对象进行删除
// Customer customer = new Customer();
// customer.setCust_id(5l);
// session.delete(customer);
//先查询再删除(推荐)
Customer customer = session.get(Customer.class, 4l);
session.delete(customer);
tx.commit();
session.close();
}
7 查询所有
@Test
//查询所有
public void demo5() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//接收HQL:hibernate query language//面向对象的查询语言
// Query query = session.createQuery("from Customer");
// List<Customer> list = query.list();
// for (Customer customer : list) {
// System.out.println(customer);
// }
//接受sql
SQLQuery query = session.createSQLQuery("select * from cst_customer");
List<Object[]> list = query.list();
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
}
tx.commit();
session.close();
}
结尾
此文的增删改查仅仅是基于单表映射所进行的操作。仅作练习不用于实际。