`
wang_zhi_peng2007
  • 浏览: 249134 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate常用

阅读更多
一.对象关系映射基础   
    1.hibernate对象属性映射   
    映射文件中,<property>元素的access属性用于指定Hibernate访问持久化类的属性的方式。有以下两种可选值:   
    property:这是默认值,表示是通过属性相应的get,set方法来访问属性。   
    field:表面是运用Java反射机制直接访问类的属性,此属性可以没有get,set方法。   
    例如:<property name="name" access="field"/>    
    这样设置是直接通过属性值取得,可以没有get,set方法。   
    反之name则是根据set,get后的Name对应,配置文件的name名可以不跟实体bean里的属性名直接对应。   
    我们常用的hql语句例如:List customers = session.find("from Customer as c where c.name = 'Tom'");   
    这里的c.name中的name名字是根据配置文件里的name所对应,并不是和实体bean里的属性名对应。   
  
    2.在持久化类的访问方法中加入程序逻辑   
    (1)hibernate在执行find方法时候会调用bean中的set方法把查询出的内容放入属性中,提供给我们获取其中的值。   
    在执行save,update等方法时候会调用bean中的get方法获得我们提交的数据进行持久化操作。   
    所以,可以通过在set,get方法中加入相应我们需要的逻辑,如果不需要让hibernate在执行查询或保存操作时候隐式的调用get,set方法,   
    可以在映射文件中设置field参数   
    (2)利用<property>元素的formula属性。   
    如果数据表里没有totalPrice价格总和字段,而我们需要在获得用户对象的同时,需要知道它对应多个订单的价格总和,   
    我们可以在CUSTOMER实体bean里定义totalPrice属性,生成get,set方法,再利用以下代码可以实现   
    例如:<property name="totalPrice" formula="(select sum(o.PRICE) from ORDERS o where o.CUSTOMER_ID=ID)"/>   
    (3)控制insert和update语句   
    例如:<property name="price" update="false" insert="false" column="PRICE"/>   
    设置成false代表在保存或修改此类时候,price不被操作。一般多用于多对一关系映射中,避免级联操作。  

 

二.关联映射   
    1.主键自动生成映射   
    <id name="id" type="java.lang.String" column="ID" length="32">  
        <generator class="uuid" />  
    </id>  
    2.一对一主键关联   
    <one-to-one name="order" class="mypack.Order" cascade="all"/>  
    constrained属性为true,表明ORDERS表的ID主键同时作为外键参照CUSTOMERS表。   
    当前xml文件中,必须为OID使用foreign标识符生成策略:   
    <one-to-one name="customer" class="mypack.Customer" constrained="true"/>  
    <id name="id" type="java.lang.String" column="ID">  
        <generator class="foreign">  
            <param name="property">customer</param>  
        </generator>  
    </id>  
    注:当两个关联类之间有两个一对一关联时,可以使用一对一外键关联。   
    一对一外键关联与多对一关联的区别仅仅是在many-to-one标签上需要配置属性unique="true"。   
    3.多对一关联   
    <many-to-one name="customer" class="mypack.Customer" column="CUSTOMER_ID"/>  
    4.一对多关联   
    <set name="orders" cascade="save-update" inverse="true" lazy="extra">  
        <key column="CUSTOMER_ID" />  
        <one-to-many class="mypack.Order"/>  
    </set>  
    <list name="orders" cascade="save-update" lazy="extra" fetch="join">  
        <key column="CUSTOMER_ID"></key>  
        <list-index column="SHOW_INDEX"></list-index> <!--orders表中索引位置字段SHOW_INDEX-->  
        <one-to-many class="mypack.Order" />    
    </list>  
    5.多对多关联   
    <set name="orders" table="CUSTOMERS_TO_ORDERS" cascade="save-update" lazy="extra">  
        <key column="CUSTOMER_ID"/>   <!--双向多对多关联必须把其中一端的inverse属性设为true-->  
        <many-to-many class="mypack.Order" column="ORDER_ID"/>  
    </set>  
    注:当中间表需要有更多的属性字段时,可把多对多分解成两个一对多关联。   
    6.在数据库中对集合排序   
    set,map映射支持sort属性(内存排序),order-by属性(数据库排序)。   
    例如:   
    <set name="orders" cascade="save-update" inverse="true" lazy="extra" order-by="ID asc">  
        <key column="CUSTOMER_ID" /> <!--当加载Customer对象的orders集合的时,会进行排序操作-->  
        <one-to-many class="mypack.Order"/>  
    </set>  
    7.附加过滤条件   
    <set name="orders" cascade="save-update" inverse="true" lazy="extra" where="STATUS='1'">  
        <key column="CUSTOMER_ID" /> <!--当加载Customer对象的orders集合的时,只会查出STATUS为1的order对象-->  
        <one-to-many class="mypack.Order"/>  
    </set>  

 

三.检索方式   
    1.分页查询   
    List result = this.getSession().createQuery("from Customer c order by c.name asc")   
        .setFirstResult(0).setMaxResults(10).list();   
    2.条件查询   
    //如果hql语句中含有参数可以使用以下方法提高安全性:   
    Object[] args = {name,order};   //传入的查询条件的变量名字   
    Type[] types = {Hibernate.STRING,Hibernate.entity(Order.class)};    //变量类型   
    //Type[]是hibernate提供的变量类型,order为自定义对象类型。   
    //根据参数说在位置的索引值,传入的变量名字,变量类型来进行查询。   
    List list = this.query("from Customer c where c.name=? and c.order=?",args,types)   
    public List query(String hql, Object[] args, Type[] types){   
        Query query = this.getSession().createQuery(hql);   
        query.setParameters(args, types);   
        return query.list();   
    }   
    3.批量延迟检索   
    映射文件中<set>元素有一个batch-size属性,用于为延迟检索或立即检索策略设定批量检索的数量。   
    注:批量检索的属性值范围不宜过大,如果过大就失去了延迟加载的意义,如果太小也会失去批量检索的意义。   
    一般设置为:3-10。合理的运用批量检索可以提高检索性能。具体请查阅说明文档。   
    4.检索单个对象   
    Customer customer = (Customer)this.getSession().createQuery("from Customer c order by c.name asc")   
    .setMaxResults(1).uniqueResult();   
    5.隐式内连接   
    //标准的HQL内连接查询语句:   
    "from Customer c inner join c.orders";   
    //如果Customer类中没有orders集合属性,可以采用SQL风格的隐式内连接查询语句:   
    "from Customer c,Order o where c.in=o.customer_id";   
    6.分组查询   
    //例如以下查询语句仅统计具有一条以上订单的客户的所有订单的总价:   
    "select c.id,c.name,sum(o.price) from Customer c join c.orders o group by c.id having (count(o)>1)";   
    7.HQL查询的select子句   
    "select new map(c.name as personName) from Customer c"    
    //HQL语句返回的结果是集合,其中集合元素是Map对象,以personName作为Map的key。   
    8.SQL查询通过对象属性显示    
    //SimpleJdbcTemplete是spring为hibernate查询提供的工具类    
    SimpleJdbcTemplete simpleJdbcTemplete;    
    List<Map<String,Object>> list = simpleJdbcTemplete.queryForList(sql.toString(), new Object[]{});  

 

 <觉得写的不错,转载中>

分享到:
评论

相关推荐

    hibernate 常用核心包

    "hibernate 常用核心包"包含了 Hibernate 框架中必要的组件,使得开发者可以进行基本的数据库操作和应用程序开发。 在 Hibernate 中,以下几个核心包是至关重要的: 1. **hibernate-core**: 这是 Hibernate 的核心...

    Hibernate常用jar包集合

    以下是对标题、描述中提到的Hibernate常用jar包的详细解释: 1. **antlr-2.7.6**: ANTLR(ANother Tool for Language Recognition)是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。...

    hibernate 常用jar 包

    下面我们将详细探讨Hibernate常用JAR包及其作用。 1. **hibernate-core.jar**:这是Hibernate的核心库,包含了主要的ORM功能,包括实体管理、持久化操作、事务管理和查询服务。它提供了对Hibernate Session和...

    hibernate常用注解

    ### Hibernate常用注解详解 #### 一、JPA与Hibernate注解基础 JPA(Java Persistence API)是一种标准规范,用于实现对象关系映射(ORM),允许开发人员使用注解或XML来描述实体对象与数据库表之间的映射关系。...

    hibernate常用方法集合

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它简化了与数据库之间的交互。`HibernateSessionFactory` 类是Hibernate应用中常见的一个工具类,用于管理和提供与当前线程相关的Session实例。让...

    hibernate常用API详解(原创).doc

    根据个人使用Hibernate的经验,介绍一下Hibernate的多种不同的查询和CUD操作,这些东西在日常开发中非常常用,希望对大家有所帮助。

    Hibernate常用jar包

    《Hibernate常用jar包详解》 Hibernate,作为Java领域中的一款著名对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者可以更加专注于业务逻辑的实现,而非底层的SQL语句编写。为了能顺利使用Hibernate,...

    hibernate常用的jar

    以下是对"hibernate常用的jar"的详细说明: 1. **Hibernate核心库**:`hibernate-core.jar` - 这是Hibernate的核心组件,包含了ORM的主要功能,如实体管理、会话管理、查询语言(HQL)和Criteria API等。 2. **JPA...

    Hibernate常用的jar包和两个配置文件

    一、Hibernate常用jar包 1. **hibernate-core.jar**:这是Hibernate的核心库,包含了所有必要的API和实现,包括Entity管理、Session接口、Query语言等。 2. **hibernate-entitymanager.jar**:提供了JPA(Java ...

    hibernate常用包(包含数据库)

    标题中的“hibernate常用包(包含数据库)”指的是Hibernate框架的基础组件,这些组件是进行JavaWeb开发中数据持久化操作的关键。Hibernate是一个强大的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间...

    ssh-hibernate常用包.rar

    本压缩包“ssh-hibernate常用包.rar”包含了学习Hibernate5时所需的基础导入jar包,特别适合初学者进行数据库管理与Java对象的映射学习。 1. **Hibernate5**: Hibernate 5是ORM(Object-Relational Mapping)框架的...

    Hibernate常用操作示例

    Hibernate常用操作示例,包含详细注释说明,数据库初始化文件。使用和学习请参考:http://blog.csdn.net/daijin888888/article/details/51692942

    hibernate里面常用jar包

    以上就是关于Hibernate常用jar包的一些介绍,每个库都有其独特的功能,共同构成了Hibernate的强大ORM框架。理解并熟练掌握这些库的用途,对于有效地利用Hibernate进行开发至关重要。在实际项目中,开发者还需要根据...

    struts2 spring hibernate常用jar包

    在这个"struts2 spring hibernate常用jar包"中,包含了这三个框架的核心库和其他相关依赖,使得开发者能够快速搭建开发环境。 Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它旨在简化...

    Struts +Hibernate 常用开发驱动包

    提供的"Struts+Hibernate常用驱动整理"压缩包可能包含以下组件: - Struts相关的jar包:如struts2-core、struts2-convention、struts2-json-plugin等,用于核心功能、约定优于配置的加载和JSON支持。 - Hibernate的...

    Hibernate常用查询语句

    Hibernate常用查询语句.doc

    spring+springmvc+hibernate常用jar

    标题中的"spring+springmvc+hibernate常用jar"指的是在Java Web开发中,整合Spring框架、Spring MVC和Hibernate框架时所需的常用库文件。这些jar文件是构建基于这三大框架的应用程序的基础,允许开发者实现模型-视图...

    Hibernate常用包及XML

    本主题将详细探讨Hibernate中的常用包及其对应的XML配置,帮助你深入理解Hibernate的工作原理。 1. **org.hibernate**:这是Hibernate的核心包,包含了所有基本的API和接口,如SessionFactory、Session、Query等。...

Global site tag (gtag.js) - Google Analytics