persist()
persist() 是JPA的接口,不是 hibernate提供的方法
该方法可以用来插入
插入之后的结果:
delete()
答案是不能删除一条记录
在根据主键的值来进行删除的情况下,从内存中申请了一个Teacher对象并指定name 和title,该写法并没有指定id 所以说是不能够进行删除的
session.delete()根据主键id删除。
t.setId(9) 确定删除id=9的记录,且此记录存在。
id 若不存在,程序无法删除!(删除的前提基础就是该对象要存在)
下面来进行正确的删除操作
(以删除id为8的为例)
删除之后的结果:
代码:
import cn.edu.ldu.Utils.HbnUtils; import cn.edu.ldu.entity.Teacher; import org.hibernate.Session; import org.junit.Test; public class CRUDTest { @Test public void testDelete(){ // 1. 获取session对象 Session session = HbnUtils.getSession(); try{ // 2. 开启事务 session.beginTransaction(); // 3. 执行CRUD操作 Teacher t = new Teacher(); t.setId(8); session.delete(t); // 4. 提交事务 session.getTransaction().commit(); }catch (Exception e){ e.printStackTrace(); // 5. 回滚 session.getTransaction().rollback(); } } }
update()
为了更新指定的一条记录,记录要保证唯一,那么就根据主键来进行确定
所以和删除操作类似,一定要指定记录的 id
假如以更新id
为1的记录为例:
代码:
import cn.edu.ldu.Utils.HbnUtils; import cn.edu.ldu.entity.Teacher; import org.hibernate.Session; import org.junit.Test; public class CRUDTest { @Test public void testUpdate(){ Session session = HbnUtils.getSession(); try{ session.beginTransaction(); Teacher t = new Teacher("徐攀","啥也不是"); t.setId(1); session.update(t);//之前那开启事务处理 session.getTransaction().commit(); }catch (Exception e){ e.printStackTrace(); session.getTransaction().rollback(); } } }
就这样,一号记录徐攀
从 普林斯顿大学博士
变成了啥也不是
根据id
查询get()
重写 toString()
的代码已经在前面贴过了,这里再cv一发
@Override public String toString() { return "Teacher{" + "id=" + id + ", name='" + name + '\'' + ", title='" + title + '\'' + '}'; }
要注意,get()返回的是一个 Teacher
对象,在使用的过程中,第二个参数是id
执行结果:
代码:
import cn.edu.ldu.Utils.HbnUtils; import cn.edu.ldu.entity.Teacher; import org.hibernate.Session; import org.junit.Test; public class CRUDTest { @Test public void testGet(){ Session session = HbnUtils.getSession(); session.beginTransaction(); // 通过id查询一条记录 try{ Teacher teacher = session.get(Teacher.class, 2);//反射机制 System.out.println(teacher); session.getTransaction().commit(); }catch (Exception e){ e.printStackTrace(); session.getTransaction().rollback(); } } }
根据id
查询 load()
我们按照同样的方式将get
改成load
之后可以发现:
结果是一样的
get()
和load()
区别
load
是一种延迟加载
注释掉输出语句之后可以发现
get()
:
load()
:
get()
有hibernate
输出,但是load
没有
这说明:
get()
直接从数据库加载,立即执行,不会延迟;
load()
等到真正用到对象的内容时才发出sql语句,称之延迟加载。
截至目前,CURDTest类的全部内容如下:
import cn.edu.ldu.Utils.HbnUtils; import cn.edu.ldu.entity.Teacher; import org.hibernate.Session; import org.junit.Test; public class CRUDTest { @Test public void testUpdate(){ Session session = HbnUtils.getSession(); try{ session.beginTransaction(); Teacher t = new Teacher("徐攀","啥也不是"); t.setId(1); session.update(t);//之前那开启事务处理 session.getTransaction().commit(); }catch (Exception e){ e.printStackTrace(); session.getTransaction().rollback(); } } @Test public void testGet(){ Session session = HbnUtils.getSession(); session.beginTransaction(); // 通过id查询一条记录 try{ Teacher teacher = session.get(Teacher.class, 2);//反射机制 System.out.println(teacher); session.getTransaction().commit(); }catch (Exception e){ e.printStackTrace(); session.getTransaction().rollback(); } } @Test public void testLoad(){ Session session = HbnUtils.getSession(); session.beginTransaction(); // 通过id查询一条记录 try{ Teacher teacher = session.load(Teacher.class, 2);//反射机制 System.out.println(teacher); session.getTransaction().commit(); }catch (Exception e){ e.printStackTrace(); session.getTransaction().rollback(); } } @Test public void testSave(){ // 1. 获取session对象 Session session = HbnUtils.getSession(); try{ // 2. 开启事务 session.beginTransaction(); // 3. 执行CRUD操作 Teacher t = new Teacher("wuyt","学生"); session.save(t); // 4. 提交事务 session.getTransaction().commit(); }catch (Exception e){ e.printStackTrace(); // 5. 回滚 session.getTransaction().rollback(); } } @Test public void testPersist(){ // 1. 获取session对象 Session session = HbnUtils.getSession(); try{ // 2. 开启事务 session.beginTransaction(); // 3. 执行CRUD操作 Teacher t = new Teacher("taotaotao","学士"); session.persist(t); // 4. 提交事务 session.getTransaction().commit(); }catch (Exception e){ e.printStackTrace(); // 5. 回滚 session.getTransaction().rollback(); } } @Test public void testDelete(){ // 1. 获取session对象 Session session = HbnUtils.getSession(); try{ // 2. 开启事务 session.beginTransaction(); // 3. 执行CRUD操作 Teacher t = new Teacher(); t.setId(8); session.delete(t); // 4. 提交事务 session.getTransaction().commit(); }catch (Exception e){ e.printStackTrace(); // 5. 回滚 session.getTransaction().rollback(); } } }
未完待续。。。。。。。。。。。。。。。。。。。。。。。。。。
文章知识点与官方知识档案匹配,可进一步学习相关知识