一、主配置文件hibernate.cfg.xml

位置:放在src目录下。

主要包含信息:

一、数据库信息    数据库方言(类的全名) 及 数据库链接信息

1.      数据库方言

2.      数据库连接字符串

3.      数据库驱动类名

4.      数据库名

5.      数据库密码

二、其他配置

比如:

1.	<property name="show_sql">true</property><!-- 是否显示 sql语句-->
2. <property name="format_sql">false</property><!--是否格式化显示sql语句-->
3. <property name="hbm2ddl.auto">update</property><!--创建表的方式-->
<!--
create:在创建前,先删除表
create-drop:启动时创建 程序结束时 删除表在测试不保留数据时 使用
update:一般在项目中使用
validate:带有验证功能
-->

三、导入映像配置文件

<mappingresource="com/xiaohui/hibernate/User.hbm.xml"/>

也可以不用配,在配置文件对象 Configuration 加载主配置文件后通过addClass(Obj.class)方法自动的加载同一目录下的类名.hbm.xml映像配置文件。

示例代码

<session-factory>
<!-- 一、数据库信息 数据库方言(类的全名) 及 数据库链接信息 -->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="connection.url">jdbc:mysql:///hibernate</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<!-- 二、 其他 配置 -->
<property name="show_sql">true</property><!-- 是否显示 sql语句-->
<property name="format_sql">false</property>
<!--
create:在创建前,先删除表
create-drop:启动时创建 程序结束时 删除表在测试不保留数据时 使用
update:一般在项目中使用
validate:带有验证功能
-->
<property name="hbm2ddl.auto">update</property>
<!--三、 导入配置文件
<mapping resource="com/xiaohui/hibernate/User.hbm.xml"/>
-->
</session-factory>

二、映像配置文件 类名.hbm.xml

位置:和对用的类在同一目录下。

