Hibernate常用api以及增删改查

2019-08-16 12:25:06来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

Hibernate常用api以及增删改查

一   、API的定义 所谓的API全称就是(Application Programming Interface,应用程序编程接口)。就是类库对外提供的接口、类、枚举、注解等元素。 如:JDK API帮助文档,可以理解为,JDK对外提供的(接口,类,枚举,注解)元素的帮助文档。   二 、Hibernate的常用API   SessionFactory:会  话工厂 Session:会话 Transaction:事务处理类 Configuration:配置类    
  1. Configuration类:作用:用于获得框架的信息,构建将会话工厂。
  1.1 获取默认的配置文件
//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对象
    4   .  Transaction   就是用于处理事务。 begin(): 启动 commit():提交 rollback():回滚       5   .  Hibernate的CRUD   在配置好框架的前提下   5.1  增加的代码
//增加操作
     @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 InvocationHandler 与 Proxy 动态代理详解

下一篇:面试官说:来谈谈限流-从概念到实现,一问你就懵逼了?