文档章节

hibernate映射文件详解:xxx.hbm.xml文件详解

chenyansong22
 chenyansong22
发布于 2015/10/05 08:52
字数 1066
阅读 87
收藏 0

一般一个映射文件对应于一个class,即对应于一张表。但是一个映射文件中可以有多个class

 

<hibernate-mapping package="cn.it.domain">

<!-- name)哪个类,如果在<hibernate-mapping package指定了包名,那么在class         中就不用指定包名,直接写User就行了,一般写出来

    (table)    对应于哪个表:这里可以不写,默认是类的简单名称

 

 -->

    <class name="User" table="t_user">

        <id name="id" column="id">

            <generator class="native"/>

        </id>

        <property name="name" column="name"/>

    </class>

   

</hibernate-mapping>

 

<hibernate-mapping package="cn.itcast.c_hbm_property">

   

    <!-- name属性:哪个类

         table属性:对应哪个表,如果不写,默认的表名就是类的简单名称

    -->

    <class name="User" table="t_user">

        <id name="id" type="int" column="id">

            <generator/>

        </id>

        <!-- 普通的属性(数据库中的基本类型,如字符串、日期、数字等)

            name属性:对象中的属性名,必须要有。

            type属性:类型,如果不写,Hibernate会自动检测。

                可以写Java中类的全名:java.lang.String

                或是写hibernate类型:string 小写,推荐使用

            column属性:对应表中的列名,如果没有,默认为属性名。

            length属性:长度,不是所有的类型都有长度属性,比如varchar有,但int没有,如果不写默认为255

            not-null属性:非空约束,默认为false

        -->

        <!--

        <property name="name"/>

         -->

        <property name="name" type="string" column="name" length="20" not-null="true"/>

 

        <property name="age" type="int" column="age_"/>

       

        <property name="birthday" type="date" column="birthday_"/>

       

        <!-- 当列表与关键字冲突时,可以通过column属性指定一个其他的列名。

            或是使用反引号包围起来,在键盘的波浪线下面:·· 建议不使用。

           

            指定使用text类型时,最好再指定length,以确定生成的SQL类型是能够存放指定数量的字符的。

           

        <property name="desc">

            <column name="desc_" length="5000" sql-type="text"/>

        </property>      

         -->

        <property name="desc" type="text" length="5000" column="`desc`" ></property>

        这里是两种方式:一种是将列名写成子元素,一种是将列名写成属性

        <!-- 头像,二进制类型,最好指定长度 -->

        <property name="photo" type="binary" length="102400"></property>

       

    </class>

   

</hibernate-mapping>

 

 

 

 

 

 

 

 

 

对于二进制文件的存取:

// 读取图片文件

        InputStream in = new FileInputStream( "c:/test.png");

        byte[] photo = new byte[in.available()];

        in.read(photo);

        in.close();

// 创建对象实例

        User user = new User();

        user.setName("张三");

        user.setAge(20);

        user.setBirthday(new Date());

        user.setDesc("一大段的说明,此处省略5000字……");

        user.setPhoto(photo);

这样之后将数据放在了数据库中

 

下面是从数据库中取出数据,写入到文件中:

public void testGet() throws Exception {

        Session session = sessionFactory.openSession();

        Transaction tx = session.beginTransaction();

 

        User user = (User) session.get(User.class, 4); // 获取

        System.out.println(user.getId());

        System.out.println(user.getName());

        System.out.println(user.getDesc());

        System.out.println(user.getPhoto());

       

        OutputStream out = new FileOutputStream("c:/copy.png");

        out.write(user.getPhoto());//用流关联,将数据写入到文件中

        out.close();

 

        tx.commit();

        session.close();

 

 

 

 

 

 

 

 

 

 

 

 

==============

主键:

    如果是数字,建议使用包装类型。

 

identity

sequence

hilo

native

assigned

uuid

foreign

...

 

<hibernate-mapping package="cn.itcast.d_hbm_id">

   

    <class name="User" table="t_user">

       

        <!-- id元素用于映射主键。

            子元素generator是用于指定主键生成策略的,即:某种生成主键的某种方式,

可能程序员手动指定,可能数据库中自动生成,等等。

         -->

        <id name="id">

            <!-- identity:使用数据库的自动增长策略,不是所有数据库都支持,比如oracle就不支持 ,数据库的自动增长策略时不同的。

            <generator/>

            -->

 

            <!-- sequence:在 DB2PostgreSQLOracleSAP DBMcKoi 中使用序列(sequence

                在使用Oracle数据库时可以使用这一个

            <generator/>

            -->

            以上几种是数据库的自动生成的,我们是不用管的。

            <!-- hilo,使用高低位算法生成主键值。是不依赖数据库的一种方式。

              只需要一张额外表,所有的数据都支持。

            <generator>

                <param name="table">hi_value</param>

                <param name="column">next_value</param>

                <param name="max_lo">100</param>

        </generator>

         像上面写了之后,表将自动创建出来,表名:hi_value,表中的列名:next_value

规律是:n*100+n,即生成的主键是:n*100+n,nnext_value的值

-->

       

        <!-- 根据底层数据库的能力选择 identitysequence 或者 hilo中的一个。

        <generator></generator>

         -->

 

            <!-- increment:由Hibernate维护的自动增长。

                先查询当前最大的id值,再加1使用

                不推荐使用,因为在多线程下会问题。

        <generator></generator>

            -->

           

            <!-- assigned:手工指定主键值 

        <generator></generator>

            -->

 

            <!-- uuid:由Hibernate自动生成UUID并指定为主键值。  -->

        <generator></generator>

 

        </id>

       

        <property name="name"/>

    </class>

   

</hibernate-mapping>

© 著作权归作者所有

chenyansong22
粉丝 0
博文 45
码字总数 13731
作品 0
广州
私信 提问
hibernate小小demo

开发流程: 1 下载并安装Hibernate 2 Hibernate配置文件详解 配置与MySQL数据库的链接与映射文件User.hbm.xml 3 生成映射文件User.hbm.xml 4 编写持久化类User.java 5 编写辅助类HibernateSe...

xiejunbo
2015/04/11
21
0
Java程序员从笨鸟到菜鸟全部博客目录【2012年十一月七日更新】

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 大学上了一年半,接触java也一年半了,虽然中间也有其他东西的学习,但是还是以java为主路线,想想这一年半,...

长平狐
2012/11/12
138
0
Hibernate

org.hibernate.DuplicateMappingException: Duplicate class/entity mapping com.msi.model.User Hibernate 中配置了XXX.hbm.xml 爲什麽總是報上述錯誤 備註:沒有引入過兩個相同的XXX.hbm.x......

十月的星空
2014/04/09
199
1
Java程序员从笨鸟到菜鸟全部博客目录【2012年十一月七日更新】

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 大学上了一年半,接触java也一年半了,虽然中间也有其他东西的学习,但是还是以java为主路线,想想这一年半,...

长平狐
2012/11/12
222
0
Hibernate进行对象的增删改查

首先我们看看hibernate手动配置步骤 (这个了解一点就可以了,以后是不会自己全部手动配置的) 1、 创建WEB项目 2 下载hibernate-release-4.3.11.Final.zip,并解压。 3 将hibernate必须的包...

陈嘻嘻哈哈
2015/12/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
今天
7
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部