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

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

1、在Hibernate应用中,持久化类的访问方法有两个调用者:

①、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、设置类的包名

时间: 2024-08-11 00:16:18

Hibernate<二> 映射基础 单个持久类与单个数据库表映射的相关文章

数据类与生成数据库表所需组成

Entityframework属于ORM框架,作用为:将数据类与数据库表关联起来. 数据类与生成数据库表所需组成: 普通类(实体类):定义了属性字段+限制 数据上下文类:继承了DbContext,(各实体类的集合).作用:生成数据库和操作数据库. 配置文件中.连接数据库的字符串.注意name必须与数据上下文类的派生类名称相同. 控制器中,数据库上下文类的实例化,然后使用给对象方可生成数据库.

java工具类–自动将数据库表生成javabean

最近和数据库的表打交道挺多的,因为暂时做的是接口活. 在这过程中发现要把表转换成对应的javabean类型,字段少的表还行,如果不小心碰到几十个字段的他妈的写起来就有点麻烦了,万一碰到几百个的呢,那不是要崩溃. 于是想写个工具类,自动生成javabean. 先说下思路: 1.读取数据库表,获取里面的字段名. 准备连接数据库的驱动包,这里只是针对了oracle数据库和mysql数据库 2.构建一个stringBuffer字符串,用来生成我们需要的类. 3.写入文件 要求具备相应的文件流知识. 好了

MySQL开启federated引擎实现数据库表映射

1.查看federated引擎是否开启 点击进入Navicat并点击键盘上F6,出现命令行界面 ,输入指令:show engines; 2.开启federated引擎 Windows系统 : 在my.ini中加入federated 3.建立映射表 在服务器A上有MySQL数据库test_a,在服务器B上有MySQL数据库test_b.现在需要将test_a库中的user表数据映射到数据库test_b中.此时需要在数据库test_b中建立表user,注意ENGINE和CONNECTION. CRE

WorkerMan 入门学习之(二)基础教程-Connection类的使用

1.TcpConnection类 的使用 一.简单的TCP测试 Server.php <?php require_once __DIR__.'/Workerman/Autoloader.php'; use Workerman\Worker; $worker = new Worker('websocket://0.0.0.0:80');// 连接回调 $worker->onConnect = function ($connection){ echo "connection succes

srping配合hibernate实现POJO与数据库表映射的零配置

第一步:配置数据源 <!-- 配置数据源1 -->    <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"        init-method="init" destroy-method="close">        <property name="url" value="

php基础:while循环查出所有数据库表行

$conn = mysql_connect('localhost','root','root');mysql_query('use ctx',$conn);mysql_query('set names utf8',$conn); $sql = "select * from girl";$rs = mysql_query($sql); $date = array();while($row = mysql_fetch_row($rs)){    $date[] = $row;}print_

02.Hibernate映射基础

前言:Hibernate的核心功能是根据数据库到实体类的映射,自动从数据库绑定数据到实体类.使我们操作实体类(Java对象)就能对数据库进行增.删.查.改,而不用调用JDBC API使数据操作变得简单而不繁琐.本文就主要讲解Hibernate的映射文件的映射机制,但本文讲解的重点在于通过Hibernate如何配置实体类到数据库表的映射,至于数据库表(或实体类)之间的各种关联关系的映射会在后面的文章中讲到. 1.映射配置文件基础(XXX.hbm.xml) 说明:本节只是对Hibernate的映射文

Hibernate(二)

Hibernate可以应用在任何使用JBDC的场合.    1.Java的客户端程序使用    2.Servlet或JSP的Web应用中使用 ===========================关联映射==========================种类:    一对多(多对一)关联    一对一关联    多对多关联方向:    单向关联    双向关联 1.单向一对多关联        步骤:        1)持久化类中添加关联类的相关属性和getter/setter方法      

1、Hibernate注解实现对象关联映射并自动生成数据库表

---恢复内容开始--- 前言:本例单独使用Hibernate框架通过Hibernate注解实现年级表和学生表的一对多关联并完成其级联操作 1.年级表 package pojo; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import j