Hibernate知识点总结

Hibernate概念

  • 对JDBC API的封装
  • 完成对象持久化的持久层框架
  • 自动ORM框架-将对象与表的关系使用配置文件映射
    对象-关系映射:一个持久化类和一个表对应
面向对象概念面向关系概念
对象记录
属性

如何创建一个Hibernate项目

  1. 导入相关jar包

  1. 实体类&配置文件

    主配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!--表明解析本XML文件的DTD文档位置,DTD是Document Type Definition 的缩写,即文档类型的定义,
 XML解析器使用DTD文档来检查XML文件的合法性。hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在Hibernate3.1.3软件包中的src\org\hibernate目录中找到此文件--> 
 <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 <!--Hibernate配置文件的根元素,其他文件要包含在其中-->
 <hibernate-configuration>
 <!--SessionFactory是Hibernate中的一个类,这个类主要负责保存Hibernate的配置信息,以及对session的操作-->   
 <session-factory>
    <!--hibernate.dialect 只是Hibernate使用的数据库方言,就是要用Hibernate连接那种类型的数据库服务器。-->
  <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
   <!--配置数据库的驱动程序,Hibernate在连接数据库时,需要用到数据库的驱动程序-->     
  <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
   <!--设置数据库的连接url:jdbc:mysql://localhost:3306/dbname,其中localhost表示mysql服务器名称,此处为本机,    dbname是数据库名-->      
  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/anno?useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false&amp;serverTimezone=UTC</property>
  <!-- 连接数据库时数据的传输字符集编码方式 -->
  <property name="hibernate.connection.characterEncoding">UTF-8</property>
  <!--连接数据库时的用户名-->    
  <property name="hibernate.connection.username">root</property>
   <!--连接数据库时的密码-->     
  <property name="hibernate.connection.password">123456</property>
         
  <!--是否在后台显示Hibernate用到的SQL语句,开发时设置为true,便于差错,
          程序运行时可以在Eclipse的控制台显示Hibernate的执行Sql语句。项目部署后可以设置为false,提高运行效率-->    
  <property name="hibernate.show_sql">true</property>
  <!-- 格式化输出的Sql语句 -->
  <property name="hibernate.format_sql">true</property>
  <property name="hibernate.hbm2ddl.auto">update</property>
  <!-- 使用ThreadLocal管理Session -->  
  <property name="hibernate.current_session_context_class">thread</property>
   <!--指定映射文件,可映射多个映射文件--> 
 <!--  <mapping class="com.test.entity.Product" /> -->
  <mapping resource="com/test/entity/Product.hbm.xml"/>
</session-factory>
</hibernate-configuration> 

持久化类的配置文件:

<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.test.entity">
    <!-- name对应类名,table对应数据库中的表名 -->
 <class name="Product" table="products" lazy="true">
 <!-- 设置主键的映射关系 -->
  <id name="id" column="id" >
   <generator class="identity">
    
   </generator>
  </id>
  
 <!-- 设置除主键外的其他对象-关系的映射
 name对应类中的属性
 colum对应表中的列(字段)
  -->
  <property name="name" column="name" >
  <!-- <column name="" sql-type=""></column> -->
  </property>
        <property name="price" column="price"></property>
        <property name="description" column="description" ></property>
  
  
 </class>
</hibernate-mapping>        

3.主要API

Configuration cfg = new Configuration().configure();//加载配置文件
  SessionFactory factory = cfg.buildSessionFactory();//创建会话工厂
  Session session = factory.openSession();//打开一个会话
  Transaction tran = session.beginTransaction();//开启事务
  tran.commit();//提交事务
  session.close();//关闭会话
  factory.close();//关闭会话工厂

Configuration 配置对象:

  • new Configuration() hibernate将自动加载 hibernate.properties文件( hibernate.properties文件必须存放在类路径(src)下)
  • addResource(String resource) 导入一个指定位置的映射文件
  • addClass(Class clazz) 导入与指定类同一个包中的以类名为前缀,后缀为.hbm.xml的映射文件
  • configure() 将加载src下的hibernate.cfg.xml

SessionFactory工厂:

  • SessionFactory 相当于java web连接池,用于管理所有session
    获得方式:config.buildSessionFactory();
  • 打开一个新的会话 session
    factory.openSession();
  • 获得当前线程中绑定的会话session
    factory.getCurrentSession();

Session 会话:

  • Session 相当于 JDBC的 Connection – 会话
  • 通过session操作PO对象 --增删改查
    save 保存
    update 更新
    delete 删除

Transaction 事务:

  • 开启事务 beginTransaction() : 开启一个新的事物
  • 获得事务 getTransaction() : 获得一个绑定在此线程上的事物
  • 提交事务:commit()
  • 回滚事务:rollback()

对象标识符映射

  • 映射文件中OID的配置:
    在对象-关系映射配置文件中元素的子元素用来设置 OID
  • 标识符生成器:
    1、increment 采用 Hibernate 数值递增的方式
    2、identity 采用数据库提供的自增长方式
    3、assigned 主键由应用逻辑产生

实体之间的关系

  • 一对一联系(1:1)
    学生与身份证的一对一关联(主键关联映射)

主键表:
通过one-to-one元素配置:
1、cascade属性(级联属性)为 all
Student.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.job.oto">
 <class name="Student" table="student">
  <id name="id" column="id">
   <generator class="native"></generator>
  </id>
  <property name="name" column="name"></property>
  <one-to-one name="idCard" class="IdCard" cascade="all"></one-to-one>
 </class>
</hibernate-mapping>

外键表:
通过one-to-one元素配置:
1、constrained 属性为 true,表明 idcard 表 ID 为外键,参照主表(student);
2、外键表实体类配置文件中 OID 使用 foreign 生成策略;
idcard.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.job.oto">
 <class name="IdCard" table="idcard">
  <id name="id" column="id">
   <generator class="foreign">
   <param name="property">student</param>
   </generator>
  </id>
  <property name="idNo" column="idNo"></property>
  <one-to-one name="student" class="Student" constrained="true"></one-to-one>
 </class>
</hibernate-mapping>
  • 一对多联系(1:n)
    学生与角色是一对多关联:

Student.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.job.otm">
 <class name="Student" table="student">
  <id name="id" column="id">
   <generator class="identity"></generator>
  </id>
  <property name="name" column="name"></property>
  <set name="roles" cascade="delete">
  <key column="sid"></key>
  <one-to-many class="Role"/>
  </set>
 </class>
</hibernate-mapping>

set元素属性:
1、name属性:指定要映射的属性名;
2、cascade级联操作属性:save-update、delete、all、none
set元素的子元素:
1、key元素:column 属性设定所关联类对应表的外键;
2、one-to-many元素:class 属性设定所关联的类
Role.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.job.otm">
 <class name="Role" table="role">
  <id name="id" column="id">
   <generator class="identity"></generator>
  </id>
  <property name="name" column="name"></property>
  <many-to-one name="student" class="Student" column="sid"></many-to-one>
 </class>
</hibernate-mapping>

many-to-one元素的属性:
1、name 属性:指定需映射的属性名;
2、column 属性:指定ORDER中的外键列名;
3、class 属性:指定所关联的类型

  • 多对多联系(m:n)
    学生与课程是多对多关联:

Course.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.job.mtm">
 <class name="Course" table="course">
  <id name="id" column="id">
   <generator class="increment"></generator>
  </id>
  <property name="name" column="name"></property>
  <property name="cno" column="cno"></property>
  <set name="students" table="student_course" inverse="true">
  <key column="courseid"></key>
  <many-to-many class="Student" column="studentid"></many-to-many>
  </set>
 </class>
</hibernate-mapping>

Student.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.job.mtm">
 <class name="Student" table="student">
  <id name="id" column="id">
   <generator class="increment"></generator>
  </id>
  <property name="name" column="name"></property>
  <property name="sno" column="sno"></property>
  <set name="courses" table="student_course" inverse="false">
  <key column="studentid"></key>
  <many-to-many class="Course" column="courseid"></many-to-many>
  </set>
 </class>
</hibernate-mapping>

set元素属性:
1、name属性:指定类的属性名;
2、table属性:指定多对多关联关系中间表;
3、cascade级联操作属性:save-update、delete、all、none
set子元素:
1、key元素:设定实体类对应表的外键;
2、many-to-many元素中class属性:设定关联类型
inverse属性:
inverse=true 表示被控方,=false 表示主控方;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值