iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何理解Hibernate技术
  • 463
分享到

如何理解Hibernate技术

2023-06-15 23:06:57 463人浏览 泡泡鱼
摘要

这篇文章主要介绍“如何理解Hibernate技术”,在日常操作中,相信很多人在如何理解Hibernate技术问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解Hibernate技术”的疑惑有所帮助!接下来

这篇文章主要介绍“如何理解Hibernate技术”,在日常操作中,相信很多人在如何理解Hibernate技术问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解Hibernate技术”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

传统的MVC开发模式

  1. ❝M:Model包括pojo、service、dao。

  2. V:View 包括jsp、html、模块引擎。

  3. C:Controll 包括我们动态网络资源的技术:Servlet。❞

SSH框架在开发中的作用

  • ❝S:Struts/springMVC:  实际上解决的是我们的控制器的问题(简单的可以认为是Servlet的封装)。

  • spring: 整合其余的第三方框架,就是为 Srvice 层提供事务

  • Hibernate:其实就是DAO层的解决方案。❞

Hibernate是什么

Hibernate是一个非侵入式ORMapping框架

  • 非侵入式框架:我们在使用这个框架的时候,不需要继承或者实现这个框架中的类或者接口,这种类型的框架就叫做非侵入式的框架,非侵入式的框架在使用的时候更好的和原有的框架实现了解耦

  • 侵入式框架:我们在使用这个框架的时候,需要继承或者实现这个框架中的某些类或者接口,这种框架叫做侵入式框架

ORMapping解析

  • O:Object

  • R:Relation

  • M:Mapping 映射

  • a.Hibernate能够将Java对象通过映射的关系映射到数据库

  • b.Hibernate能够将数据库的数据通过映射关系映射到Java对象

Hibernate就是能够通过操作Java对象来达到操作数据库的一门技术。

Hibernate能干什么

简单的说:实现数据库的所有操作(CRUD),是原有DAO层的一个解决方案,也是一个替代品。

Hibernate的简单使用

「简单使用:」

导包,将下载下来的required+jpa相关的包放到一个文件里面

在src下面创建hibernate.cfg.xml配置文件

 <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "Http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">   <hibernate-configuration>     <session-factory>         <!--驱动程序-->         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>         <!--访问的URL-->         <property name="hibernate.connection.url">jdbc:Mysql:///qianyu</property>         <!--用户名-->         <property name="hibernate.connection.username">root</property>         <!--密码-->         <property name="hibernate.connection.passWord">root</property>         <!--方言 表示的是告诉Hibernate框架当前 你要生成那个数据库下的sql语句-->         <property name="hibernate.dialect">org.hibernate.dialect.mysql5Dialect</property>         <!--是否自动创建表  create:表示的是每一次 都从新创建  update:表示的是 如果有就不创建 没有就创建-->         <property name="hibernate.hbm2ddl.auto">update</property>                           <!--配置映射文件-->         <mapping resource="com/qy/helloworld/User.hbm.xml"/>              </session-factory>   </hibernate-configuration>

创建Java的类的对象

 public class User implements Serializable{   private static final long serialVersionUID = -6949433888868762441L;   private int uId;    private String userName;    private String userPwd;   public User(int uId, String userName, String userPwd) {   super();   this.uId = uId;   this.userName = userName;   this.userPwd = userPwd;  }   public User() {   super();  }   public int getuId() {   return uId;  }   public void setuId(int uId) {   this.uId = uId;  }   public String getUserName() {   return userName;  }   public void setUserName(String userName) {   this.userName = userName;  }   public String getUserPwd() {   return userPwd;  }   public void setUserPwd(String userPwd) {   this.userPwd = userPwd;  }   @Override  public String toString() {   return "User [uId=" + uId + ", userName=" + userName + ", userPwd=" + userPwd + "]";  }   }

编写测试

