千家信息网

如何理解Hibernate技术

发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,这篇文章主要介绍"如何理解Hibernate技术",在日常操作中,相信很多人在如何理解Hibernate技术问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何理解Hib
千家信息网最后更新 2024年11月26日如何理解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是什么

1.Hibernate是一个非侵入式ORMapping框架

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

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

2.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配置文件

                            com.mysql.jdbc.Driver                  jdbc:mysql:///qianyu                  root                  root                  org.hibernate.dialect.MySQL5Dialect                  update                                                     

创建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配置文件的详解

                                com.mysql.jdbc.Driver                  jdbc:mysql:///qianyu                  root                  root                                    org.hibernate.dialect.MySQL5Dialect                           update                  true                  true                                                                      

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

                                                        

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 threadLocal=null;  static{   //初始化线程的局部变量   threadLocal=new ThreadLocal();   //加载配置文件   cfg=new Configuration().configure("config/hibernate.cfg.xml");   //生成我们的工厂   sf=cfg.buildSessionFactory();  }    /**   * 获取session的玩法   * @Title: getSession      * @Description: TODO   * @param: @return         * @return: Session         * @throws   */  public static Session getSession(){    Session session=threadLocal.get();    if(null==session){     session=sf.openSession();     session.beginTransaction();     threadLocal.set(session);    }    return session;  }    /**   * 关闭Session   * @Title: close      * @Description: TODO   * @param:          * @return: void         * @throws   */  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技术"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0