摘要: 一对多关联映射(one-to-many)
一对多关联映射利用了多对一关联映射原理
* 多对一关联映射:在多的一端加和一个外键指向一的一端,它维护的关系是多指向一的
* 一对多关联映射:在一的一端加和一个外键指向多的一端,它维护的关系是一指向多的
也就是说一对多和多对一的映射策略是一样的,只是站的角度不同,一般都作成双项的
-------------------...
阅读全文
posted @
2009-11-03 16:04 junly 阅读(646) |
评论 (0) |
编辑 收藏
摘要: 多对一关联映射 many-to-one
关联映射本质:
* 将关联关系映射到数据库,所谓的关联关系是对象模型在内存中的一个或多个引用。
<many-to-one/>标签会在多的一端加入一个外键,指定一的一端,这个外键是由<many-to-one>
中的column属性定义的,如果忽略了这个属性那么默认的外键与实体的属性一致
<...
阅读全文
posted @
2009-11-03 15:53 junly 阅读(425) |
评论 (0) |
编辑 收藏
hibernate基本映射
实体类------>表
实体类的设计原则:
* 实现一个默认(无参)的构造方法(constructor)
* 提供一个标识属性(identifier property)
* 使用非final的类
* 为持久化字段声明访问器(accessors),即get/set方法
实体类中的普通属性----->表字段
采用<class>标签映射成数据库表,通过<property>标签将普通属性映射成表字段
所谓普通属性不包括自定义类、集合和数组
注意:表或字段与sql关键字一样,必须重名称
<hibernate-mapping/>标签
<hibernate-mapping
schema="schemaName" (1)
catalog="catalogName" (2)
default-cascade="cascade_style" (3)
default-access="field|property|ClassName" (4)
default-lazy="true|false" (5)
*auto-import="true|false" (6)
*package="package.name" (7)
/>
(6) auto-import (可选 - 默认为 true): 指定我们是否可以在查询语言中使用非全限定的类名(仅限于本映射文件中的类)。
(7) package (可选): 指定一个包前缀,如果在映射文档中没有指定全限定的类名, 就使用这个作为包名。
<hibernate-mapping package="com.my.hibernate">
<class name="User">
<id name="id">
<generator class="uuid"/>
</id>
<property name="name"/>
<property name="password"/>
<property name="createTime"/>
<property name="expireTime"/>
</class>
</hibernate-mapping>
<class/>标签--表
<class
*name="ClassName" (1)
*table="tableName" (2)
*discriminator-value="discriminator_value" (3)
mutable="true|false" (4)
schema="owner" (5)
catalog="catalog" (6)
proxy="ProxyInterface" (7)
*dynamic-update="true|false" (8)
*dynamic-insert="true|false" (9)
select-before-update="true|false" (10)
polymorphism="implicit|explicit" (11)
where="arbitrary sql where condition" (12)
persister="PersisterClass" (13)
*batch-size="N" (14)
*optimistic-lock="none|version|dirty|all" (15)
*lazy="true|false" (16)
entity-name="EntityName" (17)
check="arbitrary sql check condition" (18)
rowid="rowid" (19)
subselect="SQL expression" (20)
*abstract="true|false" (21)
node="element-name"
/>
(1) name (可选): 持久化类(或者接口)的Java全限定名。 如果这个属性不存在,Hibernate将假定这是一个非POJO的实体映射。
(2) table (可选 - 默认是类的非全限定名): 对应的数据库表名。
(3) discriminator-value (可选 - 默认和类名一样): 一个用于区分不同的子类的值,在多态行为时使用。它可以接受的值包括 null 和 not null。
(8) dynamic-update (可选, 默认为 false): 指定用于UPDATE 的SQL将会在运行时动态生成,并且只更新那些改变过的字段。
(9) dynamic-insert (可选, 默认为 false): 指定用于INSERT的 SQL 将会在运行时动态生成,并且只包含那些非空值字段。
(14) batch-size (可选,默认是1) 指定一个用于 根据标识符(identifier)抓取实例时使用的"batch size"(批次抓取数量)。
(15) optimistic-lock(乐观锁定) (可选,默认是version): 决定乐观锁定的策略。
(16) lazy (可选): 通过设置lazy="false", 所有的延迟加载(Lazy fetching)功能将被全部禁用(disabled)。
(21) abstract (可选): 用于在<union-subclass>的继承结构 (hierarchies)中标识抽象超类。
<id/>标签 -主键
主键生成策略:
uuid native 和assigned
<id
*name="propertyName" (1)
type="typename" (2)
*column="column_name" (3)
unsaved-value="null|any|none|undefined|id_value" (4)
access="field|property|ClassName" (5)
node="element-name|@attribute-name|element/@attribute|.">
*length (6)
<generator class="generatorClass"/>
</id>
(1) name (可选): 标识属性的名字。
(2) type (可选): 标识Hibernate类型的名字。
(3) column (可选 - 默认为属性名): 主键字段的名字。
(4) unsaved-value (可选 - 默认为一个切合实际(sensible)的值): 一个特定的标识属性值,用来标志该实例是刚刚创建的,尚未保存。 这可以把这种实例和从以前的session中装载过(可能又做过修改--译者注) 但未再次持久化的实例区分开来。
(5) access (可选 - 默认为property): Hibernate用来访问属性值的策略。
(6) 长度.
<generator/>生成唯一的标识
<id name="id" type="long" column="cat_id">
<generator class="uuid">
</generator>
</id>
identity
对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。 返回的标识符是long, short 或者int类型的。
sequence
在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence), 而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的。
uuid
用一个128-bit的UUID算法生成字符串类型的标识符, 这在一个网络中是唯一的(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。
native
根据底层数据库的能力选择identity, sequence 或者hilo中的一个。
assigned
让应用程序在save()之前为对象分配一个标示符。这是 <generator>元素没有指定时的默认生成策略。
foreign
使用另外一个相关联的对象的标识符。通常和<one-to-one>联合起来使用。
<property/>生成字段
<property
*name="propertyName" (1)
*column="column_name" (2)
type="typename" (3)
update="true|false" (4)
insert="true|false" (4)
formula="arbitrary SQL expression" (5)
access="field|property|ClassName" (6)
lazy="true|false" (7)
unique="true|false" (8)
not-null="true|false" (9)
optimistic-lock="true|false" (10)
generated="never|insert|always" (11)
node="element-name|@attribute-name|element/@attribute|."
index="index_name"
unique_key="unique_key_id"
length="L"
precision="P"
scale="S"
/>
(1) name: 属性的名字,以小写字母开头。
(2) column (可选 - 默认为属性名字): 对应的数据库字段名。 也可以通过嵌套的<column>元素指定。
(4) update, insert (可选 - 默认为 true) : 表明用于UPDATE 和/或 INSERT 的SQL语句中是否包含这个被映射了的字段。这二者如果都设置为false 则表明这是一个“外源性(derived)”的属性,它的值来源于映射到同一个(或多个) 字段的某些其他属性,或者通过一个trigger(触发器)或其他程序生成。
(7) lazy (可选 - 默认为 false): 指定 指定实例变量第一次被访问时,这个属性是否延迟抓取(fetched lazily)( 需要运行时字节码增强)。
(8) unique (可选): 使用DDL为该字段添加唯一的约束。 同样,允许它作为property-ref引用的目标。
(9) not-null (可选): 使用DDL为该字段添加可否为空(nullability)的约束。
映射文件中一般类型中可以省略,其他不略
posted @
2009-11-03 15:35 junly 阅读(536) |
评论 (0) |
编辑 收藏
摘要: 类拟框架:Apache OJB,JDO,Toplink,EJB(CMP)JPA,IBatis
适合查询及单个对象的编辑,适合于对象之间有清晰的关系,不适用于批量修改,关系复杂的对象及特定的sql功能
第一个项目
1 新建java项目
2 创建User Library,加入如下jar
* hibernate_home/hibernate3.jar
* hibe...
阅读全文
posted @
2009-11-03 15:26 junly 阅读(214) |
评论 (0) |
编辑 收藏
摘要:
A概念
最常用的3个概念
sequence 序列,对应java里的list、数组等非键值对的集合
hash 键值对的集合
namespace 对一个ftl文件的引用,利用这个名字可以访问到该ftl文件的资源
B指令
if, else, elseif
语法
<#if condition>...
阅读全文
posted @
2009-11-03 11:12 junly 阅读(2203) |
评论 (0) |
编辑 收藏
摘要: 1 web.xml
<!------ AutoSuggest/WebContent/WEB-INF/web.xml ---->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//S...
阅读全文
posted @
2009-11-03 11:07 junly 阅读(341) |
评论 (0) |
编辑 收藏
摘要: DWR中处理List调用返回JavaBean的java方法
4.1、dwr.xml的配置
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="com.dwr.Te...
阅读全文
posted @
2009-11-03 10:54 junly 阅读(634) |
评论 (0) |
编辑 收藏
方法1:
fuction test{
tt.hello(
callback:function(datas){
alert(datas.key1);
alert(datas.["key2"]);
}
);
}
方法2:
fuction test{
tt.hello(
callback:function(datas){
for(var prop in datas){
alert("key="+prop+",value="+datas.[prop]);
}
}
);
}
同时调用多个方法时,设置dwr的方法调用方式
true(默认):效果为可以同时调用方法1和2,可以先调用方法2后调用方法1,不能确认
false:先调用方法1后调用方法2,按js中调用的顺序调用
dwr.engine.setAsync(false);
posted @
2009-11-03 10:43 junly 阅读(355) |
评论 (0) |
编辑 收藏
摘要: util.js包含一些有用的函数function,用于在客户端页面调用.
主要功能如下:
代码
1、$() 获得页面参数值
2、addOptions and removeAllOptions 初始化下拉框
3、addRows and removeAllRows 填充表格 ...
阅读全文
posted @
2009-11-03 10:41 junly 阅读(740) |
评论 (0) |
编辑 收藏
var xmlrequestXml;
function createXmlHttpreqest(){
if(window.ActiveXObject)
{
return new ActiveXObject("Microsoft.XMLHTTP");
}else if(window.XMLHttpRequest)
{
return new XMLHttpRequest();
}
}
var rul="?operate=doaa&uname="+uname;
1 创建xmlHttpRequest组件
xmlrequestXml=createXmlHttpreqest();
2 回调函数
xmlHttpRequest.onreadystatechange=haolejiaowo;、
3 注册
xmlHttpRequest.open("GET",url,true);
4 发送
xmlHttpRequest.send(null);
function haolejiaowo()
{
if(xmlHttpRequest.readyState==4 && xmlHttpRequest.status=200)
{
var b=xmlHttpRequest.responseText;
if(b=="true")
{}
else
{}
}
}
---------------------------------------------------------------------
1 jar http://getachead.org/dwr
2 创建配置文件:/WEB-INF/dwr.xml
<dwr>
<allow>
<create creator="new[struts/spring]" javascript="JUserChecker">
<param name="class" value="com.bj.biz.Manager"/>
<!--
<include method="check"/>
<include method="check2"/>
-->
</allow>
</dwr>
3 在web.xml中配置
<servlet>
<servlet-name>dwr</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
4 java类
5 测试 http://127.0.0.1:8080/dwrpro/dwr/
6 页面代码
<script src="dwr/interface/JUserChecker.js"/>
function checkUserExists(oCtl){
var uname=oCtl.vlaue;
JUserChecker.ckeck(uname,haoLeJiaoWo);
}
fucntion haoLeJiaoWo(data){
alert(data);
}
返回对象
posted @
2009-11-03 10:36 junly 阅读(201) |
评论 (0) |
编辑 收藏