Hibernate-简单完成crud
程序员文章站
2022-04-23 23:40:32
...
这个算是接着上一篇写的了,昨天打游戏去了,打hi了,就没做,这次再完善一下上篇没做玩的crud测试。
首先,因为crud的每个方法都需要开启session会话,不如直接创建一个工具类,需要session时直接调用工具类岂不是更方便。
一.创建HibernateUtils工具类
位置:com.ht.Utils.HibernateUtil
public class HibernateUtil {
public static SessionFactory sessionFactory;
//加载主配置文件,创建session工厂
public static SessionFactory getSessionFactory(){
if (sessionFactory == null || sessionFactory.isClosed()) {
sessionFactory = new Configuration().configure().buildSessionFactory();
}
return sessionFactory;
}
//获取session
public static Session getSession() {
return getSessionFactory().getCurrentSession();
}
}
二.hibernateTest实现crud
com.ht.test.HibernateTest
i.插入数据:hibernate实现插入数据的操作基本用的就是save()方法,当然这里还有个persist()方法。不作介绍。
@Test
public void testSave() {
Session session = HibernateUtil.getSession();
try {
//1.开启事务
session.beginTransaction();
//2.执行操作
Student student = new Student("张三",20);
session.save(student);
//3.提交事务
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
//4.事务回滚
session.getTransaction().rollback();
}
}
ii.删除数据
@Test
public void testDelete() {
Session session = HibernateUtil.getSession();
try {
//1.开启事务
session.beginTransaction();
//2.执行操作
Student student = new Student("张三",20);
student.setId(1);
//删除的条件是对象具有id
session.delete(student);
//3.提交事务
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
//4.事务回滚
session.getTransaction().rollback();
}
}
iii:更新数据
@Test
public void testUpdate() {
Session session = HibernateUtil.getSession();
try {
//1.开启事务
session.beginTransaction();
//2.执行操作
Student student = new Student("李四",22);
student.setId(2);
session.update(student);
//3.提交事务
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
//4.事务回滚
session.getTransaction().rollback();
}
}
IV:查询数据:查询数据可以有两个方法,get()和load(),今后工作面试题也可能会遇到这样的问题,问你hibernate查询的两个方法的差别.首先,将代码写出来,再看差别.
@Test
public void testGet() {
Session session = HibernateUtil.getSession();
try {
//1.开启事务
session.beginTransaction();
//2.执行操作
Student student = session.get(Student.class, 2);
System.out.println(student);
//3.提交事务
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
//4.事务回滚
session.getTransaction().rollback();
}
}
@Test
public void testLoad() {
Session session = HibernateUtil.getSession();
try {
//1.开启事务
session.beginTransaction();
//2.执行操作
Student student = session.load(Student.class, 2);
System.out.println(student);
//3.提交事务
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
//4.事务回滚
session.getTransaction().rollback();
}
}
这里有两个版本的说明,都粘贴出来吧.
/*
* get()与load()的共同点:都是根据id查询对象
* get()与load()的区别:
* get():若加载的对象不存在,则返回null
* get方法立即检索
* load():若加载的对象不存在,则抛出异常,LazyInitializationException(懒加载异常) 异常
* load方法延迟检索
*/
/**
* get() VS load():
* 1).执行get方法理解调用对象
* 执行load方法,若不使用该对象,则不会立即执行查询操作,而返回一个代理对象。
*
* get方法是立即检索,load方法是延迟检索
*2). 若数据表中没有对应的记录,并且Session没有被关闭,同时需要使用对象时
* get方法返回null
* load方法若不使用没问题,若需要初始化了,则抛出异常
* 3).load方法可能会抛出 LazyInitializationException(懒加载异常) 异常
* 代理对象已经关闭了session
*/
v:还有个特殊的方法,saveorupdate();
@Test
public void testSaveOrUpdate() {
Session session = HibernateUtil.getSession();
try {
//1.开启事务
session.beginTransaction();
//2.执行操作
Student student = new Student("王五",22);
//student.setId(2);
//执行save()或是update()在于数据表中的id是否存在,
//如果有,则执行update(),
//如果没有,则执行save().
session.saveOrUpdate(student);
//3.提交事务
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
//4.事务回滚
session.getTransaction().rollback();
}
}
上一篇: 数据结构之一准备及预热
推荐阅读
-
Vue Autocomplete 自动完成功能简单示例
-
让Word给我自动干活用简单的方法完成复制的工作
-
AutoCAD2020怎么改字体大小 简单6步快速完成字体修改
-
用C#对ADO.NET数据库完成简单操作的方法
-
pygame学习笔记(6):完成一个简单的游戏
-
idea+spring4+springmvc+mybatis+maven实现简单增删改查CRUD
-
【笔记】嵩天-Python语言程序设计-完成两个简单实例
-
使用JQ完成表格隔行换色的简单实例
-
JDBC 笔记--Day01--JDBC概述+JDBC完成CRUD+DAO设计
-
SQL Server温故系列(2):SQL 数据操作 CRUD 之简单查询