@Test  public void testHelloWord() throws Exception {   //引入配置文件   Configuration cfg=new Configuration().configure("hibernate.cfg.xml");   //创建SessionFactory对象   SessionFactory sf=cfg.buildSessionFactory();   //创建会话   Session session=sf.openSession();   //开启事务   session.beginTransaction();   //操作对象      User user=new User(1,"小羽","110");      //开始操作   session.save(user);      //进行事务的提交      session.getTransaction().commit();      session.close();    }

Hibernate中的hibernate.cfg.xml配置文件的详解

<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">   <hibernate-configuration>     <!--配置我们数据库的连接信息的-->     <session-factory>         <!--驱动程序-->         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>         <!--访问的URL-->         <property name="connection.url">jdbc:mysql:///qianyu</property>         <!--用户名-->         <property name="connection.username">root</property>         <!--密码-->         <property name="connection.password">root</property>                           <!--方言 表示的是告诉Hibernate框架当前 你要生成那个数据库下的SQL语句-->         <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>         <!--是否自动创建表  create:表示的是每一次 都从新创建  update:表示的是 如果有就不创建 没有就创建-->         <!--create经常用在测试的环境中-->         <property name="hbm2ddl.auto">update</property>         <!--执行的时候将SQL语句展示出来-->         <property name="show_sql">true</property>         <!--格式化这个SQL语句-->         <property name="format_sql">true</property>                    <!--配置映射文件  配置的是映射文件的-->        <mapping resource="com/qy/helloworld/User.hbm.xml"/>                 <!--使用注解的时候使用的是这一个-->        <!--  <mapping package="com.qy.helloworld"/> -->              </session-factory>   </hibernate-configuration>

Hibernate的xxx.hbm.xml配置文件的详解

<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">  <!--package:一般情况下要进行配置  可以不配置 但是 下面你就要写全路径  auto-import="true":如果不配置的话那么在进行查询的时候必须写类的全路径--> <!--default-lazy:配置整个实体是否支持懒加载  默认就支持懒加载--> <hibernate-mapping package="com.qy.helloworld" default-lazy="true" auto-import="true">      <!--下面配置的是映射关系   将JAVA对象 直接映射到数据库的表里面去          name:表示的是类的名字          table:表示的是当前的这个JAVA类 对应的数据库中的表的名字做是什么 这个名字是可以随便写的 但是一般要见名之意          lazy:当前这个类在进行查询操作的时候  要进行懒加载     -->  <class name="User" table="t_user"  lazy="true">        <!--          id:表示的是主键的映射          name:类中主键的名字          column:主键对应的表的字段          length:确定当前字段的最大长度          type:类型(写的是JAVA中数据类型的全路径)                             注意:类型可以省略:省略之后的类型就和实体中的类型保持一致               length:可以省略  默认就是int的最大范围                 column:这个也可以省略省略之后 默认和类中保持一致                  -->   <id name="uId">       <!--主键自增长                           上面的重点记住           identity:自增长这个表示的意思是:会根据底层的数据库选择自增长的策略           assigned:自己设置这个id的值           foreign:这个表示的是要将别人的主键来作为自己的主键           uuid:通过uuid来生成id主键                               下面的了解           increment:递增(这个跟数据库是有关系的)           native:是递增(跟底层的数据库的方言有关)           sequence:这个表示的是通过表的序列来完成下一个id的生成(oracle数据库)               -->    <generator class="identity"/>   </id>      <!--下面映射的是普通的属性        length:字符串的长度        not-null:当前字段不能为空        type:类型   -->   <property name="userName" column="userName" length="20" not-null="true"/>   <property name="userPwd" length="20" not-null="true" type="java.lang.String"/>    </class>  </hibernate-mapping>

Hibernate中的CRUD的实现

添加数据     session.save(user);     session.persist(user);  修改数据         session.beginTransaction();    //查询数据(积极的加载)   User user=session.get(User.class,1);   //下面支持的是懒加载   user.setUserName("xxxxx");   user.setUserPwd("yyyyy");   session.getTransaction().commit();  数据查询         //查询数据(积极的加载)   User user=session.get(User.class,1);   //下面支持的是懒加载   User user2=session.load(User.class,1);      删除数据         //查询数据(积极的加载)   User user=session.get(User.class,1);   session.delete(user);

Hibernate中的帮助类的编写

public class HibernateUtils {  private static Configuration cfg=null;  private static SessionFactory sf=null;  private static ThreadLocal<Session> threadLocal=null;  static{   //初始化线程的局部变量   threadLocal=new ThreadLocal<Session>();   //加载配置文件   cfg=new Configuration().configure("config/hibernate.cfg.xml");   //生成我们的工厂   sf=cfg.buildSessionFactory();  }      public static Session getSession(){    Session session=threadLocal.get();    if(null==session){     session=sf.openSession();     session.beginTransaction();     threadLocal.set(session);    }    return session;  }      public static void close(){   Session session=threadLocal.get();   if(null!=session){    session.getTransaction().commit();    session.close();    threadLocal.remove();   }  } }

注意事项

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 我们hibernate.cfg.xml配置文件中这个括hibernate.是可以省略

  3. 为什么不开启事务也能查询到数据?是因为默认Hibernate存在只读事务,只读事务是可以完成数据的读的操作的,如果是要完成增删改的话那么就需要读写事务,这个时候就需要开启事务

Save和Persist的区别

  • Save在保存数据的时候,如果id是自增长,你给定id和不给定id都是对的。

  • Persist在保存数据的时候,如果id是自增长的,你给定id是会报错的。

到此,关于“如何理解Hibernate技术”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 如何理解Hibernate技术

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何理解Hibernate技术
    这篇文章主要介绍“如何理解Hibernate技术”,在日常操作中,相信很多人在如何理解Hibernate技术问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解Hibernate技术”的疑惑有所帮助!接下来...
    99+
    2023-06-15
  • Hibernate持久化技术怎么理解
    本篇内容主要讲解“Hibernate持久化技术怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate持久化技术怎么理解”吧!在一般应用程序中,用来实现业务问题实体的(如,在电子...
    99+
    2023-06-17
  • 如何解析Hibernate在JSP下的分页技术
    这篇文章将为大家详细讲解有关如何解析Hibernate在JSP下的分页技术,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。这是我知道的代码最少且最简洁的一种Hibernate分页技术了,自己懒,所以拼命减少...
    99+
    2023-06-17
  • 如何理解SqlSession技术
    这篇文章主要介绍“如何理解SqlSession技术”,在日常操作中,相信很多人在如何理解SqlSession技术问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解SqlS...
    99+
    2024-04-02
  • 如何理解Raid技术
    如何理解Raid技术,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),...
    99+
    2023-06-04
  • 如何理解Java反射技术
    本篇内容介绍了“如何理解Java反射技术”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、前期概要1、 什么是反射Java 反射机制在程序运...
    99+
    2023-06-02
  • 如何理解IPv6过渡技术中的隧道技术
    如何理解IPv6过渡技术中的隧道技术,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。       基于互联网的快速发展,IPv4地址即将使...
    99+
    2023-06-03
  • 如何理解AJAX开发技术
    本篇内容介绍了“如何理解AJAX开发技术”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!AJAX(Async...
    99+
    2024-04-02
  • 如何理解IPv6过渡技术中的NAT-PT技术
    这篇文章将为大家详细讲解有关如何理解IPv6过渡技术中的NAT-PT技术,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。       IPv6的应用是一...
    99+
    2023-06-03
  • 如何理解IPv6过渡技术中的双栈技术
    这期内容当中小编将会给大家带来有关如何理解IPv6过渡技术中的双栈技术,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。       IPv6经过20多年的发展研究实验...
    99+
    2023-06-03
  • 如何理解MySQL的索引技术?
    如何理解MySQL的索引技术?在数据库中,索引是一种提高查询效率的重要技术。MySQL作为一种流行的关系型数据库管理系统,其索引技术的运用能够显著提升查询性能。本文将从索引的定义、类型、创建和优化几个方面来解析MySQL的索引技术。首先,索...
    99+
    2023-10-22
    MySQL 索引技术
  • 如何理解Ubuntu Linux技术应用
    本篇文章给大家分享的是有关如何理解Ubuntu Linux技术应用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。特别值得一提的是Ubuntu有很多值得学习的地方,这里我们主要介...
    99+
    2023-06-17
  • 如何理解Fedora 7配置DNS技术
    如何理解Fedora 7配置DNS技术,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。经过长时间学习Fedora 7配置DNS,Fedora 7配置DNS能提高更方便的使用性能。...
    99+
    2023-06-17
  • Hibernate延迟加载技术是什么
    这篇文章主要讲解了“Hibernate延迟加载技术是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate延迟加载技术是什么”吧!Hibernate延迟加载的对象:◆hiber...
    99+
    2023-06-17
  • 如何快速理解MySQL核心技术?
    如何快速理解MySQL核心技术?MySQL是一种常用的关系型数据库管理系统,广泛应用于各种应用程序和网站开发中。理解MySQL的核心技术对于数据库开发和管理非常关键。本文将介绍一些快速理解MySQL核心技术的方法和建议。首先,了解MySQL...
    99+
    2023-10-22
    MySQL 数据库 核心技术
  • 零拷贝Zero-Copy技术如何理解
    这篇文章将为大家详细讲解有关零拷贝Zero-Copy技术如何理解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 1.前言今天和大家一起学习个底层技术点-零拷贝Zero-Copy。L...
    99+
    2023-06-15
  • 如何理解Linux故障定位技术
    本篇文章为大家展示了如何理解Linux故障定位技术,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。主要是来了解并学习linux中故障定位技术的学习,故障定位技术分为在线故障定位和离线故障定位。故障定位...
    99+
    2023-06-16
  • Hibernate的重要技术指的是什么
    本篇文章给大家分享的是有关Hibernate的重要技术指的是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Hibernate技术有很多值得学习的地方,这里我们主要介绍Hib...
    99+
    2023-06-17
  • 如何理解JVM for Linux JIT诊断技术
    如何理解JVM for Linux JIT诊断技术,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。JVM有很多值得学习的地方,简要介绍Just-In-Time(JIT)编译器...
    99+
    2023-06-17
  • Java内存模型技术该如何理解
    Java内存模型技术该如何理解,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。  因为Java内存模型不仅是Java重点要学习的技术知识,还是面试的时候经典面试题,希望引起同...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作