连Hibernate技术都不清楚,你敢说你自己会ORM框架?

 前言

成都创新互联公司专注于郫都网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供郫都营销型网站建设,郫都网站制作、郫都网页设计、郫都网站官网定制、微信小程序定制开发服务,打造郫都网络公司原创品牌,更为您提供郫都网站排名全网营销落地服务。

ORM框架不是一个新话题,它已经伴随我们很多年了。它提供了概念性的、易于理解的数据模型,将数据库中的表和内存中的对象建立了很好的映射关系。在Java中常用的ORM框架主要有两个:Hibernate和iBatis。本篇文章主要介绍Hibernate的使用方法,后续会出介绍iBatis的文章。

传统的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层的解决方案。

同时可以看下其余框架(SSM、SSS)的含义:

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

 
 
 
 
  1.  
  2. "-//Hibernate/Hibernate Configuration DTD//EN"
  3. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  4.  
  5.     
  6.         
  7.         com.mysql.jdbc.Driver
  8.         
  9.         jdbc:mysql:///qianyu
  10.         
  11.         root
  12.         
  13.         root
  14.         
  15.         org.hibernate.dialect.MySQL5Dialect
  16.         
  17.         update
  18.         
  19.         
  20.         
  21.         
  22.         
  23.     
  24.  

创建Java的类的对象

 
 
 
 
  1.  public class User implements Serializable{
  2.  private static final long serialVersionUID = -6949433888868762441L;
  3.  private int uId;
  4.  
  5.  private String userName;
  6.  
  7.  private String userPwd;
  8.  public User(int uId, String userName, String userPwd) {
  9.   super();
  10.   this.uId = uId;
  11.   this.userName = userName;
  12.   this.userPwd = userPwd;
  13.  }
  14.  public User() {
  15.   super();
  16.  }
  17.  public int getuId() {
  18.   return uId;
  19.  }
  20.  public void setuId(int uId) {
  21.   this.uId = uId;
  22.  }
  23.  public String getUserName() {
  24.   return userName;
  25.  }
  26.  public void setUserName(String userName) {
  27.   this.userName = userName;
  28.  }
  29.  public String getUserPwd() {
  30.   return userPwd;
  31.  }
  32.  public void setUserPwd(String userPwd) {
  33.   this.userPwd = userPwd;
  34.  }
  35.  @Override
  36.  public String toString() {
  37.   return "User [uId=" + uId + ", userName=" + userName + ", userPwd=" + userPwd + "]";
  38.  }
  39.  
  40. }

编写测试类

 
 
 
 
  1. @Test
  2.  public void testHelloWord() throws Exception {
  3.   //引入配置文件
  4.   Configuration cfg=new Configuration().configure("hibernate.cfg.xml");
  5.   //创建SessionFactory对象
  6.   SessionFactory sf=cfg.buildSessionFactory();
  7.   //创建会话
  8.   Session session=sf.openSession();
  9.   //开启事务
  10.   session.beginTransaction();
  11.   //操作对象
  12.   
  13.   User user=new User(1,"小羽","110");
  14.   
  15.   //开始操作
  16.   session.save(user);
  17.   
  18.   //进行事务的提交
  19.   
  20.   session.getTransaction().commit();
  21.   
  22.   session.close();
  23.  
  24.  }

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

 
 
 
 
  1. "-//Hibernate/Hibernate Configuration DTD//EN"
  2. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  3.  
  4.     
  5.     
  6.         
  7.         com.mysql.jdbc.Driver
  8.         
  9.         jdbc:mysql:///qianyu
  10.         
  11.         root
  12.         
  13.         root
  14.         
  15.         
  16.         
  17.         org.hibernate.dialect.MySQL5Dialect
  18.         
  19.         
  20.         update
  21.         
  22.         true
  23.         
  24.         true
  25.           
  26.         
  27.         
  28.        
  29.        
  30.        
  31.         
  32.     
  33.  

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

 
 
 
 
  1.  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  2.  "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  3.     
  4.  
  5.  
  6.      
  7.   
  8.       
  9.    
  10.   
  11.   
  12.   
  13.   
  14.     
  15.  

Hibernate中的CRUD的实现

 
 
 
 
  1. 添加数据
  2.     session.save(user);  
  3.   session.persist(user);
  4. 修改数据
  5.         session.beginTransaction(); 
  6.   //查询数据(积极的加载)
  7.   User user=session.get(User.class,1);
  8.   //下面支持的是懒加载
  9.   user.setUserName("xxxxx");
  10.   user.setUserPwd("yyyyy");
  11.   session.getTransaction().commit();
  12. 数据查询
  13.         //查询数据(积极的加载)
  14.   User user=session.get(User.class,1);
  15.   //下面支持的是懒加载
  16.   User user2=session.load(User.class,1); 
  17.    删除数据
  18.        //查询数据(积极的加载)
  19.   User user=session.get(User.class,1);
  20.   session.delete(user);

Hibernate中的帮助类的编写

 
 
 
 
  1. public class HibernateUtils {
  2.  private static Configuration cfg=null;
  3.  private static SessionFactory sf=null;
  4.  private static ThreadLocal threadLocal=null;
  5.  static{
  6.   //初始化线程的局部变量
  7.   threadLocal=new ThreadLocal();
  8.   //加载配置文件
  9.   cfg=new Configuration().configure("config/hibernate.cfg.xml");
  10.   //生成我们的工厂
  11.   sf=cfg.buildSessionFactory();
  12.  }
  13.  
  14.  /**
  15.   * 获取session的玩法
  16.   * @Title: getSession   
  17.   * @Description: TODO
  18.   * @param: @return      
  19.   * @return: Session      
  20.   * @throws
  21.   */
  22.  public static Session getSession(){
  23.    Session session=threadLocal.get();
  24.    if(null==session){
  25.     session=sf.openSession();
  26.     session.beginTransaction();
  27.     threadLocal.set(session);
  28.    }
  29.    return session;
  30.  }
  31.  
  32.  /**
  33.   * 关闭Session
  34.   * @Title: close   
  35.   * @Description: TODO
  36.   * @param:       
  37.   * @return: void      
  38.   * @throws
  39.   */
  40.  public static void close(){
  41.   Session session=threadLocal.get();
  42.   if(null!=session){
  43.    session.getTransaction().commit();
  44.    session.close();
  45.    threadLocal.remove();
  46.   }
  47.  }
  48. }

注意事项

  1. 我们hibernate.cfg.xml配置文件中这个括hibernate.是可以省略
  2. 为什么不开启事务也能查询到数据?是因为默认Hibernate存在只读事务,只读事务是可以完成数据的读的操作的,如果是要完成增删改的话那么就需要读写事务,这个时候就需要开启事务

Save和Persist的区别

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

结语

本篇关于Hibernate的介绍就先到这里结束了,后续会出更多关于Hibernate系列更多文章,谢谢大家支持!

分享标题:连Hibernate技术都不清楚,你敢说你自己会ORM框架?
网站链接:http://www.gawzjz.com/qtweb2/news17/15767.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联