Hibernate配置文件和映射文件详情

                               Hibernate配置文件和映射文件详情及案例实际运用

Hibernate配置文件:实现Hibernate基础配置,是Hibernate能够友好的与DB进行交互基础;开发时放置在src目录下,命名:hibernate.cfg.xml(hibernate.properties)

<?xml version="1.0" encoding="GBK"?>
<!-- 指定Hibernate配置文件的DTD信息 -->
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<!-- hibernate- configuration是连接配置文件的根元素 -->
<hibernate-configuration>
    <session-factory>

        <!-- 指定连接数据库所用的驱动 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- 指定连接数据库的url,hibernate连接的数据库名 --><!--serverTimezone=UTC:设置时区-->
        <property name="connection.url">jdbc:mysql://localhost/数据库名(?serverTimezone=UTC)</property>
        <!-- 指定连接数据库的用户名 -->
        <property name="connection.username">root</property>
        <!-- 指定连接数据库的密码 -->
        <property name="connection.password">32147</property>
        <!-- 指定连接池里最大连接数 -->
        <property name="hibernate.c3p0.max_size">20</property>
        <!-- 指定连接池里最小连接数 -->
        <property name="hibernate.c3p0.min_size">1</property>
        <!-- 指定连接池里连接的超时时长 -->
        <property name="hibernate.c3p0.timeout">5000</property>
        <!-- 指定连接池里最大缓存多少个Statement对象 -->
        <property name="hibernate.c3p0.max_statements">100</property>
        <property name="hibernate.c3p0.idle_test_period">3000</property>
        <property name="hibernate.c3p0.acquire_increment">2</property>
        <property name="hibernate.c3p0.validate">true</property>
        <!-- 指定数据库方言 -->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <!-- 根据需要自动创建数据表 -->
        <property name="hbm2ddl.auto">update</property>
        <!-- 显示Hibernate持久化操作所生成的SQL -->
        <property name="show_sql">true</property>
        <!-- 将SQL脚本进行格式化后再输出 -->
        <property name="hibernate.format_sql">true</property>
        <!-- 罗列所有的映射文件 -->
        <mapping resource="映射文件路径(包名)/pojoname.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

Hibernate映射文件:实现POJO与DB表格的映射配置; 为了维护方便一般将其放置和相对应的POJO同一目录下,取名为POJOName.hbm.xml。虽然一个映射文件中可以配置多个POJO与数据库表的映射关系但是还是建议一个映射文件中只配置一个POJO与数据库表的映射关系。

Hibernate映射类型
  在对象/关系映射文件中,Hibernate采用映射类型作为Java类型和SQL类型的桥梁。Hibernate映射类型分为2种:内置映射类型和自定义映射类型。
  1、内置映射类型
  Hibernate对所有的Java原生类型、常用的Java类型如StringDate等都定义了内置的映射类型。表1列出了Hibernate映射类型、对应的Java类型以及对应的标准SQL类型。

                                                                            表1 Hibernate内置映射文件类型

Hibernate映射类型

Java类型

标准SQL类型

大小

integer/int

java.lang.Integer/int

INTEGER

4字节

long

java.lang.Long/long

BIGINT

8字节

short

java.lang.Short/short

SMALLINT

2字节

byte

java.lang.Byte/byte

TINYINT

1字节

float

java.lang.Float/float

FLOAT

4字节

double

java.lang.Double/double

DOUBLE

8字节

big_decimal

java.math.BigDecimal

NUMERIC

  

character

java.lang.Character/java.lang.String/char

CHAR(1)

定长字符

string

java.lang.String

VARCHAR

变长字符

boolean/ yes_no/true_false

java.lang.Boolean/Boolean

BIT

布尔类型

date

java.util.Date/java.sql.Date

DATE

日期

timestamp

java.util.Date/java.util.Timestamp

TIMESTAMP

日期

calendar

java.util.Calendar

TIMESTAMP

日期

calendar_date

java.util.Calendar

DATE

日期

binary

byte[]

BLOB

BLOB

text

java.lang.String

TEXT

CLOB

serializable

实现java.io.Serializablej接口的任意Java

BLOB

BLOB

clob

java.sql.Clob

CLOB

CLOB

blob

java.sql.Blob

BLOB

BLOB

class

java.lang.Class

VARCHAR

定长字符

locale

java.util.Locale

VARCHAR

定长字符

timezone

java.util.TimeZone

VARCHAR

定长字符

currency

java.util.Currency

VARCHAR

定长字符

运用hibernate创建数据表时,需考虑实体类与数据表是一对一的关系、一对多的关系、多对多的关系。

案例应用

需求说明:学生、老师、发布信息,管理员进行审核,并分类显示信息。

实体类:(相应的属性的set、get方法)

SystemManager类:

Student类:

Teacher类:

