delete
// 注意删除一定要有主键存在
sessions.save(t);
get和load方法
把数据库中的记录转化成对象,放到内存中
区别:
1. load返回的是代理对象,等到真正使用对象的内容才发出sql语句
@Test
public void testLoad() {
Session sessions = sf.openSession();
sessions.beginTransaction();
Teacher t = (Teacher)sessions.load(Teacher.class,1);
System.out.println(t.getId());
// 代理类 class model.Teacher_$$_jvstf0c_0
System.out.println(t.getClass());
sessions.getTransaction().commit();
}
2.get直接从数据库加载对象,不会延迟
@Test
public void testGet() {
Session sessions = sf.openSession();
sessions.beginTransaction();
Teacher t = (Teacher)sessions.get(Teacher.class,1);
System.out.println(t.getId());
sessions.getTransaction().commit();
}
update
用来更新detached对象(必须有id),更新后变为persistent状态
@Test
public void testUpdate1() {
Session session = sf.openSession();
session.beginTransaction();
Teacher t = (Teacher)session.get(Teacher.class,1);
session.getTransaction().commit();
// commit之后t变为Detached
t.setName("zhanglaoshi");
// 更新detached状态的对象
Session session2 = sf.openSession();
session2.beginTransaction();
session2.update(t);
session2.getTransaction().commit();
}
想让某些列不参与更新:
annotation有3种中,最好用的一种:
使用HQL语句
saveOrUpdate
根据情况会执行save或update
@Test
public void testSaveOrUpdate() {
Teacher t = new Teacher();
t.setName("t1111");
t.setTitle("highlevel");
t.setBirthdayDate(new Date());
t.setZhicheng(ZhiCheng.A);
Session session = sf.openSession();
session.beginTransaction();
session.saveOrUpdate(t);// 执行save
session.getTransaction().commit();
t.setName("t2");
Session session2 = sf.openSession();
session2.beginTransaction();
session2.saveOrUpdate(t);// 执行update
session2.getTransaction().commit();
}
clear
无论是load还是get都会先查找缓存,一级缓存,没有才会到数据库查找
@Test
public void testClear() {
Session sessions = sf.openSession();
sessions.beginTransaction();
Teacher t = (Teacher)sessions.load(Teacher.class,1);
System.out.println(t.getName());
// 清除session缓存 不加此行 下面的load方法,可直接从session中取对象
sessions.clear();
Teacher t2 = (Teacher)sessions.load(Teacher.class,1);
System.out.println(t2.getName());
sessions.getTransaction().commit();
}
flush
强制的进行从数据库到内存的同步
@Test
public void testFlush() {
Session sessions = sf.openSession();
sessions.beginTransaction();
Teacher t = (Teacher)sessions.load(Teacher.class,1);
t.setName("ttt");
sessions.flush();// 强制同步
t.setName("ttttt");
System.out.println(t.getName());
// commit的时候会默认flush(),hibernate会发update语句保持缓存和数据库同步
sessions.getTransaction().commit();
}
SchemaExport
通过程序生成建表语句
@Test
public void testSchemaExport(){
// true 是否将建表语句输出到控制台 true 是否在数据库中建表
new SchemaExport(new AnnotationConfiguration().configure()).create(true,true);
}