Hibernate常用api以及增删改查
2019-08-16 12:25:06来源:博客园 阅读 ()
Hibernate常用api以及增删改查
一 、API的定义 所谓的API全称就是(Application Programming Interface,应用程序编程接口)。就是类库对外提供的接口、类、枚举、注解等元素。 如:JDK API帮助文档,可以理解为,JDK对外提供的(接口,类,枚举,注解)元素的帮助文档。 二 、Hibernate的常用API SessionFactory:会 话工厂 Session:会话 Transaction:事务处理类 Configuration:配置类- Configuration类:作用:用于获得框架的信息,构建将会话工厂。
//1.创建一个Configuration的对象 Configuration config=new Configuration(); //2.读取默认路径下的hibernate.cfg.xml配置文件 config.configure();
1.2 获取指定的配置文件
//1.创建一个Configuration的对象 Configuration config=new Configuration(); //2.读取默认路径下的hibernate.cfg.xml配置文件 config.configure("config.xml");2 . SessionFactory接口 作用:类似DataSource。用于管理数据库的连接。 openSession():打开session getCurrentSession():获得当前线程的session(线程绑定) close():关闭会话工厂。
//2.获得Session public static Session getSession(){ return sessionFactory.openSession(); }3 . session接口 :类似JDBC的Statement。用于操作数据库的数据。Session操作是必须先映射,后操作。
方法名 | 作用 |
save() | 保存数据库到数据库 |
saveOrUpdate() | 如果数据库没有记录就保存,如果有记录就更新,重要的判断是OID是否相同,OID(Object ID)就是在配置文件配置为<id>属性。 |
delete() | 用于通过OID删除数据库记录 |
update() | 用于通过OID更新数据的记录 |
load() | 用于通过OID,获得一条记录,有延迟 |
get() | 用于通过OID,获得一条记录,无延迟 |
beginTransaction() | 打开并且启动事务(增删改操作必须,) |
getTransation() | 打开了事务,没有开启。 |
clear() | 清除session所有对象的持久态。 |
close() | 关闭session对象 |
evit() | 清除指定的对象的持久态 |
createQuery() | 获得使用HQL查询的Query对象 |
createSQLQuery() | 获得使用SQL查询的Query对象 |
createCriteria() | 获得标准查询的Criteria对象 |
//增加操作 @Test public void save() { //获取session Session session = HibernateUtils.getSession(); //打开事务 Transaction transaction = session.beginTransaction(); Student student = new Student(); student.setStu_name("张三"); //进行增加操作 session.save(student); session.close(); }
5.2 删除的代码
//删除 @Test public void delete() { Session session = HibernateUtils.getSession(); Transaction transaction = session.beginTransaction(); Student student = new Student(); student.setStu_id(1L); session.delete(student); transaction.commit(); session.close(); }5.3 更新的代码 除了增,. 删,查改都需要通过ID进行操作,就是需要指定了需要更新的那一个项的id。还有内容
//更新 @Test public void update() { Session session = HibernateUtils.getSession(); Transaction transaction = session.beginTransaction(); Student student = new Student(); student.setStu_id(4L); student.setStu_name("赵六"); session.update(student); transaction.commit(); session.close(); }5.4 查找的代码 GET方法进行查找: //查询数据都没有操作数据库,不用开启事务
@Test public void get() { //查询数据都没有操作数据库,不用开启事务 Session session = HibernateUtils.getSession(); Student student = session.get(Student.class, 4L); System.out.println(student.getStu_name()); session.close(); System.out.println(student.getStu_name()); }
Load方法进行查找
@Test public void load() { //查询数据都没有操作数据库,不用开启事务 Session session = HibernateUtils.getSession(); Student student = session.load(Student.class, 4L); System.out.println(student.getStu_name()); session.close(); }两者的区别 相同之处:get方法和load方法都是通过OID获得指定的记录的数据的。 不同之处 GET 1.由于get方法是无延迟的,所以查不到数据直接返回null 2.由于get方法是无延迟的,查询的时候数据已经在对象里面,所以关闭session,数据依然可以使用
session.close();
System.out.println(student.getStu_name());
Load
1. load是有延迟,基于延迟的机制,如果找不到数据就报异常
2. load是有延迟,意味着在对象的时候才去查询数据库。导致在使用对象前关闭数据库,报错。
3. load方法可以通过修改<class lazy="false">修改为无延迟获得数据
正确
System.out.println(student.getStu_name());
session.close();
错误
session.close();
System.out.println(student.getStu_name());
解决方法:在XXX.hbm.xml配置的时候加一条 lazy="false"
<!-- 设置load直接查询。设置class标签的lazy为false -->
<class name="com.sxt.entity.Student" table="tb_student" lazy="false">
原文链接:https://www.cnblogs.com/aknife/p/11337903.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 学习Java 8 Stream Api (4) - Stream 终端操作之 collect 2020-06-11
- Spring WebFlux 学习笔记 - (一) 前传:学习Java 8 Stream Ap 2020-06-11
- Java框架之Hibernate实战篇 2020-06-09
- Java 必须掌握的 12 种 Spring 常用注解! 2020-06-08
- JAVA中常用的类 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash