又瞅了几眼Hibernate,整理下知识点____Hibernate

 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO(我们常说的javaBean)与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

  好吧我承认,以上是百度词条,不过我感觉说的蛮有道理的样子,牛逼之处在于他可以自动生成数据库的各种语句,也就是说理论上你不懂数据库,会JAVA会Hibernate那你也能操控数据库,在一个就是,JDBC能用的地方,都可以用它代替,那么咱们该怎么配置它呢:以我用的IDERA为例:

首先是JAR包(百度搜索吧),一般搜索到的不会给你加上JDBC的mysql-conn那个JAR包,别忘了自己加上,IDEAR可以自动生成一个Hibernate,并且通过表生成映照的类与各种配置文件,然后在自己另定义的类里获得session通过Hibernate操作数据库,然而IDEAR不是最新版本的有各种问题,不晓得是为什么,所以我一般自己配置:

假设建了一个Per'son类

先是,有一个XXX.cfg.xml的配置文件.放在SRC下,


<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    这个session-factory 代表数据库的一个连接 每个session代表一次对数据库的连接
    <session-factory >
        JDBC的老四套:jar包的Driver地址,url,用户名,密码
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
                                                   
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
        <property name="connection.username">root</property>
        <property name="connection.password">111111</property>
                                 <!--方言:  告诉 hibernate 使用什么数据库 底层生成什么sql语句-->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!--可选配置-->
        <!--  update:每次 hibernate启动时检查有没有表 没有就创建
              creat: 每次 hibernate启动时根据映射文件.类 生成表 不管之前有没有
              creat-drop:  每次已关闭就创建表
              validate     会根据映射文件查看持久化类和表的一些关系-->
         <property name="hbm2ddl.auto">update</property>

                    <!--显示内部生成的sql语句-->
        <property name="show_sql">true</property>
                    <!--格式化 sql语句-->
        <property name="format_sql">true</property>

        <!--找到PERSON下那个xml-->
        <mapping resource="com/lanou/domain/Person.hbm.xml"/>
        <mapping resource="com/lanou/student/Student.hbm.xml"/>
    </session-factory >
</hibernate-configuration>

接下来就是与dao层的交互了,接下来的四个步骤,是获取一个session,同时也是建立一个默认名为Person的表格
Configuration configuration = new Configuration();
configuration.configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
sessionFactory.openSession();
  增删改查,除了查询语句,都要开启事物
session里存着好多对象,有三种形态(临时状态->持久化状态->托管状态),持久化状态可以在点击提交事务的时候,被事务里的flush判断一下,是从临时转过来的就发出INSERT语句,如果也是查询出来的本来就是持久化的,就去看看一个存在缓存里叫做快照的东西,由于快照在get对象的时候存在session中,所以可以判断是否对对象作出更改,更改了就UPDATE,没更改就不做 get可以从数据库取数据,取出来是持久化对象,save保存时把临时对象变化为持久化对象,而clear,evict都是把持久化转为托管,值得一提的是Hibernate有session级别的一级缓存,也有sessionFactory级别的二级缓存和查询缓存
最后它还可以有一对一,一对多,双向的一对多,多对多等各种级联操作和关系操作
以一个class和一个Student类为例
cascade: 级联操作
      save-update :在  保存或者更新Clazz 的时候也更新或保存 student
        delete: 级联删除
         all : 级联所有的操作
                        inverse="true": clazz 不维护和 student 之间的关系
<set name="students" cascade="save-update">


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值