前言

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

 
 
  
 
     
         
        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 + "]"; 
 } 
  
}

编写测试类

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

 
 
  
 
     
     
         
        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. 我们hibernate.cfg.xml配置文件中这个括hibernate.是可以省略

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

Save和Persist的区别

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

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

结语

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