10 02Hibernate之配置文件与核心类库详解

在整个Hibernate编写的过程之中会生成一些文件并且也使用到了一些新的处理类。

1 配置文件说明

在整个Hibernate里面最为核心的两种配置文件:
(1)Hibernate总配置文件:hibernate.cfg.xml
(2)每一张实体表的配置文件:POJO类名称.hbm.xml(Member.hbm.xml)。
1、Hibernate映射文件(*.hbm.xml
Hibernate是一个ORMapping映射框架,那么所谓的ORMapping指的是对象与数据表的操作进行关联,那么如果当前操作的是一张member表,那么自然简单Java类的名称就应该是Member,而后每一个Member类的组成一定要与数据表结构一一对应,而描述这个对应操作的就是Member.hbm.xml文件。

范例:观察Member.hbm.xml文件的定义

<?xml version="1.0" encoding="utf-8"?>
<!-- 定义的是XML文件的文档结构,必须按照指定的顺序与名称编写文件 -->
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
	<!-- 定义简单Java类的完整名称,通过反射加载 -->
	<!-- 每一个映射文件都要求有一个与之对应的POJO类存在,此文件的作用就是描述POJO类与数据表的字段映射 -->
	<!-- name属性描述的是POJO类,而table属性描述的是这个类对应的数据表 -->
	<!-- catalog表示的是操作的模式名称(数据库名称),一般可以省略 -->
    <class name="org.lks.pojo.Member" table="member" catalog="hedb">
    	<!-- 每一张实体表都一定会包含有一个主键的列,所以此处描述主键列 -->
    	<!-- name描述的在POJO类中的属性名称,type描述的是POJO类属性的类型 -->
        <id name="mid" type="java.lang.String">
        	<!-- 此POJO类的属性与数据表中的列的对应关系 -->
        	<!-- name表示列名称,而length表示的是name列在表中定义的长度 -->
            <column name="mid" length="50" />
            <!-- 表示主键的生成方式,本处使用的是指派模式 -->
            <generator class="assigned"></generator>
        </id>
        <!-- 后面定义的都是类中的属性以及表中的非主键字段的映射关系 -->
        <!-- 此处描述的是映射name类属性以及name数据列的关系 -->
        <property name="mname" type="java.lang.String">
            <column name="mname" length="50" />
        </property>
        <property name="mage" type="java.lang.Integer">
            <column name="mage" />
        </property>
        <property name="msalary" type="java.lang.Double">
            <column name="msalary" precision="22" scale="0" />
        </property>
        <property name="mbirthday" type="java.util.Date">
            <column name="mbirthday" length="10" />
        </property>
        <property name="mnote" type="java.lang.String">
            <column name="mnote" length="65535" />
        </property>
    </class>
</hibernate-mapping>

在Hibernate中针对于主键的生成方式有如下几种:
(1)主键由用户自己输入:assigned
(2)如果主键是由数据表自动负责增长的列,使用:native
(3)如果要想生成一个无重复的十六进制的字符串,使用uuid.hex

2、Hibernate的核心配置文件:hibernate.cfg.xml(只有一个)
(1)一个hibernate.cfg.xml文件里面可以包含有多个*.hbm.xml文件;
范例:hibernate.cfg.xml文件

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools.                   -->
<!-- 此处表示进行Hibernate的配置操作,所有的配置通过Configuration类取得 -->
<hibernate-configuration>
	<!-- 定义Hibernate的连接工厂类,主要负责数据库连接的取得 -->
	<session-factory>
		<!-- 此操作的主要意义在于MyEclipse配置使用,开发无用 -->
		<property name="myeclipse.connection.profile">mysql</property>
		<!-- 数据库的连接方言,如果要修改数据库,修改方言即可 -->
		<property name="dialect">
			org.hibernate.dialect.MySQLDialect
		</property>
		<!-- 数据库的连接密码 -->
		<property name="connection.password">19990821</property>
		<!-- 数据库的连接用户名 -->
		<property name="connection.username">root</property>
		<!-- 数据库的连接地址 -->
		<property name="connection.url">
			jdbc:mysql://localhost:3306/hedb?serverTimezone=UTC
		</property>
		<!-- 数据库的连接驱动程序 -->
		<property name="connection.driver_class">
			com.mysql.cj.jdbc.Driver
		</property>
		<!-- 配置所有的*.hbm.xml文件的路径 -->
		<mapping resource="org/lks/pojo/Member.hbm.xml" />

	</session-factory>

</hibernate-configuration>

在实际的开发环境之中,还需要针对于hibernate.cgf.xml文件进行一些修改:
(1)设置显示执行的SQL语句;

<property name="show_sql">true</property>

(2)格式化现实的SQL语句

<property name="format_sql">true</property>

此时会以缩进的形式显示当前执行的SQL语句。

2 Hibernate操作类

如果从最早的版本开始Hibernate里面只有三个核心的处理类:ConfigurationSessionFactorySession

1、去的配置文件信息:org.hibernate.cfg.Configuration
所有的数据库的连接信息包括映射信息都保存在hibernate.cfg.xml文件里面,而整个Hibernate如果要想执行这些程序,那么自然需要读取此文件,所以Configuration类的主要功能就是将所有的配置信息读取。也就是说如果要想打开数据库连接也需要Configuration类,那么这个类定义有如下的方法:
(1)构造方法:public Configuration()
(2)读取默认资源(hibernate.cfg.xml):public Configuration configure() throws HibernateException
(3)读取指定资源:public Configuration configure(String resource) throws HibernateException

Configuration configuration = new Configuration();
configuration.configure();

在Configuration类里面最为重要的一个方法:
(1)创建SessionFactory:public SessionFactory buildSessionFactory() throws HibernateException
(2)创建SessionFactory:public SessionFactory buildSessionFactory(ServiceRegistry serviceRegistry) throws HibernateException
从Hibernate的4.x开始就出现了一个新的类:org.hibernate.service.ServiceRegistry,这个类的功能主要是进行服务的注册操作,此类的操作可以忽略掉。

ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();

2、数据库的连接管理都有SessionFactory负责管理,而在SessionFactory里面以后需要控制缓存的操作,SessionFactory可以打开新的数据库操作——Session,方法:
(1)打开Session:public Session openSession() throws HibernateException

Session session = sessionFactory.openSession();

3、数据库连接操作对象:org.hibernate.Session
(1)此类负责所有的数据处理操作以及事务控制;
(2)在此类里面定义有如下的操作方法:
|————保存数据:public Serializable save(Object object),返回主键;
|————修改数据:public void update(Object object),问题:没有返回结果;
|————修改数据:public void delete(Object object),问题:没有返回结果;
|————根据ID读取:public <T> T load(Class<T> theClass, Serializable id)
|————根据ID读取:public <T> T get(Class<T> entityType, Serializable id)
|————【@Deprecated】创建Criteria查询:public Criteria createCriteria(Class persistentClass)
|————创建Query查询:public Query createQuery(String queryString)
|————创建并启用一个事务:public Transaction beginTransaction()
|————创建事务:public Transaction getTransaction()

4、事务处理接口:org.hibernate.Transaction
所有的Hibernate操作默认都是不自动提交的,因为自动提交本身就是一个错误,所以Transaction主要负责事务控制,有如下几个控制的操作方法:
(1)事务提交,更新执行:public void commit()
(2)事务回滚:public void rollback()
(3)打开事务:public void begin(),如果使用的是beginTransaction()方法创建的事务,此操作自动执行;

这些类都是在Hibernate开发之中的重点功能类,所以必须要清楚其每一个类的作用,如果可以将核心的方法记住,因为在整个Hibernate里面关注的都是这几个类。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值