在上篇博客之中,笔者详细介绍了MVC中Struts2原理的相关知识。接下来。笔者依然会在介绍原理的同时结合项目实际,深入浅出的给予MVC中hibernate的相关介绍。
在给项目配置好hibernate后,会有三个文件,即它的pojo包(hibernate reverse engineering反向工程构建),HibernateSessionFactory类以及hibernate.cfg.xml文件。
hibernate调用代码:
Transaction TX = HibernateSessionFactory.getSession().beginTransaction();//事物开启
List<Sys表> TB= HibernateSessionFactory.getSession().createQuery("from Sys表").list();
hibernate原理如下图:
1:configuration config = new configuration.congigure()//加载解析hibernate.cfg.xml文件。
它的执行过程是Transaction TX = HibernateSessionFactory.getSession().beginTransaction(),在HibernateSessionFactory类中会有一个“静态代码块”,加载HibernateSessionFactory类时会执行一次这个静态代码块,config对象的创建就在这个代码块出。(静态这个东西还是挺好用的!)
2:hibernate.cfg.xml加载数据库并通过<mapping resource="com/xx/User.hbm.xml"/>读取并解析映射信息。(对的,就是pojo包里的xxx.hbm.xml文件)
3:ORM(对象关系映射)机制将数据库表加载成一个个对象。(你就可以通过操作对象去操作数据库了)
4:创建Sessionfactory(会话工厂),并打开session,进行持久化。(没错,还是这句Transaction TX = HibernateSessionFactory.getSession().beginTransaction())
5:开启事物beginTransaction()。
6:操作对象,操作数据。
7:依次关闭事物,Session,Sessionfactory。
Hibernate作为持久化层,不仅实现的持久化,它的对象关联关系映射的轻量型框架更是让我们以对象的方式去操作数据库,好处不言而喻。(java核心:世间万物一切都为对象)
参考资料详见:http://blog.csdn.net/jiuqiyuliang/article/details/39078749/
https://my.oschina.net/u/1453975/blog/331913
Hibernate反射机制的实现:(此处转载)
CGLIB(code generationlibary)是数据持久层编程框架Hibernate中用到的一种反射机制,它不同于java中的反射机制,是一种更灵活,封装的更好的一种反射机制。
CGLIB的底层实现是依赖于ASM技术的,ASM技术虽然可以在程序运行过程中对类的字节码进行更改,但对于那些对JVM规范不是非常熟悉,精通,对java文件编译后的字节码代表的意义不是很了解的程序员是很难准确应用的,换句话说,就是对应用接口的封装没用从应用的角度来考虑,增加了应用框架的复杂性。CGLIB是在ASM的基础上,提供了更加友好的接口,嵌入到程序中更加方便。
CGLIB技术比java中的反射技术性能更优秀。java中的反射机制只能在程序运行期间动态实现java中的接口。CGLIB不仅可以动态实现接口,还可以实现类,可以对类的方法进行屏蔽,修改。这也是CGLIB中最突出的特点。
代理,反射和元数据是java的三大重要特征。在配合ASM和CGLIB的出色的反射技术,设计出一个优秀的应用框架就只需要看看你的想象力有多丰富了。
如有错误,还望指正!