- 浏览: 179584 次
- 性别:
- 来自: 天津
最新评论
-
lst923:
...
【转】Java 高性能Web 开发(2)-图像合并实现 CSS Sprites -
静静-黑夜:
离开
jquery uploadify 实现批量上传,带进度显示,判断文件大小 -
lizhao6210126.com:
确认一下这3个参数'multi': true, //是否支持多 ...
jquery uploadify 实现批量上传,带进度显示,判断文件大小 -
hpuyancy:
请问,出问题了,每次仅能上传一个文件,是不是设置的问题呢?
jquery uploadify 实现批量上传,带进度显示,判断文件大小 -
许助云:
例子很好很强大,只不过在调试的时候遇到一个小问题,需要修改to ...
jquery uploadify 实现批量上传,带进度显示,判断文件大小
文章列表
//功能:统计包含汉字的字符个数
//说明:汉字占2个字符,非汉字占1个字符
function checksum(chars)
{
var sum = 0;
for (var i=0; i<chars.length; i++)
{
var c = chars.charCodeAt(i);
if ((c >= 0x0001 && c <= 0x007e) || (0xff60<=c && c<=0xff9f))
{
sum++;
}
...
Uploadify是JQuery的一个上传插件,实现的效果非常不错。
支持批量上传;
带进度显示;
判断文件大小;
下面分别使用commons-fileupload 和struts2来实现一个简单的上传功能。
1,先介绍前台
首先从官网下载Uploadify,本实例使用的uploadify-v3.1
目录结构:
抓取策略:抓取关联对象。
1单端代理的批量抓取: select join 默认是select
保持默认,同fetch="select",如:
<many-to-one
name="classes" column="classesid"
fetch="select"/>
fetch="select",另外发送一条select语句抓取当前对象关联实体或集合
<hibernate-mapping>
<class
name= ...
hibernate查询缓存
查询缓存是针对普通属性结果集的缓存
对实体对象的结果集只缓存id
查询缓存的生命周期,当前关联的表发生修改,那么查询缓存生命周期结束
查询缓存的配置和使用:
*
在hibernate.cfg.xml文件中启用查询缓存,如:
<property
name="hibernate.cache.use_query_cache">true</property>
*
在程序中必须手动启用查询缓存,如:
query.setCacheable(true); ...
sessionFactory可以管理二级缓存。
Hibernate默认开启二级缓存。
二级缓存也称进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享
二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存
二级缓存的配置和使用:
*
将echcache.xml文件拷贝到src下
*
开启二级缓存,修改hibernate.cfg.xml文件
hibernate一级缓存
一级缓存很短和session的生命周期一致,一级缓存也叫session级的缓存或事务级缓存
那些方法支持一级缓存:
* get()
* load()
* iterate(查询实体对象)
如何管理一级缓存:
*
session.clear(),session.evict()
如何避免一次性大量的实体数据入库导致内存
Hibernate对悲观锁和乐观锁的支持,主要解决并发问题。
数据库隔离级别越高,并发性越差。
锁具有排他性,锁住别人就访问不了。
悲观锁:并发性低,悲观锁一般依赖于数据库机制实现的,在整个过程中将数据锁定,其他任何用户都不能读取或修改,hibernate做了一些封装。
一般适合短事务情况。
实际上是冲突检测。
悲观锁实现:
session.beginTransaction();
// LockMode 锁模式
Inventory inv =
(Invento ...
1,set映射:set是无序的
2,List映射,list是有序的,表中需要保存一个索引序列存储顺序下标。
3,数组映射,跟list一样。
4,Map映射,key-value
映射关系:
<hibernate-mapping>
复合(联合)主键映射:
复合主键映射一般采用把主键相关的字段拿出来,单独形成一个类,该类必须实现序列化接口,(在同一个JVM中没关系,如果跨JVM再想访问,必须序列化)。
复合主键一般与业务结合的很紧密,不建议使用。
通常将复合主键相关的属性,单独放到一个类中
* 此类必须实现序列化接口
*
覆写hashcode和equals方法
映射关系:
<hibernate-mapping>
<class
name="com.bjsxt.hibernate.FiscalYearPeriod"
table=" ...
Component组件映射:对象模型细粒度划分,复用率提高
component是某个实体的逻辑组成部分,它与实体的根本区别是没有oid,component也称为值对象(DDD、领域驱动设计模型)。
采用component映射的好处:它实现了对象模型的细粒度划分,层次更分明,复用率更高。
映射关系:
<hibernate-mapping>
<class
name="com.bjsxt.hibernate.User" table="t_user">
<id
name="id ...
继承映射:
1,一个类继承树映射到一张表。一般采用第一种。效率高,资源占用率低。
1、理解如何映射
因为类继承树肯定是对应多个类,要把多个类的信息存放在一张表中,必须有某种机制来区分哪些记录是属于哪个类的。
这种机制就是,在表中添加一个字段,用这个字段的值来进行区分。用hibernate实现这种策略的时候,有如下步骤:
父类用普通的<class>标签定义
在父类中定义一个discriminator,即指定这个区分的字段的名称和类型
如:<discriminator column=”XXX” type=”
Jdk动态代理,CGLib字节码生成
如果目标对象实现了接口,可以使用jdk动态代理和CGLib。
如果没有实现接口,只能使用CGLib。
Jdk动态代理要实现一个接口:InvocationHandler
public
class SecurityHandler implements InvocationHandler {
//目标对象,对该目标对象生成代理
private Object targetObject;
//生成代理对象,当生成完代理对象,调用代理对象上的方法时,默认先调用invoke
Hibernate
lazy策略:延迟加载、懒加载。
代理的概念:只有真正使用该对象的时候才会创建。
Lazy在hibernate上:在真正使用的时候才会发出sql查询。
实现原理:采用第三方库cglib,对类生成代理类。代理可以控制源对象,并且可以对源对象的功能进行增强。
Cglib和jdk动态代理的区别:
1,cglib能够对类进行代理,jdk动态代理只能对实现了接口的类进行代理。
2,Jdk动态代理类和原类实现相同的接口
3,Cglib 代理类继承原类,生成一个子类。
单向映射
hibernate多对多关联映射(单向User---->Role)
具体映射方式:
<set
name="roles" table="t_user_role">
<key
column="userid"/>
<many-to-many class="com.bjsxt.hibernate.Role"
column="roleid&q ...
hihernate一对多关联映射(双向Classes<----->Student)
一对多双向关联映射:
* 在一一端的集合上使用<key>,在对方表中加入一个外键指向一一端
* 在多一端采用<many-to-one>
注意:<key>标签指定的外键字段必须和<many-to-one>指定的外键字段一致,否则引用字段的错误
如果在”一“一端维护一对多关联关系,hibernate会发出多余的udpate语句,所以我们一般在多
的一端来维 ...