ORM:Object/Relationship Mapping 对象/关系映射
实现流程:
1.项目中导入Hibernate相关类包并创建配置文件。Hibernate.cfg.xml(可放在src根目录下):
<session-factory>
<property name="hibernate.connection.username">root</...>
<property name="hibernate.connection.password">123</...>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</...>
<property name="hibernate.connection.url">jdbc:mysql://loaclhost:3306/TABLE?useUnicode=true&characterEncoding=utf-8</...>
<property name="hibernate.dialect">org.hibernate.dialtct.MySQLDialect</...> <property name="show_sql">true</...>
<property name="format_sql">true</...>
<property name="hbm2ddl.auto">assigned</...>
</session-factory>
2.创建持久化类(实体类)(一对多时,在一方添加set集合HashSet用以包含多方,代码略);
3.创建对应映射文件(实体类到数据库)。Grade.hbm.xml(Hibernate5以上可能需要与实体类放在一个包内):
<hibernate-mapping>
<class name="com.entity.Grade" table="GRADES”>
<id name="gid" column="SID" type="java.lang.Integer">
<generator class="increment"></generator>
</id>
<property name="gname" type="java.lang.String">
<column name="GNAME" length="20"></column>
</property>
<property name="amount" type="java.lang.Integer">
<column name="AMOUNT"></column>
</property>
<!-- 一对多需配置set -->
<set name="student"(Grade中属性,实体类)table="STUDENTS">
<key column="gid"></key>
<one-to-many class="com.entity.Student"/>
</set>
</class>
</hibernate-mapping>
上图为一对多点一方配置。实现双向配置时,需在多对一对多端同时添加配置<many-to-one>标签
多对一的映射文件配置:
<many-to-one name="grade"对应属性 class=”com.entity.Grade" column="grade">
</many-to-one>
关于双向级联的补充:
(1)inverse属性:指定关联关系维护方。在one一方的<set>标签中,表示反转;默认为fasle,表示关联关系由one方维护;
保存one方时,one方所包含的many方对象若数据库中不存在,应一同保存,此为级联操作。通过cascade实现。
(2)cascade属性:all所有操作级联;save-update保存和更新时级联操作;delete删除时级联操作;none不级联操作。 在one 方的<set>标签中或many方的<many-to-one>标签中设置。
4.在配置文件中添加映射文件路径:
<session-factory>
.......... <mapping resource="src/com/entity/Grade.hbm.xml"/>
<mapping resource="src/com.entity/Student.hbm.xml"/>
</session-factory>
5.编写查询操作类: //版本不同存在差异4与5
- 利用configuration创建sessionFactory对象;
- 通过sessionFactory创建session对象;
- 通过sessionFactory获取session(openSession方法或getCurrentSession方法);
- 通过session开启transaction事务(beginTransaction方法);
- 操作数据库:sesison.save()/get(Student.class,id)/load()/delete();
- 提交事务:transactoin.commit();
- 关闭session;
Hibernate5.2的session创建:
.....
ssr = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
sessionFactory = new MetadataSources(ssr).buildMetadata().buildSessionFactory();
session = sessionFactory.openSession();
......
操作过程中基本摆脱数据库语句,只是对持久化类操作后进行事务的提交。各版本session创建方法待补充