作为SSH三大框架之一的Hibernate,是用来把程序的Dao层和数据库打交道用的,它封装了JDBC的步骤,是我们对数据库的操作更加简单,更加快捷。利用Hibernate框架我们就可以不再编写重复的JDBC代码,不再反复的测试我们的SQL语句写的如何。这里这需要我们简单配置,调用框架给我们提供的方法,就可以完成对数据增删改查的,那么Hibernate到底是个什么样的框架呢?如何使用呢?先看一个关于Hibernate框架的知识体系图:

   这篇博客,我们来总结一下,Hibernate宏观的认识和,环境搭建。

   一,Hibernate到底是什么?

     Hibernate是一个基于元数据的轻量级的ORM框架:

    1,元数据(Meta Data):data about data(数据的数据),也就是说描述一个对象数据,相当于这个对象的上下文环境。

    2,轻量级:占用资源少,没有侵入性。(其实我认为这只是相对而言,如果和Ibatis相比,它到成重量级的了)。

    3,ORM:(Object Relation Mapping)对象关系数据库的映射

    这是Hibernate框架的重点,也就是说将我们程序中的实体(bean,这里也叫POJO)和数据库中的表进行映射。java类型和sql类型映射,面向对象设计和关系型数据库设计的映射,从而我们只需要将更多的精力放到业务中,而不是sql数据库方面。

    4,POJO:(Plain Ordinary Java Object),无格式的普通java对象,也就是上边说的实体,和数据库做映射的简单类。只是在这里提出了一个新的名词而已。

    总而言之,Hibernate就是将我们的数据库表和程序的POJO类进行映射,数据的操作进行了封装,使我们不用把数据库弄得非常精通,我们会面向对象编程就可以了,这样大大提高了我们的编程效率,而且对个人的知识要求也降低了。(Hibernate的设计目的是这样的,可是我觉的要想更好的应用Hibernate,更好的掌握开发的来龙去脉,这是要求我们要有更高的能力了,知其然知其所以然了)

   二,环境搭建:

    1,和前边几个框架的大概流程一样,首先需要我们拷入必备的jar包。jar包的拷入奔着一个够用即可的原则,用什么拷贝什么,当然有些日志输出,单元测试是为了更好的观察框架而拷入的不是必备的。这里讲到是用MySql来进行演示,所以使用了mysql的驱动jar包:

    antlr-2.7.6.jar (生成SQL语句)

    asm.jar(字节码增强工具类)

    c3p0-0.9.1.jar(数据源连接池组件)

    cglib-2.1.3.jar(代理组件,基于继承的)

    commons-collections-2.1.1.jar(集合工具类组件,会进行高效的操作)

    commons-logging-1.0.4.jar(日志输出的转换组件)

    log4j-1.2.11.jar(日志输出组件,更加详细和可以控制输出格式,及目的地)

    dom4j-1.6.1.jar(XML解析)

    ehcache-1.2.3.jar(缓存组件)

    ejb3-persistence.jar(持久化操作的规范jar包)

    hibernate3.jar(框架的核心jar包)

    jta.jar(全局的事务管理)

    junit-3.8.1.jar        (单元测试)

    mysql-connector-java-3.1.13-bin.jar        (MySQL数据库驱动jar包)

    2,引入配置文件:

    hibernate.cfg.xml  Hibernate核心配置文件(包括数据库的连接配置,映射文件的读取等)

    log4j.properties          Log4j的日志输出控制文件

  User.hbm.xml  映射文件(这里的User只是匹配User实体的,一个实体类对应一个此类的映射文件。)

  3,核心配置文件hibernate.cfg.xml的编写:

<hibernate-configuration>
<!-- 构造数据库的连接工厂,这是Hibernate的核心类 -->
<session-factory> <!-- 这里是简单的数据库连接的基本信息,也可以写在配置文件中,或者利用JNDI来调用数据源 -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/example?useUnicode=true&characterEncoding=utf8</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">ljh</property>
<property name="hibernate.connection.password">ljh</property> <!-- 在控制台里打印生成的SQL语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化控制台输出的SQL语句,这两条都是方便我们来学习Hibernate框架 -->
<property name="hibernate.format_sql">true</property> <!--
方言:根据指定的方言与数据库打交道,完成SQL的具有语句生成,因为不同的数据库sql语法还是有区别的,
这里相当于告诉Hibernate框架,我们使用的是什么数据库。
MySQL : org.hibernate.dialect.MySQLDialect
Oracle : org.hibernate.dialect.OracleDialect
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 管理所有的映射资源文件,这里仅仅配置了User类的配置映射文件,应该将我们的所有的映射配置文件设置到这里,这样我们框架才能找到 -->
<mapping resource="com/ljh/hibernate/pojo/User.hbm.xml"/> </session-factory>
</hibernate-configuration>
 

  4,   *.hbm.xml与实体类对应的用来做映射的文件的编写,我觉的这里是重点,设计的知识点比较多。这里简单看一个,后边会总结这里边的语法:

