关闭

Hibernate对单条记录的增删改查

1763人阅读 评论(0) 收藏 举报
分类:

(hibernate学习笔记系列来自于 “疯狂Java” Hibernate视频学习)

  • 保存用户
    • session.save(person);
    • session.persist(person);
  • 查询用户
    • load(Class theClass,Serializable id)
    • get(Class theClass,Serializable id)
  • 修改用户
    • session.update(person)
    • session.merger(person);
  • 保存或修改用户
    • session.saveOrUpdate(person)
    • merge(person)
  • 删除用户
    • session.delete(person)

增加记录有两种方法,save()和persist();
而persist:坚持; 存留; 固执; 继续存在,所以persist()的名字更加显而易见
save()会返回一个id
而persist()没有返回值
**如果添加的对象指定了id字段,persist会出现异常,而save会忽略id字段的设置**

根据id查询一条记录,方法有两种load()和get()方法
  • load(Class theClass,Serializable id)

    theClass指待查询的持久化类,Serializable id表示表中的第几条记录

  • get(Class theClass,Serializable id)

    get立即查询,而load是延迟查询(用的时候查询)
    load返回的是一个持久化类的代理,等到使用实例的除id之外的字段才查询数据库
    load方法查询id对应的记录不存在时会出现ObjectNotFoundException异常
    get方法查询的记录不存在的时候返回记录为null
    在*.hbm.xml文件里可以使用class标签的lazy属性设置load方法是否立即查询,默认为true,代表延迟查询


方法为update(),merge(),saveOrUpdate()

首先需要了解hibernate中对象存在的三种状态

hibernate中对象的状态.png

update()和merge(),saveOrUpdate()都有两种方式
  • 先查询出一条记录,然后在执行update进行更新数据记录

    改的时候需要事务,所以要用session创建一个transaction对象。
    修改的时刻在session关闭的时候
    
  • 自己new一个对象,然后设置所要更新的字段,其他的字段也要设置为原来的值(否则会变成空),然后设置id的值,这个id必须是数据库中存在的id,否则会出现异常

    在这里我们也可以看出数据库中唯一标识字段应该是一个对象,而不是基本类型,因为基本类型会有默认的值,这样的话如果忘了setId(id),那么就会修改掉id=0的记录
    
  • 利用session.merge(Object o)
    merge()方法会返回o所对应的一个持久化对象,如果o本身就是一个持久化对象,则返回值与o指向的是同一个对象;如果o是一个临时状态(new出来的一个对象),则返回值是一个持久化对象,而与o是不同的。
    对于merge
    如果给定的id不存在就是新增,即使id不存在;
    如果id存在,就是修改。

  • 利用saveOrUpdate()
    根据传递的对象有没有ID来进行新增或修改操作。
    有id就是修改
    没有id就是新增
    如果传递的对象的id在数据库里不存在,则会出错

方法:delete()
用get或者load得到要删除的记录,然后调用delete(Object o);
或者new一个对象,设置id,然后调用delete(),如果id不存在抛出异常

以上的操作都是针对一条记录的增删改查

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场