hibernate--CoreAPI_Session

1、save()

2、delete(Object o) ; 要删除必须得有ID值:如:

package com.action;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistryBuilder;

import com.bean.Student;
import com.bean.StudentPK;

public class test2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	   SessionFactory sessionFactory = Ancillary.getSessionFactory();
       Session session = sessionFactory.getCurrentSession();
       
       Student student = new Student();
       student.setId(1);
       student.setName("王强");
       student.setPassword("123456");
       
       session.beginTransaction();
       session.save(student);
       
       Session session2 = sessionFactory.getCurrentSession();
       session2.delete(student);
       session.getTransaction().commit();
	}
}

3、load(Class theClass, Serializable id)  // 重数据库中获取一条记录

       Session session2 = sessionFactory.getCurrentSession();
       session2.beginTransaction();
       Student student2 = (Student)session2.load(Student.class, 1);
       System.out.println(student2.getName());
       session2.getTransaction().commit();
以下顺序会报错:

       session2.getTransaction().commit();
       System.out.println(student2.getName());

4、get(Class theClass, Serializable id)

       Session session2 = sessionFactory.getCurrentSession();
       session2.beginTransaction();
       Student student2 = (Student)session2.get(Student.class, 1);
       session2.getTransaction().commit();
       System.out.println(student2.getName());
get()和load的区别:

a、load()得到的时代理对象,等到真正用到对象内容时才会发出sql语句。

b、get()直接从数据库中加载,不会延迟。
c、不存在对应记录时表现不一样。


5、update(Object o)

   1)可以更新一个detached状态的实例对象(存在id),更新完成后变成persistent状态

   2)不能更新一个transient 状态的实例对象,如果自动设置了id,也同样可以完成更新。

       Student student = new Student();
       student.setId(1);
       student.setName("WU");
      
       session.beginTransaction();
       session.update(student);
     //  session.save(student);
       session.getTransaction().commit();
   3)指定字段不被更新:可在对应字段上设置@Column(updatable=false)

   4)设置只更新需要更新的字段

 a、XML中 ,在hbm.xml中,在标签class配置  dynamic-update="true" 即可:

	   session.beginTransaction();  //开启事务
	   teacher teach = (teacher)session.get(teacher.class, 1);  //执行之后变成persistence状态
	   teach.setTitle("教授");
	   session.update(teach);    //执行数据库添加操作 
	   session.getTransaction().commit(); // 事务提交
	   System.out.println("the end");
在同一session可以达到效果, 不同session则会更新所有字段,不过可以通过merge()来完成同样的效果(了解即可)。


b、通过HQL语句(推荐):

	   session.beginTransaction();  //开启事务
	   Query query = session.createQuery("update teacher t set t.title = '博士' where t.id = 1"); // teacher是类名,而不是表名
	   query.executeUpdate();
	   session.getTransaction().commit(); // 事务提交
	   System.out.println("the end");

6、saveOrUpdate()

7、clear()

   无论是get()还是load()都会检查缓存中是否存在对象,有则从缓存中取,否则从数据库中取,调用clear()可以强制清除session缓存。

8、flush() 强制缓存和数据库中的内容同步(默认情况下是commit时缓存和数据库中的内容才会同步)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柏油

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值