Hibernate的CURD操作

首先定义工具类:HbnUtils

包:com.etc.utils


SessionFactory由于是重量级,线程安全的,所有我们的使用原则:是用单例的,且不要手动关闭该对象


public class HbnUtils{
private static SessionFactory sessionFactory;

public static Session getSession(){

return getSessionFactory.getCurrentSession();
}

public static SessionFactory getSessionFactory(){

if(sessionFactory == null || sessionFactory.isClosed()){
sessionFactory=new Configuration().configure().buildSessionFactory();
}
return sessionFactory;
}
}


快捷键: alt+shift+m : 是把一段代码变成一个方法

光标定位到该变量,ctrl+1:选第三项:可把一个变量变成一个全局静态变量


测试类
public class MyTest{


@Test
public void testSave(){
==============hibernate操作数据库的七步============


//1.获取Session对象
Session session = HbnUtils.getSession();
try{
//2.开启事务
session.beginTransaction();
//3.执行操作
Student student=new Student("张三",20,93.5);
session.save(student);
//4.事务提交
session.getTransaction().commit();

}catch (Exception e){
e.printStackTrace();
//5.事务回滚
session.getTransaction().rollback();
}

}

@Test
public void testDelete(){
==============hibernate操作数据库的七步============


//1.获取Session对象
Session session = HbnUtils.getSession();

try{
//2.开启事务
session.beginTransaction();

//3.执行删除操作
Student student=new Student();
student.setId(1);
//删除的条件是对象要具有id
session.delete(student);

//4.事务提交
session.getTransaction().commit();

}catch (Exception e){
e.printStackTrace();
//5.事务回滚
session.getTransaction().rollback();
}

}

@Test
public void testUpdate(){
==============hibernate操作数据库的七步============


//1.获取Session对象
Session session = HbnUtils.getSession();

try{
//2.开启事务
session.beginTransaction();

//3.执行修改操作
Student student=new Student("李四",24,94.5);
student.setId(2);
//更改的条件是对象要具有id
session.update(student);

//4.事务提交
session.getTransaction().commit();

}catch (Exception e){
e.printStackTrace();
//5.事务回滚
session.getTransaction().rollback();
}

}

//persist的效果和save的效果一样可以添加数据

@Test
public void testPersist(){
==============hibernate操作数据库的七步============


//1.获取Session对象
Session session = HbnUtils.getSession();
try{
//2.开启事务
session.beginTransaction();
//3.执行操作
Student student=new Student("张三",20,93.5);
session.persist(student);
//4.事务提交
session.getTransaction().commit();

}catch (Exception e){
e.printStackTrace();
//5.事务回滚
session.getTransaction().rollback();
}

}

//查询
@Test
public void testGet(){
==============hibernate操作数据库的七步============


//1.获取Session对象
Session session = HbnUtils.getSession();

try{
//2.开启事务
session.beginTransaction();

//3.执行修改操作
Student student=session.get(Student.class,2);
System.out.println(student);


//4.事务提交
session.getTransaction().commit();

}catch (Exception e){
e.printStackTrace();
//5.事务回滚
session.getTransaction().rollback();
}

}
面试点:底层涉及的比较多,自己查询资料????
下面的只是表象:
//get()与load()的共同点:根据id加载对象
区别:当所要查询的数据id=20(假设)在数据库中不存在的时候
使用get()返回的是null
使用load()返回的是抛出异常

//查询
@Test
public void testGet(){
==============hibernate操作数据库的七步============


//1.获取Session对象
Session session = HbnUtils.getSession();

try{
//2.开启事务
session.beginTransaction();

//3.执行修改操作
Student student=session.load(Student.class,2);
System.out.println(student);


//4.事务提交
session.getTransaction().commit();

}catch (Exception e){
e.printStackTrace();
//5.事务回滚
session.getTransaction().rollback();
}


@Test
public void testSaveorUpdate(){
==============hibernate操作数据库的七步============


//1.获取Session对象
Session session = HbnUtils.getSession();

try{
//2.开启事务
session.beginTransaction();

//3.执行修改操作
Student student=new Student("李小四",24,94.5);
student.setId(2);
session.saveOrUpdate(student); //执行的是update 

当注释掉student.setId(2);该行后,执行的是insert即save

如果你操作的这个对象存在id,执行的就是update,否则就是执行insert即save


//4.事务提交
session.getTransaction().commit();

}catch (Exception e){
e.printStackTrace();
//5.事务回滚
session.getTransaction().rollback();
}

}

//查询操作对事务的要求:
@Test
public void testGetLoad(){
==============hibernate操作数据库的七步============
//报错:
//1.获取Session对象
Session session = HbnUtils.getSession();

//2.执行查询操作
//通过getCurrentSession()获取到的session所执行的查询必须在事务的环境下运行,否则报错
Student student=session.get(Student.class,2);
System.out.println(student);
}

@Test
public void testGetLoad2(){
==============hibernate操作数据库的七步============
//正确:
//1.获取Session对象
Session session = HbnUtils.getSessionFactory().openSession();

//2.执行查询操作
//通过getCurrentSession()获取到的session所执行的查询必须在事务的环境下运行,否则报错
//通过openSession()获取到的session所执行的查询无须一定在事务的环境下运行
Student student=session.get(Student.class,2);
System.out.println(student);
}

//增删改查的默认执行顺序:

@Test
//一个方法做增删改查
public void testCURD(){
==============hibernate操作数据库的七步============


//1.获取Session对象
Session session = HbnUtils.getSession();

try{
//2.开启事务
session.beginTransaction();

//3.执行操作

//增删改查的默认执行顺序:
//增删改操作若放在同一事务下运行,则系统默认的执行顺序为:增--》改--》删

//删除
Student student=session.get(Student.class,2);//这一步是查询
session.delete(student)

//插入
Student student2=new Student("王五",25,95.2);
session.save(student2);

//修改
Student student3=session.get(Student.class,3);
student3.setName("赵六");
session.update(student3);

//4.事务提交
session.getTransaction().commit();

}catch (Exception e){
e.printStackTrace();
//5.事务回滚
session.getTransaction().rollback();
}


//自定义增删改查的执行顺序:
@Test
//一个方法做增删改查
public void testCURD(){
==============hibernate操作数据库的七步============


//1.获取Session对象
Session session = HbnUtils.getSession();

try{
//2.开启事务
session.beginTransaction();

//3.执行操作

//增删改查的默认执行顺序:
//增删改操作若放在同一事务下运行,则系统默认的执行顺序为:增--》改--》删



//删除
Student student=session.get(Student.class,4);//这一步是查询
session.delete(student);

//刷新Session缓存 顺序:变成了先删除在插入在修改
session.flush();

//修改
Student student3=session.get(Student.class,3);
student3.setName("赵小六");
session.update(student3);

//插入
Student student2=new Student("王五",25,95.2);
session.save(student2);



//4.事务提交
session.getTransaction().commit();

}catch (Exception e){
e.printStackTrace();
//5.事务回滚
session.getTransaction().rollback();
}

}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值