如何让我自己的普通程序难懂起来(3)--数据存储框架Hibernate

入职不久,我所了解的数据存储框架周边常用到的有两种:Hibernate和Mybatis。对于这两种框架的区别,简单了解到的是Hibernate较重,学习成本较高,但功能也比Mybatis强大一点。由于对Mybatis不甚了解,没法展开对比。由于自己的业务用的框架是Hibernate,平时总是浅尝则止,了解业务,走读代码的时候遇到DAO层就犯怵。所以这篇主要是想记录我在网上所学到的关于Hibernate框架的一些基础知识,便于理解后续的如何给普通的程序以及Spring框架整合上Hibernate,这样就告别sql了。

Hibernate框架是什么?(截取百度百科中的总结)

POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通实体类。其中有一些属性及其getter setter方法的类,没有业务逻辑。有时可以作为VO(value object)或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的。这篇文章 https://blog.csdn.net/u010772673/article/details/54948815 把JavaEE三层结构说的简短明了。Hibernate所处的位置便是第三层DAO层

学习Hibernate框架,离不开ORM思想。ORM是什么?

Object Relation Mapping(对象关系映射)思想,是让实体类(上述的POJO)中的类属性与数据库中表的字段一一对应。且不需要对数据库表进行CRUD的操作,而是对实体类对象中的属性进行操作。最后通过Hibernate封装了所有CRUD功能的Session对象来处理实体类的对象。不需要我们关注数据库的加载驱动,创建数据库链接,写sql语句,以及为了防止命令注入而创建preparedStatement来执行sql以及得到返回结果。(注:这种一一对应关系可通过配置文件,或者java注释的方式来完成,后面的代码会有展示)

基本概念理清后,开始尝试代码:

平时普通的程序基本上都是如下的操作方式,即使用数据库的最基本步骤:

然而,当使用框架后,为了Hibernate全自动框架带来的便捷,自然使用前的配置要多一些。但记住步骤,也并不繁琐,如下:

第一步:导入依赖。如果不是maven项目的话,有点麻烦,首先要知道hibernate框架运行需要依赖哪些jar包,同时还要手动导入这些jar包到lib下,并添加到build path(也就是java命令运行程序的时候 会有一个set classpath的设置,告诉程序运行所依赖的jar包都去哪找class文件)。但是如果我们使用的maven项目,直接可以在pom配置文件中添加对hibernate的依赖就好,maven会帮助我们下载所需的相关依赖,如下:

External lib中就可看到相关依赖包的下载,除了hibernate核心jar,还能看到其他jar包关于xml解析fasterxml,xml与java对象映射的JAXB,还有关于实体类注解的javax.persistence:

需要一提的是Hibernate并不会帮助下载数据库相关驱动器,用户需要根据自身需求,用什么数据库,pom就添加对应驱动的依赖。我使用的是mysql数据库,所以pom中添加的依赖是:

第二步:创建实体类。公司的项目数据库中的表就没有创建语句,而是靠自动生成。学习了Hibernate,才了解这是他的特性之一。当在配置文件hibernate.cfg.xml中,<property name="hbm2ddl.auto">update</property> 配置为update值时,启动hibernate时会自动检查数据库,更新表结构。当升级Spring框架时,其支持的Hibernate版本也有相应要求,发现数据库中表的生成后,有个别字段的类型就有变化。也是跨版本较大,注释没有限制死,导致默认项有变更出现的坑。这种问题主要是实体类与数据库字段的映射,用户并不需要声明数据库中自动生成的字段类型type,而是通过实体类中的属性类型而定的。当然也可以在映射关系的配置中去强制性声明。一般实体类名称可以叫做***PO类,如下:

第三步:根据PO实体,配置实体类与数据库表字段的关系

下图便是对TaskPO实体类的映射关系配置文件,当然当你的model很多时,一个配置文件中自然可以配置多个类的映射关系。注意,class标签的name属性需要配置的是实体类的全路径,也就是包名加实体类名称。而table对应的就是数据库的表名称。上述讲过,Hibernate有特性可以帮助我们创建表,但注意不能帮我们创建数据库。

第四步:配置Hibernate核心配置文件

核心配置文件中主要配置1)数据库信息如:url,账户,密码等。2)Hibernate相关配置项,如:是否需要自动创建表,是否显示执行sql语句等。3)Hibernate框架只会加载核心配置文件,所以像上述映射关系配置文件同样需要配置在核心配置文件中。且不同于映射配置文件,其名称(hbernate.cfg.xml)与路径(src下)是固定的,也可以代码中指定路径。配置如下:

好,接下来就可以测试以上配置了。如何测试呢?有以下步骤:

1)首先,我们需要Hibernate框架加载其核心配置文件,

2)加载后创建SessionFactory,有了工厂类,便可以得到相应Session,

3)开启事务。

4)相关CRUD操作后把事务提交,并关闭资源。

注意:为什么要手动开启事务呢?这就涉及数据库中的基本概念,数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。最简单的例子就是银行转账了,一个出,一个入,要么全完成,要么全失败。具体代码如下:

执行成功的结果如下,过程中如果核心配置文件中数据库相关信息配置错误会报错。PO对象中主键自增加类型不为int会报错,PO实体类属性与映射关系文件不对应会报错,核心配置文件中数据库方言配置有误也会出现问题等:

后面会继续更新如何用Spring框架与Hibernate整合...TBD

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值