返回顶部
首页 > 资讯 > 精选 >Hibernate的重要技术指的是什么
  • 779
分享到

Hibernate的重要技术指的是什么

2023-06-17 21:06:45 779人浏览 独家记忆
摘要

本篇文章给大家分享的是有关Hibernate的重要技术指的是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Hibernate技术有很多值得学习的地方,这里我们主要介绍Hib

本篇文章给大家分享的是有关Hibernate的重要技术指的是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

Hibernate技术有很多值得学习的地方,这里我们主要介绍Hibernate技术的一些强大功能,包括Hibernate技术技术开发流程等方面。

Hibernate技术开发流程:

配置文件:

@.properties格式的

@.xml格式的(常用hibernate.cfg.xml)(放在src下面或者是wen-inf\classes下面)

SessionFactory sf=new Configuration().configure().buildSessionFactory();      或者SessionFactory sf=new Configuration().configure("db.cfg.xml").buildSessionFactory();

编写映射文件:

例如:User.hbm.xml 映射文件的编写有很多内容,可以采用相关的根据自动生成映射文件,在这里就不介绍了

写持久化类:

例如:User.java

在编写DAO之前先写HibernateSessionFactory类

package com.wuxiaoxiao.hibernate;  import org.hibernate.Session;  import org.hibernate.HibernateException;  import org.hibernate.cfg.Configuration;  public class HibernateSessionFactory{  private static final String CONFIG_FILE_LOCATION="/hibernate.cfg.xml";  private static final ThreadLocal threadLocal=new ThreadLocal();  private static final Configuration cfg=new Configuration();  private static org.hibernate.SessionFactory sessionFactory;  //取得session   public static Session currentSession()throws HibernateException{  Session session=threadLocal.get();  if(session==null){     if(sessionFactory==null){        try{         cfg.configuration(CONFIG_FILE_LOCATION);  sessionFactory=cfg.buildSessionFactory();        }catch(Exception e){          System.err.println("%%%Error Creating SessionFactory %%%%");  e.printStackTrace();        }      }  session=sessionFactory.openSession();  threadLocal.set(session);  }  return session;  }   //关闭session   public static void closeSession()throws HibernateException{  Session session=(Session)threadLocal.get();  threadLocal.set(null);  if(session!=null)    session.close();  }  }

threadLocal是thread local variable,为每一个访问它的线程都提供一个变量值的副本,是每一个线程都可以独立的改变自己的副本,而不会和其他线程的副本冲突。ThreadLocal有三个主要的方法:initValue()初始化变量值,get(),set(Object)例子:

public class ConnectionFactory{  private fianl String URL="jdbc:mysql://localhsot/mysatabase";  private static ThreadLocal<Connection> connectionHolder=new ThreadLocal<Connection>(){  public COnnection initValue(){  try{  return DriverManager.getConnection(URL);}catch(Exception e){}  }  };  public Connection getConnection(){  return connectionHolder.get();  }  }

编写DAO例如:

public User getUser(String username)throws HibernateException{  Session session=null;  Transaction tx=null;  User user=null;  try{  session=HibernateSessionFactory.currentSession();  tx=session.beginTransaction();  Query query=session.createQuery("from User where username=?");  query.setString(0,username.trim());  user=(User)query.uniqueResult();  query=null;  tx.commit();  }catch(HibernateException e){throw e;  }finally{  if(tx!=null)    tx.rollback();  HibernateSessionFactory.closeSession();  }  return user;  }

编写service类

public boolean valid(String username,String passWord){}

下面主要介绍session操纵数据库@对象的状态:

Hibernate定义并支持下列对象状态(state):

瞬时(Transient) - 由new操作符创建,且尚未与Hibernate Session 关联的对象被认定为瞬时(Transient)的。瞬时(Transient)对象不会被持久化到数据库中,也不会被赋予持久化标识(identifier)。 如果瞬时(Transient)对象在程序中没有被引用,它会被垃圾回收器(garbage collector)销毁。 使用Hibernate Session可以将其变为持久(Persistent)状态。(Hibernate会自动执行必要的sql语句)

持久(Persistent) - 持久(Persistent)的实例在数据库中有对应的记录,并拥有一个持久化标识(identifier)。 持久(Persistent)的实例可能是刚被保存的,或刚被加载的,无论哪一种,按定义,它存在于相关联的Session作用范围内。 Hibernate会检测到处于持久(Persistent)状态的对象的任何改动,在当前操作单元(unit of work)执行完毕时将对象数据(state)与数据库同步(synchronize)。 开发者不需要手动执行UPDATE。将对象从持久(Persistent)状态变成瞬时(Transient)状态同样也不需要手动执行DELETE语句。

脱管(Detached) - 在数据库中存在记录,但不与session关联!与持久(Persistent)对象关联的Session被关闭后,对象就变为脱管(Detached)的。 对脱管(Detached)对象的引用依然有效,对象可继续被修改。脱管(Detached)对象如果重新关联到某个新的Session上, 会再次转变为持久(Persistent)的(在Detached其间的改动将被持久化到数据库)。 这个功能使得一种编程模型,即中间会给用户思考时间(user think-time)的长时间运行的操作单元(unit of work)的编程模型成为可能。 我们称之为应用程序事务,即从用户观点看是一个操作单元(unit of work)

@使用sve()保存对象,使之成为持久化

Session session=HibernateSessionFactory.currentSession();  User user=new User();  user.setName("wuxiaoxiao");  user.setPassword(123456);  session.save(user);

@使用load()装在对象

User user=(User)session.load(User.class,new Integer(1));

若对象不存在就会抛出无法修复的异常

@使用get()装在对象

User user=(User)session.get(User.class,new Integer(4));

若对象不存在的话,就返回null @使用flush()强制提交刷新

User user=(User)session.get(User.class,new Integer(4));  user.setUsername("ranran");  user.setPassword("123456");  session.flush();

对user的更新是在同一个session中,不需要用update()或者saveOrUpdate()

@使用delete()移除持久化对象

User user=(User)session.get(User.class,new Integer(4));  session.delete(user);  session.flush();

@使用update()方法提交托管状态的对象

update()用于根据给定的托管对象实例的标示更新对应的持久化实例!如果传入一个持久化对象,那么update()方法就是多余的。如果传入临时状态的对象就会出错,除非认为的给临时地给对象指定一个id。不管传入的是什么状态的对象,数据库中必须要有一条记录与这个对象的id相对应,否则抛出异常!

@saveOrUpdate()传递的对象在数据库中若存在就更新,否则就插入!他和update()主要是处理托管状态的对象!

@使用refresh()强制装在对象,如果数据库中使用了触发器来处理对象的而某些属性,这个方法就更有用了!

session.save(user);  session.flush();  session.refresh(user);

使用Transaction管理事务

例子:如上面编写DAO的例子 使用Query进行HQL查询 @不带参数的查询

Query query=session.createQuery("from User");

@带参数的查询

Query query=session.createQuery("from User where username=:username");  query.setString("username","wuxiaoxiao");  或者  List names=new ArrayList();  names.add("wuxiaoxiao");  names.add("ranran");  Query query=session.createQuery("from User where username in (:namelist)");  query.setParameterList("namelist",names);  或者  Query query=session.createQuery("from User where username=?");  query.setSrting(0,"wuxiaoxiao");

@取得list结果集

List list=query.list();

@取得迭代列表结果集

Iterator iterator1=query.iterator();  或者  Iterator iterator2=query.list().iterator();  while(iterator.hasNext())   User user=(User)iterator2.next();

@取得一个对象

Query query=session.createQuery("from User where username=?");  query.setString(0,"wuxiaoxiao");  User user=(User)query.uniqueResult();

@标量查询

Iterator results = sess.createQuery(          "select user.name,count(user.email) from User user " +          "group by user.name")          .list()          .iterator();            while ( results.hasNext() ) {      Object[] row = (Object[]) results.next();      String type = (String) row[0];      Integer count = (Integer) row[1];      .....  }

@分页查询

Query q = sess.createQuery("from DomesticCat cat");  q.setFirstResult(20);  q.setMaxResults(10);  List cats = q.list();

@创建sql查询

使用Criteria进行条件查询

以上就是Hibernate的重要技术指的是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: Hibernate的重要技术指的是什么

本文链接: https://lsjlt.com/news/293279.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Hibernate的重要技术指的是什么
    本篇文章给大家分享的是有关Hibernate的重要技术指的是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Hibernate技术有很多值得学习的地方,这里我们主要介绍Hib...
    99+
    2023-06-17
  • Hibernate指的是什么
    小编给大家分享一下Hibernate指的是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Hibernate是什么?从不同角度的解释:1、它是连接 Java 应用程序和关系数据库的中间件。2、它对 JDBC API 进行...
    99+
    2023-06-17
  • html5指的是什么技术
    这篇文章将为大家详细讲解有关html5指的是什么技术,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。html5是构建Web内容的一种语言描述方式,而在广义论及HTML5时,实际指的是包括HTML、CSS和J...
    99+
    2023-06-14
  • ai指的是什么技术
    这篇文章将为大家详细讲解有关ai指的是什么技术,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。ai技术是新兴科学技术,AI技术的研究领域包括机器人、语言识别、图像识别、自然语言处理和专家系统等。AI的目的就...
    99+
    2023-06-06
  • Hibernate延迟加载技术是什么
    这篇文章主要讲解了“Hibernate延迟加载技术是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate延迟加载技术是什么”吧!Hibernate延迟加载的对象:◆hiber...
    99+
    2023-06-17
  • HTML5开发中最重要的技术点是什么
    这篇文章将为大家详细讲解有关HTML5开发中最重要的技术点是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   什么是HTML5?   HTML5是最新的HTML...
    99+
    2024-04-02
  • Java分布式开发技术中路径的重要性是什么?
    Java分布式开发是一种广泛应用于现代软件开发的技术,它可以帮助开发人员构建高效、可靠和安全的分布式应用程序。在Java分布式开发中,路径是一个非常重要的概念,它可以帮助开发人员更好地组织和管理项目代码。本文将介绍Java分布式开发技术中...
    99+
    2023-11-07
    path 分布式 开发技术
  • 为什么ASP对象开发技术中的缓存是如此重要?
    ASP(Active Server Pages)是一种广泛使用的Web应用程序框架,它主要用于创建动态Web页面和Web服务。在ASP开发中,缓存是一项非常重要的技术。本文将探讨为什么ASP对象开发技术中的缓存是如此重要,并演示如何在ASP...
    99+
    2023-08-15
    对象 开发技术 缓存
  • 美国云服务器的主要技术是什么
    美国云服务器的主要技术包括虚拟化技术、分布式存储技术、自动化管理技术等。虚拟化技术使多个虚拟服务器可以在同一台物理服务器上运行,提高...
    99+
    2024-04-09
    美国云服务器 云服务器
  • 云服务器技术指标是什么
    云服务器技术指标包括但不限于以下几个方面: 可用性:云服务器能否在任何时间、任何地点为用户提供可靠的计算服务,是衡量云服务器可靠性的重要指标。 可靠性:云服务器的可靠性由多种因素影响,如硬件设备的稳定性、网络带宽的充裕程度、数据备份和恢...
    99+
    2023-10-26
    技术指标 服务器
  • Java、Git和npm:哪个是最重要的开发技术?
    在现代软件开发领域,Java、Git和npm都是非常重要的技术。它们各自具有独特的优点和功能,但哪一个是最重要的呢?本文将从几个方面进行比较,以帮助您更好地了解这些技术。 Java是一种广泛使用的编程语言,它的主要优点是可移植性、性能和安全...
    99+
    2023-08-01
    git 开发技术 npm
  • InnoDB的Checkpoint技术是什么
    InnoDB的Checkpoint技术是什么?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!一句话概括,Checkpoint...
    99+
    2024-04-02
  • 选择网站空间的重要指标是什么
    选择网站空间的重要指标包括: 存储空间:网站空间的存储空间决定了网站能够存储的文件、数据、图片等内容的数量和大小。根据网站的需求...
    99+
    2024-04-18
    空间
  • 在 PHP 面试中,索引技术的重要性是怎样的?
    随着网站访问量的增加,数据库中的数据也会越来越多,如何高效地查询数据成为了一个重要的问题。在这个问题中,索引技术的重要性不言而喻。在 PHP 面试中,了解索引技术的相关知识,可以帮助我们更好地处理数据,提高程序的性能。那么,索引技术到底是...
    99+
    2023-08-19
    面试 索引 开发技术
  • 存储是 Python Django 开发技术中的重要环节吗?
    Python Django 是一种流行的 Web 开发框架,它使用 Python 编程语言,为开发人员提供了一种快速、高效、可扩展的方式来创建 Web 应用程序。在 Django 中,存储是一个非常重要的环节,因为它涉及到如何存储和检索数...
    99+
    2023-06-19
    django 开发技术 存储
  • ajax重构指的是什么
    这篇“ajax重构指的是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ajax重构指的...
    99+
    2024-04-02
  • Golang在后端技术领域的重要性
    Golang在后端技术领域的重要性 随着互联网技术的发展和应用范围的不断扩大,后端开发在整个软件开发流程中扮演着越来越重要的角色。而在后端开发中,选择一种高效、稳定、易于维护的编程语言...
    99+
    2024-03-06
    golang 重要性 后端技术 并发请求 标准库
  • 硬盘的主要技术指标有哪些
    硬盘的主要技术指标有:1.单碟容量;2.硬盘转速;3.数据读取速度;4.数据传输速率;硬盘的主要技术指标有以下几点:单碟容量硬盘是由一个或者几个碟片组成的,其单碟容量越高,表示碟片的集成度越高,则硬盘的性能越好。硬盘转速硬盘的转速越高,其读...
    99+
    2024-04-02
  • Redis的分片技术是什么
    小编给大家分享一下Redis的分片技术是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!redis分片什么意思?Redis的分...
    99+
    2024-04-02
  • Android中的HOOK技术是什么
    目录1. 什么是 Hook2. Hook的应用场景3. Hook的技术方式或框架4. Hook的一般步骤和技巧实战1. 什么是 Hook Hook 英文翻译过来就是「钩子」的意思,那...
    99+
    2023-02-17
    Android HOOK技术 Android HOOK框架
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作