Hibernate学习---用Session实现CURD
来源:互联网 发布:php soapheader 编辑:程序博客网 时间:2024/06/07 12:16
我们使用Hibernate的目的是什么?对数据库进行操作,所有接下来我们就用Hibernate来进行CURD。
前边我们已经分析过了Configuration,SessionFactory和Session,接下来我们就利用Session对象来进行增删改查:
在进行增删改查之前我们先对SessionFactory和Session进行一些简单的封装:
public class hbnUtil { private static SessionFactory factory; public static Session getSession() { return getSessionFactory().getCurrentSession(); } public static SessionFactory getSessionFactory() { Configuration cfg = new Configuration().configure();//因为SessionFactory是重量级的,所以创建的时候要进行判断 if(factory==null||factory.isClosed()) { factory = cfg.buildSessionFactory(); } return factory; }}
这样以后我们使用到Session实例对象的时候就能够进行直接获取了。
增加操作:
之前配置Hibernate的测试代码便是save操作,即增加一条记录。
还有一个方法也能够增加,叫做persist。
下面这段出自:http://blog.csdn.net/u010739551/article/details/47253881
Hibernate 之所以提供与save()功能几乎完全类似的persist()方法,一方面是为了照顾JPA的用法习惯。另一方面,save()和 persist()方法还有一个区别:使用 save() 方法保存持久化对象时,该方法返回该持久化对象的标识属性值(即对应记录的主键值);但使用 persist() 方法来保存持久化对象时,该方法没有任何返回值。因为 save() 方法需要立即返回持久化对象的标识属性,所以程序执行 save() 会立即将持久化对象对应的数据插入数据库;而 persist() 则保证当它在一个事物外部被调用时,并不立即转换成 insert 语句, 这个功能是很有用的,尤其当我们封装一个长会话流程的时候,persist() 方法就显得尤为重要了。
主要内容区别:
1,persist把一个瞬态的实例持久化,但是并”不保证”标识符(identifier主键对应的属性)被立刻填入到持久化实例中,标识符的填入可能被推迟到flush的时候。
2,save, 把一个瞬态的实例持久化标识符,及时的产生,它要返回标识符,所以它会立即执行Sql insert
删除操作:
public class TestDelete { public static void main(String[] args) { Session session = hbnUtil.getSession(); session.beginTransaction(); Student student = new Student(); student.setId(1); session.delete(student); session.getTransaction().commit(); }}
因为我们指定的主键是id,所以进行删除的时候对主键为1的记录进行删除。
更新操作:
public class TestUpdate { public static void main(String[] args) { Session session = hbnUtil.getSession(); session.beginTransaction(); Student student = new Student("李四",22,65); student.setId(2); session.update(student); session.getTransaction().commit(); }}
查操作:
Session session = hbnUtil.getSession(); session.beginTransaction(); Student student = session.get(Student.class,2); System.out.println(student.toString()); session.getTransaction().commit();
查询还有一个方法叫做load方法(延迟加载),get方法当检索不到时候返回null而load方法会抛出错误。这里我们只需要知道load这个方法存在并且查询不到时会抛出错误就好了,具体的细节我们后面慢慢讨论。
saveOrUpdate:
这个操作当存在id时执行update,当不存在id时执行save。
注意:当增改删在同一个事务的时候,hibernate默认执行顺序是增改删但是可以通过刷新Session缓存来进行分割,对想要先执行的操作进行优先处理。
比如你想先执行删除操作:
session.delete(student);
session.flush();
session.save(“xxx”);
像上面的这种方法就实现了删除优先。
到这里我们的基本增删改查就结束了,关于Hibernate的学习未完待续。
2017-11-17
- Hibernate学习---用Session实现CURD
- Hibernate实现CURD
- Hibernate学习(第一天)--CURD
- Hibernate实现增删查改CURD例子
- Hibernate工具类,实现CURD操作
- Hibernate工具类,实现CURD操作
- 使用Hibernate原生API实现CURD操作
- Hibernate学习过程-1-创建第一个Hibernate-CURD项目
- Hibernate学习07---Hibernate的Session-API实现CRUD
- hibernate学习之 Session
- Hibernate基本概念和CURD
- Hibernate初学之CURD
- Hibernate CURD操作
- CURD操作(hibernate)
- hibernate-2-curd-xml
- hibernate-3-annotation-curd
- hibernate单表curd
- Hibernate的CURD操作
- 汉字Unicode表
- R语言做如何做多元回归分析(逐步回归)之 提取回归结果参数-调整R方,标准化回归系数
- PLSQL Developer报“动态执行表不可访问,本会话的自动统计被禁止”
- cmp
- YTU OJ 3134: 动态规划基础题目之数字三角形(Java解题)
- Hibernate学习---用Session实现CURD
- codeforces790A
- GitHub+hexo+gitment搭建一个具有评论功能的个人博客(入门级)
- 常用的操作符
- 136. Single Number
- SpringMVC(七)国际化
- 并发insert情况下会发生重复的数据插入问题
- MySQL索引
- 数据库学习7