• Hibernate!!Session


    Session接口管理一个数据库的任务单元

    session的用法如下:

    Configuration  cfg = new AnnotationConfiguration().configure();
    SessionFactory  sf = cfg.buildSessionFactory();
    Session  session = sf.openSession();
    //session开始事务
    session.beginTransaction();
    session.save(t); //save方法
    //获得事务,并提交
    session.getTransaction().commit();
    session.close();
    sf.close();

    方法(CRUD):

    • save()
    • delete()
    • update()
    • saveOrUpdate()
    • load()
    • get()

    delete():

    在hibernate中,删除数据和添加、查询数据有所不同,因为要删除的对象并不在Session的管理之中,通过Session并不能对其进行删除操作,所以需要将要删除的对象转换为持久状态(persistent),使其处于Session的管理之内,然后再通过delete()方法进行删除。(必须要有ID)

    查询数据

    Session接口提供了两个加载数据的方法,get() 和 load() 方法,有区别:

    get()返回实际对象,总会发出SQL语句。

    load()返回对象的代理,只有在被调用的时候,hibernate才会发出SQL语句去查询对象。

    (新知道的名词:动态代理)

    load():

    public   Object  load ( Class   entityClass ,  Serializable  id)  throws  HibernateException

    entityClass : 持久化对象的类,

    id : 标识

    update():

    • 用来更新detached对象,更新完成后转为persistent对象
    • 更新transient对象会报错
    • 更新自己设定id 的 transient对象可以(数据库有对应的记录)
    • persistent状态的对象只要设定不同字段就会发生更新
    • 更新部分更改的字段
      a)映射文件的xml设定property 标签的 update属性, annotation设定@Column的 updatable属性,不过这种方法很少用,不灵活
      b)使用配置文件的xml中class里面的dynamic-update 属性, JPA1.0 Annotation没有对应的属性,hibernate扩展?(同一个Session可以,跨Session不可以,若想跨Session,在Java代码中可以加入一个merge()方法)
      c)使用HQL(EJBQL)  (建议)

    saveOrUpdate():

    clear():

    • 无论是load 还是 get ,都会首先查找缓存 (一级缓存) , 如果没有,才会去数据库查找 , 调用 clear()方法强制清楚 Session缓存

    flush():

  • 相关阅读:
    误删除pycharm项目中的文件,如何恢复?
    Python/PHP 远程文件/图片 下载
    Python 字节与字符串的转换
    Python中的Json模块dumps、loads、dump、load函数介绍
    Python 连接数据库失败
    Python 模块搜索路径
    Python 操作 PostgreSQL 数据库
    从shell(终端)中退出python
    URL 传参中需要处理的特殊字符
    PHP 命名空间和自动加载
  • 原文地址:https://www.cnblogs.com/Mokaffe/p/4151567.html
Copyright © 2020-2023  润新知