hibernate-核心开发接口(delete、get、load 、saveOrUpdate 、SchemaExport)-7

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);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值