• 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">
  • 相关阅读:
    OpenGL ES应用开发实践指南:iOS卷
    WCF(1)----服务创建
    算法设计--电路布线问题(分支限界法求解)
    Oracle 删除用户和表空间
    从最简单的源代码开始,切勿眼高手低---(第一波)
    pinyin4j的使用
    ios学习:AVAudioPlayer播放音乐文件及读取ipod库中的音乐文件
    ArcGIS多面体(multipatch)解析——引
    [珠玑之椟]位向量/位图的定义和应用
    搭建自己的XenServer+CloudStack云平台,提供IaaS服务(一)环境搭建
  • 原文地址:https://www.cnblogs.com/aknife/p/11337903.html
Copyright © 2020-2023  润新知