文档章节

Hibernate<二> 映射基础 单个持久类与单个数据库表映射

Winnie007
 Winnie007
发布于 2015/08/18 11:45
字数 853
阅读 59
收藏 6

一、单个持久化类与单个数据库表映射基础

1、在Hibernate应用中,持久化类的访问方法有两个调用者:(默认的持久化类要有默认的构造函数、setXX、getXXX方法)

①、Java应用程序:调用User对象的getXXX方法,读取User信息。调用setXXX方法,把用户输入的user信息写入到user对象中。

②、Hibernate:调用User对象的getXXX方法,读取user信息,把它保存到数据库调用user对象的setXXX方法,把从数据库中读出的user信息写入到user对象中。Hibernate的session在执行save()、update()、saveorupdate()方法时会调用user的getXXX方法,当session执行get() load()find()方法时会调用user对象的setXXX方法。Java应用程序不能访问持久化类的private类型的getXXX方法和setXXX方法,而hibernate没有这个限制。

2、Hibernate访问持久化类属性的策略

在对象-关系映射文件中,<property>元素的access属性用于指定Hibernate访问持久化类属性的方式:

①、property:默认值,表明Hibernate通过相应的setXXX()和getXXX()方法访问持久化类属性的。推荐方式。

②、field:表明Hibernate运用java反射机制直接访问类的属性。

3、当持久化类的属性与数据库表中的字段不匹配时处理方法:

例如:    持久化类如下:

public class User{
    private String firstName;
    private String lastName;
}

而数据库表中字段为name。当Hibernate从数据库中取得user表的name字段后,会调用setName()方法,此时应该让Hibernate通过setName()方法 来自动设置fistname属性和latname属性、此时持久化类如下:

public class User{
    private String firstName;
    private String lastName;
    public String getName(){
        return firstName+" "+lastName; 
    }
    public String setName(String name){
        StringTokenizer t=new StringTokenizer(name);
        firstName=t.nextToken();
        lastName=t.nextToken();
    }
}

在对象-关系映射文件User.hbm.xml中,无需映射User类的firstName和lastName属性,而是映射name属性

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

另外,<property>元素的formula属性指定一个sql表达式,该表达式可以引用表的字段,例如

<property name="totoalPirce" formula="basePrice * Count">

4、控制insert和update语句:

    Hibernate在初始化阶段,就会根据映射文件的映射信息,为所有持久化类预定义sql语句:

insert,例如user类:insert into user(id,username,order_number) values(?,?,?)

update语句、delete语句、select语句

用于控制insert和update语句的映射属性:

<property>元素的insert:如果为false,表明该字段永远不能被插入,默认为true。

<property>元素的update:如果为false,表明该字段永远不会被更新,默认为true。

<property>元素的dynamic-insert:如果为true,表示当保存一个对象时,会动态生成insert语句,只有这个字段不为null,才会把它包含到insert语句中。默认为false。

<property>元素的dynamic-update:如果为true,表示当更新一个对象时,会动态生成update语句,只有改字段取值有变化,才会把他包含到update语句中,默认为false。

<class>元素的dynamic-insert:   等价于所有的<property>元素的dynamic-inser属性为true。

<class>元素的dynamic-update:

<class>元素的Mutable属性:若为false,等价于所有的<property>元素的update属性为false,表明整个实例不能被更新,默认为true。

5、设置类的包名

© 著作权归作者所有

Winnie007
粉丝 7
博文 36
码字总数 62847
作品 0
青岛
私信 提问
java 私塾随堂笔记——Hibernate(上)

java 私塾随堂笔记——Hibernate(上) 第一章 Hibernate介绍 一.是什么: Hibernate是轻量级的ORM框架。 1.ORM(ORMapping) Object——Mapping——→Relation DB Object←——JDBC———Rel...

luodis
2011/03/21
444
0
Hibernate基础知识汇总

ORM简介 ORM(Object/Relation Mapping),对象关系映射,ORM是一种规范,主要完成面向对象的编程语言到关系数据库的映射。 ORM框架是面向对象程序设计语言与关系数据库发展不同步时的中间解...

白志华
2015/09/17
6
0
4.1 Hibernate概述

Hibernate是一个开源的对象关系映射框架,它对JDBC进行了轻量级的封装(未完全封装),使程序员可以使用面向对象的编程思想来操纵数据库。Hibernate是一个对象/关系映射的解决方法,简单的说...

JerryPan
2016/02/26
195
0
在 Hibernate 中实现复杂的数据映射

案例介绍 在第一篇文章中,我们对一个表进行了简单的封装。在这篇文章中,我们讨论更加复杂的情况。 在这个例子中,将考虑到表之间的一对一、一对多、多对多的情况。如图1所示。 图1 实体之间...

红薯
2008/10/05
642
0
Hibernate,JPA 对象关系映射之简单映射策略

简单映射 近年来 ORM(Object-Relational Mapping,对象关系映射,即实体对象和数据库表的映射)技术市场热闹非凡,各种各样的持久化框架应运而生,其中影响最大的是 Hibernate 和 Toplink。...

思悟修
2015/04/15
298
0

没有更多内容

加载失败,请刷新页面

加载更多

分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0
redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
昨天
4
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
昨天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
昨天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部