Information类:

InformationCategory类:

分析:

1.Student、Teacher类分别继承SystemManager类

2.Information类通过外键的形式与InformationCategory类、SystemManager类实现多对一的关系

映射文件配置:(建议放置在pojo包里)

SystemManager.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!-- Generated 2019-9-19 11:15:35 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping package="org.znzz.sasu.pojo">
    <class name="SystemManager" table="sys_usr">
        <id name="id" type="int">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="account" type="java.lang.String" length="50" unique="true" not-null="true" column="usr_account" />
        <property name="password" type="java.lang.String" length="64" column="usr_password" />
        <property name="name" type="java.lang.String" length="50" column="usr_name" />
        
        <joined-subclass name="Student" table="sys_usr_student">
            <key column="user_id" />
            <property name="clazz" column="clazz_name" length="20"/>
            <property name="major" column="major_info" length="20"/>
            <property name="phone" column="phone_num" length="11"/>
        </joined-subclass>
        <joined-subclass name="Teacher" table="sys_usr_teacher">
            <key column="user_id"/>
            <property name="workNumber" column="work_num" length="8"/>
            <property name="email" column="email" length="50"/>
        </joined-subclass>
    </class>
</hibernate-mapping>


Information.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<!-- Generated 2019-9-19 11:15:35 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping package="org.znzz.sasu.pojo">
    <class name="Information" table="znzz_info">
        <id name="id" type="int">
            <column name="ID" />
            <generator class="native" />
        </id>
        <property name="title" type="java.lang.String" column="info_title" length="100"/>
        <property name="picture" type="java.lang.String" column="info_picture_file_name" length="100" />
           
        <many-to-one name="author" class="org.znzz.sasu.pojo.SystemManager" column="author_id" />
        <many-to-one name="checker" class="org.znzz.sasu.pojo.SystemManager" column="checker_id" />
        <property name="publishedDate" type="java.util.Date" column="info_date"/>
        <property name="count" type="int" column="read_count" />
        <property name="summary" type="java.lang.String" column="info_summary" />
        <property name="content" type="text" column="info_content" />
        <many-to-one name="category" class="InformationCategory" column="category_id"/>
    </class>
</hibernate-mapping>

InformationCategory.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<!-- Generated 2019-9-19 11:15:35 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping package="org.znzz.sasu.pojo">
    <class name="InformationCategory" table="znzz_info_category">
        <id name="id" type="int">
            <column name="ID" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String" column="c_name" length="20"/>
        <property name="sequence" type="int" column="c_sequence"/>
        <property name="pageModel" type="java.lang.String" column="c_page_model"/>
        <property name="isMenu" type="int" column="c_menu_flag"/>
        <property name="parentId" type="int" column="parent_id" />
    </class>
</hibernate-mapping>

详情解释

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<!-- Generated 2019-9-19 11:15:35 by Hibernate Tools 3.5.0.Final -->
<!-- package代表包名-->
<hibernate-mapping package="">
<!-- name代表的是类名,table代表的是表名 -->
<class name="" table="">
    <!-- name代表的是类中的唯一标识属性,type代表字段类型,column代表的是tableName表中的主键id -->
    <id name="" type="" column="">
          <generator class=""/>
    </id>
    <!-- name表示类的普通属性,column表示表的普通字段,type表示字段类型-->
    <property name="" column="" type="" not-null="" length="" node=""></property>
    <!-- 多对一类映射关系 -->
    <many-to-one name="" column="" class=""></many-to-one>
    <!-- 类与类的继承映射关系 -->
    <joined-subclass table="" name="">
        <key column=""></key>
        <property name="" column="" type="" length=""></property>
    </joined-subclass>
</class>

</hibernate-mapping>
 

                                                                       表2:<property>元素的常用属性

属性名说   明
name持久化类属性的名称,以小写字母开头
column数据表字段名
type数据表的字段类型
length数据表字段定义的长度
lazy指定当持久化类的实例首次被访问时,是否对该属性使用延迟加载,其默认值是 false
unique是否对映射列产生一个唯一性约束。常在产生 DDL 语句或创建数据库对象时使用
not-null是否允许映射列为空

Hibernate配置文件:

hibernate.cfg.xml

<?xml version="1.0"?>
<!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>
        <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/school?serverTimezone=UTC</property>
        <property name="connection.username">root</property>
        <property name="connection.password">password</property>
        

        <!-- SQL dialect  org.hibernate.dialect.MySQL5Dialect -->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        
        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">update</property>

        <mapping resource="org/znzz/sasu/pojo/Information.hbm.xml"/>
        <mapping resource="org/znzz/sasu/pojo/InformationCategory.hbm.xml"/>
        <mapping resource="org/znzz/sasu/pojo/SystemManager.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

 

 

 

 

 

                           

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值