hibernate笔记(一)
一、主配置文件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笔记(一)的更多相关文章
- 框架Hibernate笔记系列 基础Session
标题:框架Hibernate笔记 资料地址: 1. www.icoolxue.com 孔浩 1.背景简介 Hibenate是JBoss公司的产品.它是数据持久化的框架.Usually,我们使用JDBC ...
- hibernate笔记--cascade级联以及inverse属性
cascade : 不管是单向多对一还是一对多,或者是双向的一对多关系,在一的一端映射文件中有一个set标签,在多的一端有many-to-one标签,拿前几篇笔记里讲的Grade和Student举例, ...
- Hibernate 笔记 HQL查询 条件查询,聚集函数,子查询,导航查询
在hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题? 解决方案一,按照Object[]数据取出数据,然后自己组bean 解决方 ...
- Hibernate笔记一
背景 jdbc的优缺点 A:直接操作底层,提供了简单,便捷的访问数据库方法,跨平台比较强,灵活,可以写很多赋值的SQL语句:是最底层的数据库操作,所以效率比较高,Sql语句可以自己选择写,采用效率最高 ...
- hibernate笔记--缓存机制之 二级缓存(sessionFactory)和查询缓存
二级缓存(sessionFactory): Hibernate的二级缓存由SessionFactory对象管理,是应用级别的缓存.它可以缓存整个应用的持久化对象,所以又称为“SessionFactor ...
- hibernate笔记--缓存机制之 一级缓存(session缓存)
一级缓存: 又称为session缓存,它和session生命周期相同,周期非常短.是事务级别的缓存: 还是以Book和Category这两个表为例,我们用代码观察一个缓存的存在: 假设现在我要去查询i ...
- hibernate笔记--使用注解(annotation)方式配置单(双)向多对一的映射关系
前面几篇都是介绍的用配置文件来实现实体类到数据库表的映射,这种方式是比较麻烦的,每一个pojo类都需要写一个相应的*.hbm.xml,无疑增加了很多代码量,不过也有优点就是利于维护,为了方便开发,Hi ...
- hibernate笔记--继承映射关系的三种实现方式
单表继承映射(一张表): 假设我们现在有三个类,关系如下: Person类有两个子类Student和Teacher,并且子类都具有自己独有的属性.这种实体关系在hibernate中可以使用单表的继承映 ...
- hibernate笔记--单(双)向的多对多映射关系
在讲单向的多对多的映射关系的案例时,我们假设我们有两张表,一张角色表Role,一张权限表Function,我们知道一个角色或者说一个用户,可能有多个操作权限,而一种操作权限同时被多个用户所拥有,假如我 ...
- hibernate笔记--基于主键的单(双)向的一对一映射关系
上一节介绍的基于外键的一对一映射关系中,在Person表中有一个外键列idCard_id,对应的idCard表的主键id,至于基于主键的一对一映射关系,就是指Person表中抛弃了idcard_id这 ...
随机推荐
- python安装zlib一直无效
一直按网上的方法: 1.先安装 apt-get install zlib1g-dev 2.重新安装python(3.3):即是./configure 再make再make install 始终没有解决 ...
- QQ对话代码
<li> <strong class="QQ">客服QQ</strong> <span> <a href="mqqw ...
- Python之路:Python简介
Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间他为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承 ...
- Square(hdu 1511)
题目描述: Problem Description Given a set of sticks of various lengths, is it possible to join them end- ...
- KBMMW SampleService/SampleClient方式传输数据集
马上周末了,趁着下午这会儿回顾一下这几天对旧项目的升级过程,一些重要但不常用的东西记录下来是很有必要的.其中一个项目中对KBMMW的远程数据通讯方式做了改进,利用SampleService/Sampl ...
- utf8格式源代码中的字符串,默认都会当作char来处理,除非用L""符号来修饰
原先QString("mystrr"),现在都不认了,必须都要加上L才行 原先:m_conn->put_HttpProxyAuthMethod("Basic&quo ...
- 【学习】leader特别忙工作到晚上11点左右,组员7点左右下班了,作为leader怎么办?
Ø leader先将自己做的事情罗列出来,选出不属于leader当前职责的工作内容. Ø 将不属于leader职责内容的部分授权给组员(承担更多的责任,职责). Ø 授权时,先考察组员的能力和了 ...
- win7 x64 驱动
原文:win7 x64 驱动 从x86转x64 1.编译环境要为x64 2.修改inf文件 [Manufacturer] %MfgName%=Mfg0,NT,NTia64,NTAMD64 [Mfg0] ...
- repeater一个简单的用法例子
(前台) <asp:Repeater ID="Repeater1" runat="server" onitemdatabound=" ...
- mysql merge table
SELECT COUNT(*) FROM `comment` SHOW CREATE TABLE `comment` CREATE TABLE `comment1` ( `id` INT(8) NOT ...