提取出Session工具类:
package com.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/*
* 一个项目只能用一个SessionFactory对象
*/
public class HibernateUtil {
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();
}
}
实现基础的CRUD操作:
package com.test;
import com.bean.Customer;
import com.util.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import org.junit.Test;
import java.util.List;
public class DemoHibernate {
@Test
public void demo1(){
// 1.加载hibernate核心配置文件
Configuration configuration = new Configuration().configure();
// 2.创建一个SessionFactory对象(类似于JDBC连接池)
SessionFactory sessionFactory = configuration.buildSessionFactory();
// 3.通过SessionFactory获取到Session对象(类似于JDBC中的Connection)
Session session=sessionFactory.openSession();
// 4.手动开启事务
Transaction transaction = session.beginTransaction();
// 5.编写代码
Customer customer = new Customer();
customer.setCust_name("赵云02");
session.save(customer);
// 6.提交事务
transaction.commit();
// 7.释放资源
session.close();
}
//插入元素
@Test
public void save(){
Session session = HibernateUtil.openSession();
Transaction transaction = session.beginTransaction();
// 5.编写代码
Customer customer = new Customer();
customer.setCust_name("钱进");
session.save(customer);
// 6.提交事务
transaction.commit();
// 7.释放资源
session.close();
}
//查询单个
@Test
public void query(){
Session session = HibernateUtil.openSession();
Transaction transaction = session.beginTransaction();
//get 和 load 只能根据id来查询某个对象,get(类.class,id);同时get和load有区别
Customer customer = session.get(Customer.class,1l);
System.out.println(customer);
transaction.commit();
session.close();
}
//根据相关属性查询
@Test
public void queryBySome(){
Session session = HibernateUtil.openSession();
Transaction transaction = session.beginTransaction();
//下面写的是HQL查询语句
Query query= session.createQuery("from Customer as c where c.cust_name like :name");
query.setParameter("name","%云%");
List<Customer> list = query.list();
for (Customer c:list) {
System.out.println(c);
}
transaction.commit();
session.close();
}
//查询所有
@Test
public void queryAll(){
Session session = HibernateUtil.openSession();
Transaction transaction = session.beginTransaction();
//下面写的是HQL查询语句
Query query= session.createQuery("from Customer");
List<Customer> list = query.list();
System.out.println("这是HQL查询:------"+list);
Query query1=session.createSQLQuery("select * from customer");
List<Customer> list1 =query.list();
System.out.println("这是SQL查询:----------"+list1);
transaction.commit();
session.close();
}
//根据id更新
@Test
public void update(){
Session session = HibernateUtil.openSession();
Transaction transaction = session.beginTransaction();
//get 和 load 只能根据id来查询某个对象,get(类.class,id);同时get和load有区别
Customer customer = session.get(Customer.class,1l);
//Hibernate的get和load方法查询出的实体都是持久化对象,
// 拿到该对象后,如果你调用了该对象的set方法,那么在事务递交的时候,Hibernate会把你设置的值自动更新到数据库中。
session.evict(customer); //将对象从session中拆离,执行setCust_name("马云01")不会更新数据库,不加这句就会直接更新数据库。如果不写这句,也不需要些update
customer.setCust_name("马云01");
session.update(customer);
transaction.commit();
session.close();
}
//删除
@Test
public void delete(){
Session session = HibernateUtil.openSession();
Transaction transaction=session.beginTransaction();
Customer customer = session.get(Customer.class,8l);
session.delete(customer);
transaction.commit();
session.close();
}
}