<hibernate-mapping>
<!-- 实体类class和数据库表table的映射 -->
<class name="com.ljh.hibernate.pojo.User" table="t_user"> <!--
id标签用来映射主键字段
name属性表示类的属性
column属性表示表的字段
-->
<id name="usercode" column="usercode" length="20">
<!-- 主键生成策略
native 表示根据连接数据库的表的主键生成方式来生成主键值
mysql数据采用的auto_increment属性来生成主键值,一般主键字段需要设置的类型为int
assigned 表示主键由用户自己维护。
-->
<generator class="assigned"/>
</id> <!-- 普通属性的映射
name 表示类中的属性名称
column 表示表中的列名称 column属性不指定会采用默认的值,默认名称与属性名称一致
length 表示属性的字符长度
not-null 表示属性值不能为null
-->
<property name="userpswd" column="userpswd" type="java.lang.String" length="20" not-null="true"/>
<property name="username" />
<property name="regdate" length="19"/>
<property name="orgtype" length="1"/>
</class>
</hibernate-mapping>

  5,上边已经做好了实体类和数据表的映射了,我们可以通过Hibernate框架提供的方法进行对数据库的数据操作了,简单看一个dao层类的实现:

public void insert(User user) {
//加载配置文件:classpath:hibernate.cfg.xml
Configuration config = new Configuration().configure();
//创建连接工厂
SessionFactory sf = config.buildSessionFactory(); //会话对象,表示与数据库的连接会话过程,相当于jdbc的connection连接对象
Session session = null;
Transaction tx = null ;
try {
//获取会话对象
session = sf.openSession();
//打开事务:Hibernate默认数据操作是不提交事务的,所以我们要手动提交事务。
tx = session.beginTransaction();
//保存对象,持久化操作
session.save(user);
//提交事务
tx.commit();
} catch (Exception e) {
e.printStackTrace();
//事务回滚
tx.rollback();
} finally{
//连接会话关闭
if(session!=null){
session.close();
}
}
}

  这样一看我们的方法写的代码也是挺多了,想说的是这里只是写出了Hibernate框架是从创建sessionFactory对象,然后创建session对象,通过session对象进行对数据库的操作。其实真正的开发中,我们会把这些对象,事务的操作交给框架来管理,我们需要做的就是持久化操作的那些代码,是非常少的。

   综上为Hibernate实现一个简单插入user数据的例子,当然如果数据库关系复杂了,或者更多的设置,后边会进行相关总结。最后来看看Hibernate框架的优缺点吧,当然这些优缺点都是相对而言呢,看用在什么环境下了!

  优点:

  1,轻量级的ORM框架

  2,对JDBC进行了很好的封装,使用了ORM做了映射,那么就可以通过面向对象的方式很容易的操作数据库了。

  3,它还提供了缓存机制,可以提高效率。等

  缺点:

  1,如果对大量的数据进行频繁的操作,性能效率比较低,不如直接使用JDBC。

  总而言之对于框架,我们利用其优秀的一面,避开其不好的一面,使其对我们开发发挥最大的作用即可!!!

最新文章

  1. 使用sklearn进行集成学习——实践
  2. spring+mybatis+springmvc的配置
  3. hadoop namenpde机制
  4. java 24 - 7 GUI之 创建多级菜单窗体
  5. iOS蓝牙开发(一)蓝牙相关基础知识(转)
  6. Transact-SQL的除法问题
  7. 502 Bad Gateway nginx 解决
  8. 【Android Api 翻译1】Android Texting(2)Testing Fundamentals 测试基础篇
  9. append some buttons to the standard datagrid pager bar
  10. view 与layer
  11. Flume简介与使用(一)——Flume安装与配置
  12. 修改hosts使用谷歌服务
  13. HttpClient使用cookie
  14. WinDebug 常用命令表【摘】
  15. Android中的PopupWindow的使用
  16. 表格java代码的相关知识积累
  17. 软考之路(四)---软件project一 概念模型,逻辑模型,物理模型
  18. 使用Kotlin开发第一个Android应用
  19. vue 值的更新
  20. ORA-01555快照过旧报错

热门文章

  1. 《Java程序员面试笔试宝典》之字符串创建与存储的机制是什么
  2. qt绘制设备
  3. Javascript 解构的用处
  4. [HDU 1535]Invitation Cards[SPFA反向思维]
  5. StaggeredGridView+universal-image-loader载入网路图片实现瀑布流
  6. 22. 使用 awk / grep / head / tail 命令进行文本 / 日志分析 (/home/D/acc.log)
  7. CLR via C# - Char_String
  8. 一些基础的.net用法
  9. XMLHttpRequest发送请求
  10. 使用bootstrapvalidator的remote验证经验