【SSH 基础】浅谈Hibernate--入门篇

Hibernate是什么


      Hibernate是一个轻量级的ORMapping框架

      ORMapping原理(Object Relational Mapping)就是把对象里面的数据和数据库里面的数据,按照一定的规则进行映射的过程。

          

                        


ORMapping基本对应规则:

 

1:类跟表相对应

2:类的属性跟表的字段相对应

3:类的实例与表中具体的一条记录相对应

 

Hibernate的实现方式


                         


Hibernate解决的问题:


    通过上图我们也能发现,Hibernate主要用来实现Java对象和表之间的映射,除此之外还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。

Hibernate的目标是对于开发者通常的数据持久化相关的编程任务中解放出来。   

 

Hibernate可以帮助你消除或者包装那些针对特定厂商的SQL代码,并且帮你把结果集从表格式的表示形式转换到一系列的对象去。


                        


hibernate优点:

1、封装了jdbc,简化了很多重复性代码。

2、简化了DAO层编码工作,使开发更对象化了。

3、移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变hibernate代码。

4、支持透明持久化,因为hibernate操作的是纯粹的(pojo)java类,没有实现任何接口,没有侵入性。所以说它是一个轻量级框架。


下面结合应用实例帮助大家理解:

 

实体类:

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. import java.util.Date;  
  2. public class User {  
  3.   
  4.     private String id;  
  5.     private String username;  
  6.     private String userpassword;  
  7.     private String createTime;  
  8.     private String expireTime;  
  9.   
  10.     public String getId() {  
  11.         return id;  
  12.     }  
  13.     public void setId(String id) {  
  14.         this.id = id;  
  15.     }  
  16.     public String getUsername() {  
  17.         return username;  
  18.     }  
  19.     public void setUsername(String name) {  
  20.         this.username = name;  
  21.     }  
  22.     public String getUserpassword() {  
  23.         return userpassword;  
  24.     }  
  25.     public void setUserpassword(String password) {  
  26.         this.userpassword = password;  
  27.     }  
  28.     public String getCreateTime() {  
  29.         return createTime;  
  30.     }  
  31.     public void setCreateTime(String createTime) {  
  32.         this.createTime = createTime;  
  33.     }  
  34.     public String getExpireTime() {  
  35.         return expireTime;  
  36.     }  
  37.     public void setExpireTime(String expireTime) {  
  38.         this.expireTime = expireTime;  
  39.     }  
  40. }  

创建hibernate映射文件User.hbm.xml

映射文件告诉Hibernate它应该访问数据库里面的哪个表(table)和应该使用表里面的哪些字段(column)。

因为这里只有一个Class ---User和一个Table --- t_user,你只需要建立一个映射文件---User.hbm.xml,来对应User类和t_user表之间的关系。


[html]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <hibernate-mapping package="com.bjpowernode.hibernate">  
  2.     <class name="User" table="t_user">  
  3.         <id name="id">  
  4.             <generator class="uuid"></generator>  
  5.         </id>  
  6.         <property name="username"></property>  
  7.         <property name="userpassword"></property>  
  8.         <property name="createTime"></property>  
  9.         <property name="expireTime"></property>  
  10.     </class>  
  11.       
  12. </hibernate-mapping>  

配置Hibernate描述文件hibernate.cfg.xml

 

Hibernate描述文件可以是一个properties或xml文件,其中最重要的是定义数据库的连接。我这里列出的是一个XML格式的hibernate.cfg.xml描述文件。


[html]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <hibernate-configuration>  
  2.     <session-factory >  
  3.         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
  4.         <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>  
  5.         <property name="hibernate.connection.username">root</property>  
  6.         <property name="hibernate.connection.password">hejingyuan</property>  
  7.         <!-- 方言 -->  
  8.         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>  
  9.         <property name="hibernate.show.sql">true</property>  
  10.         <property name="hibernate.show.format_sql">true</property>  
  11.         <!-- 指定User的映射文件 -->  
  12.         <mapping resource="com/bjpowernode/hibernate/User.hbm.xml"/>  
  13.     </session-factory>  
  14. </hibernate-configuration>  

生成表方法

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.  * 将hbm生成ddl 
  3.  * @author Administrator 
  4.  * 
  5.  */  
  6. public class ExportDB {  
  7.   
  8.     public static void main(String[] args) {  
  9.         //默认读取hibernate.cfg.xml文件  
  10.         Configuration cfg = new Configuration().configure();  
  11.         SchemaExport export = new SchemaExport(cfg);  
  12.         export.create(truetrue);  
  13.     }  
  14. }  

添加用户

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. public static void main(String[] args) {  
  2.         //读取hibernate.cfg.xml文件--缺省默认文件,如果只new的话,会读取porperties  
  3.         Configuration cfg=new Configuration().configure();  
  4.           
  5.         //建立SessionFactory,线程安全的,最好一个数据库创建一次  
  6.         SessionFactory factory=cfg.buildSessionFactory();  
  7.           
  8.         //取得Session,真正要用的时候才去关联connection,这个connection与我们之前学的不同,称为持久化管理器  
  9.         Session session=null;  
  10.         try{  
  11.             session=factory.openSession();  
  12.             //开启事务  
  13.             session.beginTransaction();  
  14.             User user=new User();  
  15.             user.setUsername("张三");  
  16.             user.setUserpassword("123");  
  17.             user.setCreateTime(new Date().toString());  
  18.             user.setExpireTime(new Date().toString());  
  19.               
  20.             //保存User对象  
  21.             session.save(user);  
  22.             //提交事务  
  23.             session.getTransaction().commit();  
  24.               
  25.         }catch(Exception e){  
  26.             e.printStackTrace();  
  27.             //回滚事务  
  28.             session.getTransaction().rollback();  
  29.         }finally{  
  30.             if(session != null){  
  31.                 if(session.isOpen()){  
  32.                     //关闭session  
  33.                     session.close();  
  34.                 }  
  35.             }  
  36.         }  
  37.           
  38.     }  

总结:


      千里之行始于足下,这篇文章仅是迈向Hibernate大道的一个起点。以上只是简单介绍了Hibernate解决的问题,其实Hibernate就是一个转换器,完成对象实例与数据库表的转换,对JDBC访问数据库的代码进行封装,简化了数据访问层繁琐的重复性代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值