`

二十二 Hibernate映射文件配置

 
阅读更多
id 主键生成方式
increment Hibernate内部自己做累加,而不是数据库中做累加。

indentity 数据库标示符自增长

squence Oracle常用

hilo 高低位 数据库保存高位字段,Hibernate累加地位字段,新插入数据由这两个字段组成,不会重复。

uuid 生成主键不用访问数据库,Hibernate生成,插入效率很高,主键string类型,查询时候效率不高。

native 根据数据库底层能力选择identity squence hilo

assigned 手工分配主键

select 通过底层触发器生成

foreigh 外键引用作为主键




property属性节点
update 是否允许修改列值,比如用户名可以设为不可修改

insert 是否允许插入列值

formula 计算列表达式定义,列在数据库表中是没有的。

lazy 懒加载,列的懒加载。

unique 是否唯一

not-null 是否允许空

index 索引名

unique-key 多列唯一,多列的unique-key值设为一样即可

length 长度

prescision 精度




Session是非线程安全的,生命周期较短,代表一个和数据库的链接,在bs系统内一般不会超过一个请求
内部维护以及缓存和数据库连接,如果session长时间打开会长时间占用内存和数据库的链接。

SessionFactory是线程安全的,一个数据库对应一个SessionFactory,生命周期长一般在整个系统生命周期内有效;
SessionFactory保存着和数据库连接的相关信息和映射信息,以及Hibernate云心事要用到的一些信息。



 session内部缓存管理与批量更新

session.flush()方法强迫一级缓存和数据库进行同步,如果主键生成方式不是native这类数据库生成的,
那么Hibernate的sql语句在事务提交或者查询操作之前操作,将与数据库的通信延后,不要频繁的进行操作。
如果调用了flush方法,那么就立即进行与数据库的通信。

那么在处理大批量数据插入的时候,会产生内存溢出的情况,因为数据库的通信并不是在一条记录插入后,
而是在事务提交或者事务内部第一次查询的时候,那么一般来说,我们就只能插入20条更新一下数据库的方法。

 
view plaincopy to clipboardprint?
01.for(int i=0;i<10000;i++){   
02.    s.save(user);   
03.    if(i%20 == 0){   
04.        s.flush();   
05.        s.clear();   
06.    }   
07.}  
for(int i=0;i<10000;i++){
    s.save(user);
    if(i%20 == 0){
        s.flush();
        s.clear();
    }
} 

需要及时的提交数据库更新操作和清空缓存。

也可以使用StatelessSession 无状态的session,即不使用缓存。使用方式和session一样。

在处理大批量更新的时候,Hibernate3.0以前只能一条一条更新,在3.0以后可以使用批量更新的hql语句

view plaincopy to clipboardprint?
01.Query query = session.createQuery("update u set birthday = :bd from User as u");   
02.query.executeUpdate();  
Query query = session.createQuery("update u set birthday = :bd from User as u");
query.executeUpdate(); 

但是这种批量更新的方式会清空一级缓存而二级缓存,而且在关联的版本号上可能由些问题。


hql与criteria查询方式补充

查询多个对象select art,user from Article art,User user where art.author.id = user.id and art.id = :id这种方式返回的是Object[],Objectp[0]:article,Object[1]:user。

查询的时候尽量使用get方法,因为get方法会从缓存里找数据,而缺省情况下hql语句是不会将查询结果放入缓存的。

DetachedCriteria离线查询,处理动态查询。

 
view plaincopy to clipboardprint?
01.static List dc(DetachedCriteria dc){   
02.    Session s = HibernateUtil.getSession();   
03.    Criteria c = dc.getExecutableCriteria)s_;   
04.    List rs = c.list();   
05.    s.close();   
06.    return rs;   
07.}  
static List dc(DetachedCriteria dc){
    Session s = HibernateUtil.getSession();
    Criteria c = dc.getExecutableCriteria)s_;
    List rs = c.list();
    s.close();
    return rs;
}
 

调用语句

view plaincopy to clipboardprint?
01.DetachedCriteria dc = DetachedCriteria.forClass(User.class);   
02.String name = request.getParameter("name");   
03.if(name != null){   
04.    dc.add(Restrictions.eq("name",name));   
05.}   
06.List users = dc(dc);  
DetachedCriteria dc = DetachedCriteria.forClass(User.class);
String name = request.getParameter("name");
if(name != null){
    dc.add(Restrictions.eq("name",name));
}
List users = dc(dc); 

就可以完成一个动态添加查询条件的Criteria。



完毕 end!

 

分享到:
评论

相关推荐

    自动生成hibernate映射文件和实体类

    "自动生成 Hibernate 映射文件和实体类" 自动生成 Hibernate 映射文件和实体类是使用 MyEclipse 工具来实现的,这可以大大提高开发效率,减少开发时间。下面将详细介绍如何使用 MyEclipse 自动生成 Hibernate 映射...

    生成hibernate映射文件工具

    总的来说,`生成hibernate映射文件工具`是提高开发效率的重要辅助工具,它使得开发者可以专注于业务逻辑,而非繁琐的手动映射配置。在大型项目中,尤其是数据库结构复杂,表关联关系众多的情况下,这类工具的价值...

    Hibernate 映射文件自动生成

    【压缩包子文件的文件名称列表】:“hibernate映射文件自动生成.doc”很可能是这篇博文的文档形式,其中详细介绍了具体的操作步骤、使用工具或者自定义脚本,以帮助开发者理解并应用自动化的映射文件生成过程。...

    Myeclipse生成Hibernate映射文件

    而MyEclipse作为一款强大的Java集成开发环境,提供了对Hibernate的良好支持,包括自动生成Hibernate映射文件的功能。本文将详细介绍如何在MyEclipse中创建和使用Hibernate映射文件。 首先,理解Hibernate映射文件...

    myeclipse自动生成hibernate映射文件

    Hibernate映射文件是XML格式的文件,它定义了数据库表与Java实体类之间的对应关系,包括字段映射、主键策略、关联关系等。映射文件让开发者无需编写SQL语句,就能通过Java对象进行数据库操作。 2. **MyEclipse ...

    java根据实体类生成Hibernate映射文件

    首先,我们需要了解Hibernate映射文件的基本结构。通常,一个映射文件以`.hbm.xml`为扩展名,它使用XML格式来描述Java类和数据库表的对应关系。映射文件包含了类名、表名、字段及其数据类型等信息。例如: ```xml ...

    build.xml 手写自动生成Hibernate映射文件和配置文件源代码

    build.xml 手写自动生成Hibernate映射文件和配置文件源代码

    hibernate映射文件配置分析及要点

    hibernate 映射文件 配置分析及要点,你还在为配置hibernate 映射文件而发愁吗?这里总结了它的常用元素及属性。session,SessionFactory的应用

    hibernate映射文件生成数据库

    Hibernate映射文件,通常以`.hbm.xml`为扩展名,是Hibernate用来定义Java类与数据库表之间关系的配置文件。它包含了关于实体类与数据库表的字段对应、主键生成策略、关联关系等信息。通过这些映射文件,Hibernate...

    用MyEclipse自动生成hibernate映射文件和实体类

    3. **逆向工程(Hibernate Reverse Engineering)**:选中要映射的数据库表,右键选择`Hibernate Reverse Engineering`,这是MyEclipse提供的将数据库表转换为Hibernate映射文件和实体类的工具。 4. **配置生成选项...

    《Hibernate 各类映射文件与配置文件模板》HibernateMappingConfig.zip

    《Hibernate各类映射文件与配置文件模板》是一个包含多种Hibernate映射和配置示例的压缩包,用于帮助开发者理解和使用Hibernate框架。Hibernate是Java领域的一个流行的对象关系映射(ORM)框架,它允许开发者用面向...

    Hibernate映射文件配置.mhtml

    初次对于Hibernate映射文件的配置,包括对Hibernate的简介还有Hibernate的优点的介绍,封装一个实体Bean,并且对它进行文件的配置和测试

    Myeclipse自动生成Hibernate配置文件及实体类映射ORM

    Myeclipse 自动生成 Hibernate 配置文件及实体类映射 ORM 配置文件 Myeclipse 是一个功能强大的集成开发环境(IDE),它提供了许多实用的功能来简化软件开发过程。在这个示例中,我们将展示如何使用 Myeclipse 自动...

    hibernate的约束文件(核心配置,映射文件)

    此压缩包内有两文件,一个是hibernate的核心配置文件hibernate.cfg.xml,一个是实体映射文件*.hbm.xml,在配置hibernate文件时需要用到头部的约束,还有在配置没提示时需要用到(附带使用方法)。

    hibernate配置文件详解

    --指定 Hibernate 映射文件路径 --&gt; &lt;mapping resource="com/Hibernate/test_products.hbm.xml" /&gt; &lt;/hibernate-configuration&gt; ``` 在该文件中,我们可以看到有多个关键的配置项: * `connection.username`:...

    Hibernate_配置映射文件详解

    Hibernate_配置映射文件详解

    hibernate映射和查询

    在给定的文件中,`Hibernate 第二次课.docx` 可能包含了关于 Hibernate 映射和查询的详细讲解,涵盖了如何配置项目、创建实体类、编写映射文件和执行查询等步骤。`第二章mysql.sql` 文件可能是用于配合 Hibernate ...

    hibernate的映射文件配置

    描述:本文深入解析了Hibernate映射文件配置的核心概念,重点阐述了映射文件的基本结构及其组成部分,包括主键(id)、普通属性(property)等关键元素的配置方法和策略。 ### Hibernate映射文件配置详解 在...

Global site tag (gtag.js) - Google Analytics