对单表执行更新没有什么好说的,无非就是update table_name set col1 = xx,col2 = yy where col = zz,主要就是where条件的设置。有时候更新某个表可能会涉及到多张数据表,例如:
update table_1 set score = score + 5 where uid in (select uid from table_2 where sid = 10);
其实update也可以用到left join、inner join来进行关联,可能执行效率更高,把上面的sql替换成join的方式如下:
update table_1 t1 inner join table_2 t2 on t1.uid = t2.uid set score = score + 5 where t2.sid = 10;
对于中国用户,如果centos默认使用UTC时区,那时间相差八个小时,其实可以通过简单的设置,变为中国时区,这时候机器上的时间和本地手表上的时间就是一致的。执行如下命令:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
就可以了,如果没有看到/Asia/Shanghai文件,手动执行以下 tzselect ,按照提示选择即可。
jquery提供了两个方法来获取页面的位置信息,offset方法能够得到元素的绝对位置,position方法是取原始的相对信息,方法返回是一个map对象,key分别是left和top。例如,$(‘#test’).offset().left 得到是id为test的元素距页面左边的像素。
何为绝对位置,何为相对位置呢?不管相对还是绝对,都有一个参照点,对于绝对位置比较简单,它的参照点永远是页面的左上角(注意:body默认是margin值的,如果没有手工修改此值,参照点不是正左上角,会有几个像素的偏移);相对位置的参照点就比较麻烦,很多地方都说相对父元素左上角,那究竟哪个算父元素呢?这个父元素并不一定是该元素的直接父元素,有可能是父元素的父元素,甚至可能的参考点是页面的左上角,父元素的定义是它的所有上层元素中第一个(距离本元素最近)css style中设置了position属性的元素,如果所有上级元素都没有设置该属性,那么参照点就是页面的左上角,跟offset一致了。
例如代码:
<div style="padding: 10px;border:1px solid; position: relative;width:180px;">
<div style="padding: 10px;position: relative;border:1px solid;">
<div id="test" style="background-color: #000;width: 20px;height: 20px;"></div>
</div>
</div>
这时id为test的div的相对位置的参照点就是他直接父元素,所以得到的left,top都为10,而下面的代码
<div style="padding: 10px;border:1px solid; position: relative;width:180px;">
<div style="padding: 10px;border:1px solid;"><!-- 注意没有设置position -->
<div id="test" style="background-color: #000;width: 20px;height: 20px;"></div>
</div>
</div>
此时参照点就是最外层的div,因此left、top的值为21px,即10 + 1 + 10,10是padding,1是border的
firefox(版本3.6)下当input框或者textarea的属性设置为readonly,在html控件在页面显示中就有一个灰色的底色,如果不喜欢,可以通过css来解决它。例如定义一个readonly的class,input框设置class为readonly,即可。firefox查看效果,代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>firefox输入框</title>
<style>
.readonly {
background-color:#fff;
border:1px solid #7f9db9;
padding:1px;
}
</style>
</head>
<body>
<div style="width:400px;margin: 50px auto">
<input name="txt" readonly="readonly" value="默认情况" />
<br /><br />
<input name="txt" readonly="readonly" value="使用了自定义css" class="readonly"/>
</div>
</body>
</html>
MyBatis的mapper接口不需要自己实现,框架会自动帮我们实现,到时候直接调用就可以了。定义的mapper接口中的方法可以有多个参数吗?答案是肯定。在Ibatis时代是自己通过代码实现如何调用xml中定义的statement,接受的参数只能是一个,所以处理的办法通常是用Map的方式。当然这个也能使用在MyBatis上,不过MyBatis提供更加简单的方法。下面就通过例子来说明。
Mapper接口
public interface TestMapper {
Object meth1(String para1, String para2);
/**
* p1、p2可以是任何合法的java命名方式
* xml中可以根据此标示来获取到具体传入的值
*/
Object meth2(@Param("p1")String para1, @Param("p2")String para2);
}
mapper.xml
<select id="meth1" resultType="int">
select count(*) from test
where col1 = #{0}
and clo2 = #{1}
</select>
<select id="meth2" resultType="int">
select count(*) from test
where col1 = #{p1}
and clo2 = #{p2}
</select>
上述两种方法都行的通,上述statement中不需要指定parameterType。如果不使用@Param注解方式,那么可以通过#{0}、#{1}的方式来获取参数的值,注意function中的第一个参数是0;使用了注解就按注解中定义的名字来取。推荐使用注解的方式。在方法重构时,例如增加、减少或调整参数的顺序,如果使用非注解的方式,在修改xml时就显得比较麻烦,可能里面的${0}、${1}、${2}都需要调整,而且不明确,特别是参数较多的情况下。
strtus2的版本为2.2.3.1,默认是支持转换枚举型参数。有一个问题,例如在action中声明了一个枚举类型的变量testEnum,在action中有该变量对应的get、set方法,如果页面传入的值不是枚举类型中指定的值,这时action中的testEnum为null,但在前端的freemarker模板中通过${testEnum}又能获取到这个值,也就是前面页面传入值,此时并没有调用action的中getTestEnum方法,这个时候应该是从ValueStack中取到的,因为在请求action的时候,已经把请求的参数放入了ValueStack。如果页面上需要action处理后的判断testEnum是不是为null,就不能直接使用<#if testEnum??>了,这个时候就必须还要判断一下testEnum的对象类型,具体的方法参看:freemarker中判断对象类型
在freemarker中似乎没有instanceOf这个方法,有时候页面上需要来判断变量的类型,可以使用变通的方法,如下
<#if myVar.class.simpleName == "Object Type">
...
</#if>
在photoshop中需要把图片的某一部分复制到图片的另一位置,有两种方法,其一是先选取需要复制的部位,然后ctrl+c、ctrl+v,这时候就会把复制的内容粘贴到一个新图层,选取该图层后可以进行位置的调整;另外一种是先选取图片,然后同时按住ctrl+alt,用鼠标拖动到目的地即完成了复制,注意此时不会创建新图层。
firefox中对于页面的输入框,如果输入了一些信息,当通过F5刷新页面后,刚输入的信息还是给保留下来了,这个功能似乎是firefox独有的,有时候确实给用户输入带来了方便,但有些情况不希望保留。
其实解决这个问题很简单,如果不希望保留,只要在对应的input加上一个
autocomplete=”off”
即可,autocomplete默认是on,也就是开启的,它的作用是把输入框以前的输入记录显示出来。