Hibernate<二> 映射基础 单个持久类与单个数据库表映射
2015-08-18 00:00
489 查看
摘要: Hibernate复习 入门学习
一、单个持久化类与单个数据库表映射基础
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、当持久化类的属性与数据库表中的字段不匹配时处理方法:
例如: 持久化类如下:
而数据库表中字段为name。当Hibernate从数据库中取得user表的name字段后,会调用setName()方法,此时应该让Hibernate通过setName()方法 来自动设置fistname属性和latname属性、此时持久化类如下:
在对象-关系映射文件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、设置类的包名
一、单个持久化类与单个数据库表映射基础
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、设置类的包名
相关文章推荐
- Mysql数据库引擎分析
- Mybatis + mysql 返回自增主键
- oracle创建存储函数:查询某个员工的年收入
- ubuntu 12.04 安装 Cloudera Manager5及CDH5(Mysql)【添加yum源方式安装集群】
- 《数据库系统概念》学习笔记之三
- Pinterest谈实战经验:如何在两年内实现零到数百亿的月访问
- postgresql 删除单个表的数据
- SqlServer 时间函数
- oracle创建一个带参数的存储过程:为指定的员工,涨100块钱的工资;并且打印涨前和涨后的薪水
- db2 实现oracle wm_concat函数的方法-db2开发系列(一)
- JDBC连接数据库代码以及步骤--java
- TimesTen_重建业务日志表
- Oracle 学习之性能优化(二)游标
- 数据库系统应用一:工资管理系统系列三(软件实现)
- [SQLite]SQL语法
- Sqlite学习笔记(二)&&性能测试
- Django+redis 实现登录
- mysql 事务提交过程
- Oracle连接<二>
- sqlite 3 使用交叉编译