- 浏览: 229889 次
- 性别:
- 来自: 武汉
最新评论
-
spp_1987:
org.springframework.beans.facto ...
Hibernate4之多对多双向关联 -
spp_1987:
后台保存订单下面 有很多订单 调了 对应什么方法 实现的?
Hibernate4之多对多双向关联 -
spp_1987:
订单 和 商品之间 有中间表存在吗???
Hibernate4之多对多双向关联 -
spp_1987:
跟 官方 hibernate4.2.5提供 的 manytom ...
Hibernate4之JPA规范配置详解 -
zhuguopei_java:
谢谢。楼主你这是解释源码吗
Struts2中action接收参数的三种方法及ModelDriven和Preparable接口结合JAVA反射机制的灵活用法
文章列表
一个用户可以有多个订单,订单相对于用户的关系就是多对一的关系。
在这里一对多的关系是@OneToMany,默认是延迟加载的。当然客户对象相对于订单是级联删除的。
/**
* @author Chou
* @since 2012-8-8
* ...客户实体(一对多双向关联)
*
*/
@Entity
@Table(name = "TAB_CUSTOMER")
@SequenceGenerator(name = "seq", sequenceName = "SEQ_CUSTOMER", allocatio ...
一个客户可以有多个订单,订单对应一个客户的关系就是多对一。
在这里多对一的关系是@ManyToOne,默认是非延迟加载的。如果要设置懒加载必须设置fetch = FetchType.LAZY,但是既然配置了多对一,肯定是希望加载订单的时候加载出客户信息的。
/**
* @author Chou
* @since 2012-8-8
* ...客户实体
*
*/
@Entity
@Table(name = "TAB_CUSTOMER")
@SequenceGenerator(name = "seq", sequenceNam ...
每个用户注册信息就对应一个登录信息,双方是相互依存的,由于主键共享,如果有任意表的一条记录被删除或者新增,那么另一张表也会删除对应的记录或者新增一条记录。而且一对一不管是save还是update都必须手工维护双向关系。
在一对一中,关联关系的对象默认都是使用延迟加载,<many-to-one>默认的属性是lazy="proxy",此时默认是会延迟加载的.在指定了lazy="true"之后,需要动态字节码增强才能实现延迟加载。
在这里不管是加载USER还是LOGIN都应该是延迟加载彼此关联对象,在实际业务需求上两者也没有关系的。
对于延迟加载, ...
关系型数据库中依靠主键来区分不同的记录,主键又有自然主键和代理主键之分。
自然主键:就是指充当主键的字段本身具有一定的含义,是构成记录的重要组成部分。
代理主键:就是指主键字段本身不具有业务含义,只是起到标志的作用,比如自增长类型的ID。
在Hibernate应用方案中,极力推荐使用代理主键。
在Hibernate中,Hibernate依靠对象标识符(OID)来区分不同持久化对象。而对象标识符(OID)可以通过Hibernate内置的标识生成器来产生。
这里讨论的是代理主键,业务主键(比如说复合键等)这里不讨论。
一、JPA通用策略生成器
通过Annotation来映射hibern ...
Hibernate的基本映射数据类型是Java基本类型与标准SQL类型相互转换的桥梁,通过Hibernate的基本映射数据类型可以非常方便地将数据从一种形式转换成另一种形式,完成高质量的ORM任务。
3种数据类型之间的对应关系
Hibernate映射类型Java类型标准SQL类型integerjava.lang.IntegerINTEGERlongjava.lang.LongBIGINTshortjava.lang.ShortSMALLINTfloatjava.lang.FloatFLOATdoublejava.lang.DoubleDOUBLEbig_decimaljava.math. ...
Hibernate基本配置其实就是SessionFactory的配置,所有配置都在<session-factory/>标签之内。但是<session-factory/>标签又可以分成3个部分的配置:
1.JDBC连接参数的基本配置
2.Hibernate连接池的参数配置
3.注册ORM映射文件的配置
Hibernate4和Hibernate3在配置上的一些区别:
连接池c3p0的配置
由于Hibernate自己实现的连接池不太好,在项目中,建议使用工业级的连接池,比如:c3p0,Hibernate发行包中带有c3p0的专用jar包hibernate-c3p0-4. ...
Hibernate是一个对JDBC轻量封装后的轻量级ORMapping框架
ORMapping原理(Object Relational Mapping)
在以前使用的JDBC操作其实就是一个持久化的过程
JDBC的劣势:
对于小型的应用开发而言,使用JDBC也许还不错。但是对于大型应用而言,从 ...
先从官网上下载好最新的CKeditor和CKfinder包之后,解压ckeditor和ckfinder,把ckeditor和ckfinder放在同一个文件夹里面。如下图:
然后开始整合Struts2和CKeditor
首先配置fck.xml文件,需要注意的是<baseURL>/Files/</baseURL>这里指的应用相对路径,如上图所示,而<baseDir></baseDir>指的绝对路径。这里推荐使用相对路径,路径的作用是后面文件管理器读取文件时的路径。在后面的xml节点中还可以配置上传图片时加载哪个文件夹,加载其他文件加载文件夹名, ...
Java开源项目中制作图表比较出色的就是JFreeChart了,相信大家都听说过,它不仅可以做出非常漂亮的柱状图,饼状图,折线图基本图形之外,还能制作甘特图,仪表盘等图表。在Web应用中可以为项目增色不少。JFreeChart技术成熟, ...
Struts2的上传下载是整合了commons-fileupload-1.2.2.jar这个包的功能,不过还需要commons-io-2.3.jar这个包的支持。其实上传下载功能主要是配置,下面是我的一个小例子,
可以实现上传下载,并且渲染图片到页面的效果,AbstractBaseAction这个基类代码可以翻看我之前写的博文中有贴出代码。
大概主要下面几点:
1.提交表单form的enctype属性
2.struts.xml的配置,下载要注意result的type,上传要注意拦截器的配置,这里我还配置了资源文件,利用国际化来做文件上传表单的验证功能。
<?xml version=&q ...
<s:property />
<s:property value="name" escape="false" default="默认值"/>
<!-- 直接访问Action中的方法名 -->
<s:property value="myMethod" />
<!-- 得到属性值string类型的长度 -->
<s:property value="name.length()" />
<!-- 访问静态方法 -- ...
<s:iterator/>迭代器标签
迭代器标签被用来迭代一个值,这个值可以是java.util.Collection或java.util.Iterator中的任何一种
<s:iterator value="集合对象" status="迭代状态实例">
<s:property value="#status.count"/>
</s:iterator>
<h3>带有IteratorStatus的迭代</h3>
<table> ...
<s:textfield />标签的label属性
<s:textfield name="name" label="姓名"/>
struts 的label 是生成html的label。但它有其它作用,可以动态的生成样式,比如输入字段有错误时,提交后回到输入页面,改变相应label的css样式。Struts 2 定义的几种theme,其结果输入字段的布局上有一定的差别。你可以自己定义模板,重新排列表单各个元素。
textarea标签用法
<s:textarea label="输入内容" name ...
Struts2的token标签防止表单重复提交的思路是这样的:
1、当请求到标有<s:token/>标签的JSP的时候,Struts2会建立一个GUID(全局唯一的字符串)放在session中,并且会成为一个hidden放在form中,这个GUID就是这个hidden的值。
2、在struts.xml文件里配置好的token拦截器会判断客户端form提交的token和session中保存的session是否相等。如果equals=true则执行Action。否则拦截器给值栈中压入actionError对象并设置其属性invaid.token的值,最后返回invaid.token结果, ...
值栈(ValueStack)
Struts2将OGNL上下文设置为Struts2中的ActionContext(内部使用的仍然是OgnlContext),并将值栈设为OGNL的根对象。
OGNL上下文中的根对象可以用ONGL表达式以对象名直接访问的,不需要使用任何特殊的“标记”,而引用上下文中的其他对象则需要使用“#”来标记。由于值栈是OGNL上下文中的根对象,因此可以直接访问。那么对于值栈中的对象该如何访问呢?Struts2提供了一个特殊的OGNLPropertyAccessor,它可以自动查找栈内的所有对象(从栈顶到栈底),直接找到一个具有你所查找的属性的对象。也就是说,对于 ...