信息包含  需要映射的类的全名,以及映射到数据库的表名。类的属性名,表的字段名(不设置默认和类的属性名 一致。当属性名为数据库的关键字时,需要用 ` 反单引号括起来)字段名 包含普通字段(如:int,Integer,String,Date,boolean,byte[]),以及自定义对象。

如:

<hibernate-mapping package="org.hibernate.test.extendshbm">
<class name="com.xiaohi.c_hbm_property.Person" table="person">
<id name="id" type="int" column="id">
<generator class="increment"/>
</id>
<!-- 类属性名 类型小写 对应的表列名 -->
<property name="name" type="string" not-null="true" length="30"/>
<property name="birthday" not-null="true" type="date" />
<property name="gender" not-null="true" type="boolean"/>
<property name="desc" not-null="true" type="text" column="`desc`" length="5000"/>
<property name="photo" not-null="true" type="binary" length="51200"/>
</class>
</hibernate-mapping>

一般主键的配置:

<id name="id">
<!-- identity,使用数据库的自动增长,在保存时会忽略手工指定的主键值而由数据库生成
要求此属性要是数字类型
<generator class="identity"/>
-->
<!-- assigned,手工指定,比如指定UUID
<generator class="assigned"/>
-->
<!-- uuid,由Hibernate生成UUID并指定为主键值,要求此属性要是String型
<generator class="uuid"/>
-->
<!-- hilo,高低位算法生成主键,需要用到一个额外的表,所有的数据库都可以使用这种类型
<generator class="hilo">
<param name="table">hi_value</param>
<param name="column">next_value</param>
<param name="max_lo">100</param>
</generator>
-->
<!-- native,根据底层数据库的能力选择 identity、sequence 或者 hilo 中的一个 -->
<generator class="native"/>
</id>

组合主键的配置:

<!-- 映射联合主键的配置 -->
<composite-id>
<key-property name="firstName" type="string" />
<key-property name="lastName" type="string" />
</composite-id>

当使用组合主键时,javaBean对象需要实现java.io.Serializable接口。并且在获取对象时,使用session.get(obj.class,obj)方法中obj需要设置联合主键的每一个值(单列主键的 一般直接传id值)

public void getTest(){
Session session = sessionFactory.openSession();
session.beginTransaction();
Person p = new Person();
p.setFirstName("古");
p.setLastName("天乐");
Person user = (Person) session.get(Person.class, p);
System.out.println(user.getFirstName()+":"+user.getLastName()+":"+user.getGender());
session.getTransaction().commit();
session.close();
}

组成关系的映射配置:

<class name="com.xiaohui.hibernate.User" table="user">
<id name="id">
<generator class="native"/>
</id>
<property name="name" type="string"/>
<!-- 组成关系映射 -->
<component name="address" class="com.xiaohui.e_component.Address">
<property name="address"/>
<property name="tel"/>
<property name="zipCode"/> </component>
</class>

生成的表为5个字段 。

hibernate笔记(一)的更多相关文章

  1. 框架Hibernate笔记系列 基础Session

    标题:框架Hibernate笔记 资料地址: 1. www.icoolxue.com 孔浩 1.背景简介 Hibenate是JBoss公司的产品.它是数据持久化的框架.Usually,我们使用JDBC ...

  2. hibernate笔记--cascade级联以及inverse属性

    cascade : 不管是单向多对一还是一对多,或者是双向的一对多关系,在一的一端映射文件中有一个set标签,在多的一端有many-to-one标签,拿前几篇笔记里讲的Grade和Student举例, ...

  3. Hibernate 笔记 HQL查询 条件查询,聚集函数,子查询,导航查询

    在hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题? 解决方案一,按照Object[]数据取出数据,然后自己组bean 解决方 ...

  4. Hibernate笔记一

    背景 jdbc的优缺点 A:直接操作底层,提供了简单,便捷的访问数据库方法,跨平台比较强,灵活,可以写很多赋值的SQL语句:是最底层的数据库操作,所以效率比较高,Sql语句可以自己选择写,采用效率最高 ...

  5. hibernate笔记--缓存机制之 二级缓存(sessionFactory)和查询缓存

    二级缓存(sessionFactory): Hibernate的二级缓存由SessionFactory对象管理,是应用级别的缓存.它可以缓存整个应用的持久化对象,所以又称为“SessionFactor ...

  6. hibernate笔记--缓存机制之 一级缓存(session缓存)

    一级缓存: 又称为session缓存,它和session生命周期相同,周期非常短.是事务级别的缓存: 还是以Book和Category这两个表为例,我们用代码观察一个缓存的存在: 假设现在我要去查询i ...

  7. hibernate笔记--使用注解(annotation)方式配置单(双)向多对一的映射关系

    前面几篇都是介绍的用配置文件来实现实体类到数据库表的映射,这种方式是比较麻烦的,每一个pojo类都需要写一个相应的*.hbm.xml,无疑增加了很多代码量,不过也有优点就是利于维护,为了方便开发,Hi ...

  8. hibernate笔记--继承映射关系的三种实现方式

    单表继承映射(一张表): 假设我们现在有三个类,关系如下: Person类有两个子类Student和Teacher,并且子类都具有自己独有的属性.这种实体关系在hibernate中可以使用单表的继承映 ...

  9. hibernate笔记--单(双)向的多对多映射关系

    在讲单向的多对多的映射关系的案例时,我们假设我们有两张表,一张角色表Role,一张权限表Function,我们知道一个角色或者说一个用户,可能有多个操作权限,而一种操作权限同时被多个用户所拥有,假如我 ...

  10. hibernate笔记--基于主键的单(双)向的一对一映射关系

    上一节介绍的基于外键的一对一映射关系中,在Person表中有一个外键列idCard_id,对应的idCard表的主键id,至于基于主键的一对一映射关系,就是指Person表中抛弃了idcard_id这 ...

随机推荐

  1. c#中使用log4net工具记录日志

    首先,去官网下载log4net工具 链接http://logging.apache.org/log4net/download_log4net.cgi 目前最新的版本 log4net-1.2.15-bi ...

  2. 关于android的坑

    坑1: 使用SQLiteOpenHelper的时候如果建立的表中存在不为空的字段,但是用ContentValues()的方式来插入数据的话恰好没有往这个字段里插入数据,那么执行后市没法往数据库里插入数 ...

  3. C# DES对称加密解密

    /// <summary> /// 加密 /// </summary> /// <param name="str"></param> ...

  4. pip install 出现报asciii码错误的解决

    原因是pip安装python包会加载我的用户目录,我的用户目录恰好是中文的,ascii不能编码.解决办法是: python目录 Python27\Lib\site-packages 建一个文件site ...

  5. [置顶] IT屌丝的离职申请

          各位好,很遗憾在如此关键的时刻和大家说告别.我为金三也付出了近一年的心血,几乎没怎么休过令人舒心的周末,熬了多少夜更不用说,如此的离开,请相信我也非常心痛.       尽管直到现在我的水 ...

  6. 基于visual Studio2013解决C语言竞赛题之0402奇偶求和

      题目 解决代码及点评 这道题考察我们对循环和判断的综合应用 #include <stdio.h> #include <stdlib.h> #include < ...

  7. 用C语言写一个程序,得出当前系统的整形数字长(16位,32位,64位)等,不能使用sizeof()

    #include <iostream>#include <cmath>using namespace std; int main(){ int num = -1; unsign ...

  8. linux配置nfs服务

    简单介绍: unix/linux系统一种远程文件文件夹共享的服务,能够把某一个远程的文件文件夹共享到本地,进而像操作本地文件一样,操作这个远程的文件夹. 比如:a主机作为服务端,共享出来test1这个 ...

  9. Ubuntu 13.04 安装使用clang

    其实很简单,就是用命令即可: apt-get install clang-3.2 clang-3.2-doc 主要说明一点,/usr/bin/c++链接原来指向g++,现在被改变了. $ ls /us ...

  10. 一个库搞定各种分享--ShareSDK

    ShareSDK是为iOS.Android.WindowsPhone提供社会功能的一个组件,开发者只需10分钟即可集成到自己的APP中,它不仅支持分享给QQ好友.微信好友.微信朋友圈.新浪微博.腾迅微 ...