<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/temp01.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.javadou.com" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/JavaDou" type="application/rss+xml"></fs:self_link><lastBuildDate>Thu, 28 Oct 2010 06:32:23 GMT</lastBuildDate><title>Java豆技术站点</title><description>Java</description><link>http://javadou.com</link><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><language>en</language><pubDate>Thu, 28 Oct 2010 06:32:55 GMT</pubDate><item><title>Spring注解@Component、@Repository、@Service、@Controller区别</title><link>http://javadou.com/spring-component-repository-service-controller-647/</link><content:encoded>&lt;p&gt;Spring 2.5 中除了提供 @Component 注释外，还定义了几个拥有特殊语义的注释，它们分别是：@Repository、@Service 和 @Controller。在目前的 Spring 版本中，这 3 个注释和 @Component 是等效的，但是从注释类的命名上，很容易看出这 3 个注释分别和持久层、业务层和控制层（Web 层）相对应。虽然目前这 3 个注释和 @Component 相比没有什么新意，但 Spring 将在以后的版本中为它们添加特殊的功能。所以，如果 Web 应用程序采用了经典的三层分层结构的话，最好在持久层、业务层和控制层分别采用 @Repository、@Service 和 @Controller 对分层中的类进行注释，而用 @Component 对那些比较中立的类进行注释。&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/429425424/JavaDou/feedsky/s.gif?r=http://javadou.com/spring-component-repository-service-controller-647/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/JavaDou/429425424/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/JavaDou/429425424/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://javadou.com/spring-component-repository-service-controller-647/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>Spring 2.5 中除了提供 Component 注释外，还定义了几个拥有特殊语义的注释，它们分别是：Repository、Service 和 Controller。在目前的 Spring 版本中，这 3 个注释和 Component 是等效的，但是从注释类的命名上，很容易看出...&lt;img src=&quot;http://www1.feedsky.com/t1/429425424/JavaDou/feedsky/s.gif?r=http://javadou.com/spring-component-repository-service-controller-647/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/JavaDou/429425424/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/JavaDou/429425424/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Spring</category><pubDate>Thu, 28 Oct 2010 14:32:23 +0800</pubDate><author>阿超</author><comments>http://javadou.com/spring-component-repository-service-controller-647/#comments</comments><guid isPermaLink="false">http://javadou.com/?p=647</guid><dc:creator>阿超</dc:creator><fs:srclink>http://javadou.com/spring-component-repository-service-controller-647/</fs:srclink><fs:srcfeed>http://javadou.com/feed</fs:srcfeed><fs:itemid>feedsky/JavaDou/~7779303/429425424/5888533</fs:itemid></item><item><title>spring beans的default-lazy-init 属性参数设置</title><link>http://javadou.com/spring-beans-default-lazy-init-645/</link><content:encoded>&lt;p&gt;spring在启动的时候，会默认加载会默认加载整个对象实例图，从初始化ACTION配置、到 service配置到dao配置、乃至到数据库连接、事务等等。这样可以减少web服务器在运行时的负担，但是对于开发者来说无疑是效率极低的一个设置了。&lt;/p&gt;
&lt;p&gt;还好，spring提供了default-lazy-init属性，其配置形式如下，applicationContext.xml中：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&amp;lt; beans  default-lazy-init =&amp;#8221;true&amp;#8221; &amp;gt;&lt;br /&gt;
&amp;lt; bean  class =&amp;#8221;org.xxxx.bean&amp;#8221; &amp;gt;&lt;/p&gt;
&lt;p&gt;。。。。。。&lt;/p&gt;
&lt;p&gt;&amp;lt;/beans&amp;gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;spring配置默认default-lazy-init为false，当配置为true时sping不会再去加载整个对象实例图，大大减少了初始化的时间，减少了spring的启动速度。&lt;/p&gt;
&lt;p&gt;这样做只是为了在开发过程中节约启动时间，在部署到实际环境中，倒是没必要设置default-lazy-init为true。毕竟部署到实际环境中不是经常的事，每次启动1分钟倒不是大问题，而且可以提高服务器效率。&lt;/p&gt;
&lt;p&gt;当然，也不是所有的beans都能设置default-lazy-init成为true.对于scheduler的bean不能用lazy-init&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&amp;lt; beans  default-lazy-init =&amp;#8221;true&amp;#8221; &amp;gt;&lt;br /&gt;
&amp;lt; bean  class =&amp;#8221;org.springframework.scheduling.quartz.SchedulerFactoryBean&amp;#8221; &amp;gt;&lt;br /&gt;
&amp;lt; property   name =&amp;#8221;triggers&amp;#8221; &amp;gt;&lt;br /&gt;
&amp;lt; list &amp;gt;&lt;br /&gt;
&amp;lt; ref   bean =&amp;#8221;buildHtmlTrigger&amp;#8221; /&amp;gt;&lt;br /&gt;
&amp;lt; ref   bean =&amp;#8221;askTrigger&amp;#8221; /&amp;gt;&lt;br /&gt;
&amp;lt; ref   bean =&amp;#8221;mailSenderTrigger&amp;#8221; /&amp;gt;&lt;br /&gt;
&amp;lt; ref   bean =&amp;#8221;topicDetailBuildTrigger&amp;#8221; /&amp;gt;&lt;br /&gt;
&amp;lt; ref   bean =&amp;#8221;forumBuildTrigger&amp;#8221; /&amp;gt;&lt;br /&gt;
&amp;lt; ref   bean =&amp;#8221;topicBuildTrigger&amp;#8221; /&amp;gt;&lt;br /&gt;
&amp;lt;/ list &amp;gt;&lt;br /&gt;
&amp;lt;/ property &amp;gt;&lt;br /&gt;
&amp;lt;/ bean &amp;gt;&lt;br /&gt;
&amp;lt;/ beans &amp;gt;&lt;br /&gt;
这样的话。所有的scheduler就都不管用了。所以请大家要注意。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;参考文献：&lt;a title=&quot;http://hi.baidu.com/mefeng47/blog/item/03f2baeec41c623aacafd5e6.html&quot; onclick=&quot;javascript:pageTracker._trackPageview('/outbound/article/hi.baidu.com');&quot; href=&quot;http://hi.baidu.com/mefeng47/blog/item/03f2baeec41c623aacafd5e6.html&quot;&gt;http://hi.baidu.com/mefeng47/blog/item/03f2baeec41c623aacafd5e6.html&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/429425425/JavaDou/feedsky/s.gif?r=http://javadou.com/spring-beans-default-lazy-init-645/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/JavaDou/429425425/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/JavaDou/429425425/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://javadou.com/spring-beans-default-lazy-init-645/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>spring在启动的时候，会默认加载会默认加载整个对象实例图，从初始化ACTION配置、到 service配置到dao配置、乃至到数据库连接、事务等等。这样可以减少web服务器在运行时的负担，但是对于开发者来说无疑是效率极低...&lt;img src=&quot;http://www1.feedsky.com/t1/429425425/JavaDou/feedsky/s.gif?r=http://javadou.com/spring-beans-default-lazy-init-645/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/JavaDou/429425425/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/JavaDou/429425425/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>spring</category><category>Spring</category><pubDate>Mon, 11 Oct 2010 11:08:38 +0800</pubDate><author>阿超</author><comments>http://javadou.com/spring-beans-default-lazy-init-645/#comments</comments><guid isPermaLink="false">http://javadou.com/?p=645</guid><dc:creator>阿超</dc:creator><fs:srclink>http://javadou.com/spring-beans-default-lazy-init-645/</fs:srclink><fs:srcfeed>http://javadou.com/feed</fs:srcfeed><fs:itemid>feedsky/JavaDou/~7779303/429425425/5888533</fs:itemid></item><item><title>mysql 常用日期函数整理</title><link>http://javadou.com/mysql-date-644/</link><content:encoded>&lt;p&gt;2008年11月18日 15:37&lt;br /&gt;
一、MySQL 获得当前日期时间 函数&lt;br /&gt;
1.1 获得当前日期+时间（date + time）函数：now()&lt;br /&gt;
mysql&amp;gt; select now();&lt;/p&gt;
&lt;p&gt;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;br /&gt;
| now() |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;br /&gt;
| 2008-08-08 22:20:46 |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;/p&gt;
&lt;p&gt;除了 now() 函数能获得当前的日期时间外，MySQL 中还有下面的函数：&lt;br /&gt;
current_timestamp()&lt;br /&gt;
,current_timestamp&lt;br /&gt;
,localtime()&lt;br /&gt;
,localtime&lt;br /&gt;
,localtimestamp &amp;#8212; (v4.0.6)&lt;br /&gt;
,localtimestamp() &amp;#8212; (v4.0.6)&lt;/p&gt;
&lt;p&gt;这些日期时间函数，都等同于 now()。鉴于 now() 函数简短易记，建议总是使用 now() 来替代上面列出的函数。&lt;br /&gt;
1.2 获得当前日期+时间（date + time）函数：sysdate()&lt;br /&gt;
sysdate() 日期时间函数跟 now() 类似，不同之处在于：now() 在执行开始时值就得到了， sysdate() 在函数执行时动态得到值。看下面的例子就明白了：&lt;br /&gt;
mysql&amp;gt; select now(), sleep(3), now();&lt;/p&gt;
&lt;p&gt;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;-+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;br /&gt;
| now() | sleep(3) | now() |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;-+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;br /&gt;
| 2008-08-08 22:28:21 | 0 | 2008-08-08 22:28:21 |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;-+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;/p&gt;
&lt;p&gt;mysql&amp;gt; select sysdate(), sleep(3), sysdate();&lt;/p&gt;
&lt;p&gt;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;-+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;br /&gt;
| sysdate() | sleep(3) | sysdate() |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;-+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;br /&gt;
| 2008-08-08 22:28:41 | 0 | 2008-08-08 22:28:44 |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;-+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;/p&gt;
&lt;p&gt;可以看到，虽然中途 sleep 3 秒，但 now() 函数两次的时间值是相同的； sysdate() 函数两次得到的时间值相差 3 秒。MySQL Manual 中是这样描述 sysdate() 的：Return the time at which the function executes。&lt;br /&gt;
sysdate() 日期时间函数，一般情况下很少用到。&lt;br /&gt;
2. 获得当前日期（date）函数：curdate()&lt;br /&gt;
mysql&amp;gt; select curdate();&lt;/p&gt;
&lt;p&gt;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;br /&gt;
| curdate() |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;br /&gt;
| 2008-08-08 |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;/p&gt;
&lt;p&gt;其中，下面的两个日期函数等同于 curdate()：&lt;br /&gt;
current_date()&lt;br /&gt;
,current_date&lt;/p&gt;
&lt;p&gt;3. 获得当前时间（time）函数：curtime()&lt;br /&gt;
mysql&amp;gt; select curtime();&lt;/p&gt;
&lt;p&gt;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;+&lt;br /&gt;
| curtime() |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;+&lt;br /&gt;
| 22:41:30 |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;+&lt;/p&gt;
&lt;p&gt;其中，下面的两个时间函数等同于 curtime()：&lt;br /&gt;
current_time()&lt;br /&gt;
,current_time&lt;/p&gt;
&lt;p&gt;4. 获得当前 UTC 日期时间函数：utc_date(), utc_time(), utc_timestamp()&lt;br /&gt;
mysql&amp;gt; select utc_timestamp(), utc_date(), utc_time(), now()&lt;/p&gt;
&lt;p&gt;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;br /&gt;
| utc_timestamp() | utc_date() | utc_time() | now() |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;br /&gt;
| 2008-08-08 14:47:11 | 2008-08-08 | 14:47:11 | 2008-08-08 22:47:11 |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;/p&gt;
&lt;p&gt;因为我国位于东八时区，所以本地时间 = UTC 时间 + 8 小时。UTC 时间在业务涉及多个国家和地区的时候，非常有用。&lt;/p&gt;
&lt;p&gt;二、MySQL 日期时间 Extract（选取） 函数。&lt;br /&gt;
1. 选取日期时间的各个部分：日期、时间、年、季度、月、日、小时、分钟、秒、微秒&lt;br /&gt;
set @dt = &amp;#8217;2008-09-10 07:15:30.123456&amp;#8242;;&lt;/p&gt;
&lt;p&gt;select date(@dt); &amp;#8212; 2008-09-10&lt;br /&gt;
select time(@dt); &amp;#8212; 07:15:30.123456&lt;br /&gt;
select year(@dt); &amp;#8212; 2008&lt;br /&gt;
select quarter(@dt); &amp;#8212; 3&lt;br /&gt;
select month(@dt); &amp;#8212; 9&lt;br /&gt;
select week(@dt); &amp;#8212; 36&lt;br /&gt;
select day(@dt); &amp;#8212; 10&lt;br /&gt;
select hour(@dt); &amp;#8212; 7&lt;br /&gt;
select minute(@dt); &amp;#8212; 15&lt;br /&gt;
select second(@dt); &amp;#8212; 30&lt;br /&gt;
select microsecond(@dt); &amp;#8212; 123456&lt;/p&gt;
&lt;p&gt;2. MySQL Extract() 函数，可以上面实现类似的功能：&lt;br /&gt;
set @dt = &amp;#8217;2008-09-10 07:15:30.123456&amp;#8242;;&lt;/p&gt;
&lt;p&gt;select extract(year from @dt); &amp;#8212; 2008&lt;br /&gt;
select extract(quarter from @dt); &amp;#8212; 3&lt;br /&gt;
select extract(month from @dt); &amp;#8212; 9&lt;br /&gt;
select extract(week from @dt); &amp;#8212; 36&lt;br /&gt;
select extract(day from @dt); &amp;#8212; 10&lt;br /&gt;
select extract(hour from @dt); &amp;#8212; 7&lt;br /&gt;
select extract(minute from @dt); &amp;#8212; 15&lt;br /&gt;
select extract(second from @dt); &amp;#8212; 30&lt;br /&gt;
select extract(microsecond from @dt); &amp;#8212; 123456&lt;/p&gt;
&lt;p&gt;select extract(year_month from @dt); &amp;#8212; 200809&lt;br /&gt;
select extract(day_hour from @dt); &amp;#8212; 1007&lt;br /&gt;
select extract(day_minute from @dt); &amp;#8212; 100715&lt;br /&gt;
select extract(day_second from @dt); &amp;#8212; 10071530&lt;br /&gt;
select extract(day_microsecond from @dt); &amp;#8212; 10071530123456&lt;br /&gt;
select extract(hour_minute from @dt); &amp;#8212; 715&lt;br /&gt;
select extract(hour_second from @dt); &amp;#8212; 71530&lt;br /&gt;
select extract(hour_microsecond from @dt); &amp;#8212; 71530123456&lt;br /&gt;
select extract(minute_second from @dt); &amp;#8212; 1530&lt;br /&gt;
select extract(minute_microsecond from @dt); &amp;#8212; 1530123456&lt;br /&gt;
select extract(second_microsecond from @dt); &amp;#8212; 30123456&lt;/p&gt;
&lt;p&gt;MySQL Extract() 函数除了没有date(),time() 的功能外，其他功能一应具全。并且还具有选取‘day_microsecond’ 等功能。注意这里不是只选取 day 和 microsecond，而是从日期的 day 部分一直选取到 microsecond 部分。够强悍的吧！&lt;br /&gt;
MySQL Extract() 函数唯一不好的地方在于：你需要多敲几次键盘。&lt;br /&gt;
3. MySQL dayof&amp;#8230; 函数：dayofweek(), dayofmonth(), dayofyear()&lt;br /&gt;
分别返回日期参数，在一周、一月、一年中的位置。&lt;br /&gt;
set @dt = &amp;#8217;2008-08-08&amp;#8242;;&lt;/p&gt;
&lt;p&gt;select dayofweek(@dt); &amp;#8212; 6&lt;br /&gt;
select dayofmonth(@dt); &amp;#8212; 8&lt;br /&gt;
select dayofyear(@dt); &amp;#8212; 221&lt;/p&gt;
&lt;p&gt;日期 &amp;#8217;2008-08-08&amp;#8242; 是一周中的第 6 天（1 = Sunday, 2 = Monday, &amp;#8230;, 7 = Saturday）；一月中的第 8 天；一年中的第 221 天。&lt;br /&gt;
4. MySQL week&amp;#8230; 函数：week(), weekofyear(), dayofweek(), weekday(), yearweek()&lt;br /&gt;
set @dt = &amp;#8217;2008-08-08&amp;#8242;;&lt;/p&gt;
&lt;p&gt;select week(@dt); &amp;#8212; 31&lt;br /&gt;
select week(@dt,3); &amp;#8212; 32&lt;br /&gt;
select weekofyear(@dt); &amp;#8212; 32&lt;/p&gt;
&lt;p&gt;select dayofweek(@dt); &amp;#8212; 6&lt;br /&gt;
select weekday(@dt); &amp;#8212; 4&lt;/p&gt;
&lt;p&gt;select yearweek(@dt); &amp;#8212; 200831&lt;/p&gt;
&lt;p&gt;MySQL week() 函数，可以有两个参数，具体可看手册。 weekofyear() 和 week() 一样，都是计算“某天”是位于一年中的第几周。 weekofyear(@dt) 等价于 week(@dt,3)。&lt;br /&gt;
MySQL weekday() 函数和 dayofweek() 类似，都是返回“某天”在一周中的位置。不同点在于参考的标准， weekday：(0 = Monday, 1 = Tuesday, &amp;#8230;, 6 = Sunday)； dayofweek：（1 = Sunday, 2 = Monday, &amp;#8230;, 7 = Saturday）&lt;br /&gt;
MySQL yearweek() 函数，返回 year(2008) + week 位置(31)。&lt;br /&gt;
5. MySQL 返回星期和月份名称函数：dayname(), monthname()&lt;br /&gt;
set @dt = &amp;#8217;2008-08-08&amp;#8242;;&lt;/p&gt;
&lt;p&gt;select dayname(@dt); &amp;#8212; Friday&lt;br /&gt;
select monthname(@dt); &amp;#8212; August&lt;/p&gt;
&lt;p&gt;思考，如何返回中文的名称呢？&lt;br /&gt;
6. MySQL last_day() 函数：返回月份中的最后一天。&lt;br /&gt;
select last_day(&amp;#8217;2008-02-01&amp;#8242;); &amp;#8212; 2008-02-29&lt;br /&gt;
select last_day(&amp;#8217;2008-08-08&amp;#8242;); &amp;#8212; 2008-08-31&lt;/p&gt;
&lt;p&gt;MySQL last_day() 函数非常有用，比如我想得到当前月份中有多少天，可以这样来计算：&lt;br /&gt;
mysql&amp;gt; select now(), day(last_day(now())) as days;&lt;/p&gt;
&lt;p&gt;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;+&lt;br /&gt;
| now() | days |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;+&lt;br /&gt;
| 2008-08-09 11:45:45 | 31 |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;+&lt;/p&gt;
&lt;p&gt;三、MySQL 日期时间计算函数&lt;br /&gt;
1. MySQL 为日期增加一个时间间隔：date_add()&lt;br /&gt;
set @dt = now();&lt;/p&gt;
&lt;p&gt;select date_add(@dt, interval 1 day); &amp;#8212; add 1 day&lt;br /&gt;
select date_add(@dt, interval 1 hour); &amp;#8212; add 1 hour&lt;br /&gt;
select date_add(@dt, interval 1 minute); &amp;#8212; &amp;#8230;&lt;br /&gt;
select date_add(@dt, interval 1 second);&lt;br /&gt;
select date_add(@dt, interval 1 microsecond);&lt;br /&gt;
select date_add(@dt, interval 1 week);&lt;br /&gt;
select date_add(@dt, interval 1 month);&lt;br /&gt;
select date_add(@dt, interval 1 quarter);&lt;br /&gt;
select date_add(@dt, interval 1 year);&lt;/p&gt;
&lt;p&gt;select date_add(@dt, interval -1 day); &amp;#8212; sub 1 day&lt;/p&gt;
&lt;p&gt;MySQL adddate(), addtime()函数，可以用 date_add() 来替代。下面是 date_add() 实现 addtime() 功能示例：&lt;br /&gt;
mysql&amp;gt; set @dt = &amp;#8217;2008-08-09 12:12:33&amp;#8242;;&lt;/p&gt;
&lt;p&gt;mysql&amp;gt;&lt;br /&gt;
mysql&amp;gt; select date_add(@dt, interval &amp;#8217;01:15:30&amp;#8242; hour_second);&lt;/p&gt;
&lt;p&gt;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;br /&gt;
| date_add(@dt, interval &amp;#8217;01:15:30&amp;#8242; hour_second) |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;br /&gt;
| 2008-08-09 13:28:03 |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;/p&gt;
&lt;p&gt;mysql&amp;gt; select date_add(@dt, interval &amp;#8217;1 01:15:30&amp;#8242; day_second);&lt;/p&gt;
&lt;p&gt;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-+&lt;br /&gt;
| date_add(@dt, interval &amp;#8217;1 01:15:30&amp;#8242; day_second) |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-+&lt;br /&gt;
| 2008-08-10 13:28:03 |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-+&lt;/p&gt;
&lt;p&gt;date_add() 函数，分别为 @dt 增加了“1小时 15分 30秒” 和 “1天 1小时 15分 30秒”。建议：总是使用 date_add() 日期时间函数来替代 adddate(), addtime()。&lt;br /&gt;
2. MySQL 为日期减去一个时间间隔：date_sub()&lt;br /&gt;
mysql&amp;gt; select date_sub(&amp;#8217;1998-01-01 00:00:00&amp;#8242;, interval &amp;#8217;1 1:1:1&amp;#8242; day_second);&lt;/p&gt;
&lt;p&gt;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-+&lt;br /&gt;
| date_sub(&amp;#8217;1998-01-01 00:00:00&amp;#8242;, interval &amp;#8217;1 1:1:1&amp;#8242; day_second) |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-+&lt;br /&gt;
| 1997-12-30 22:58:59 |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-+&lt;/p&gt;
&lt;p&gt;MySQL date_sub() 日期时间函数 和 date_add() 用法一致，不再赘述。另外，MySQL 中还有两个函数 subdate(), subtime()，建议，用 date_sub() 来替代。&lt;br /&gt;
3. MySQL 另类日期函数：period_add(P,N), period_diff(P1,P2)&lt;br /&gt;
函数参数“P” 的格式为“YYYYMM” 或者 “YYMM”，第二个参数“N” 表示增加或减去 N month（月）。&lt;br /&gt;
MySQL period_add(P,N)：日期加/减去N月。&lt;br /&gt;
mysql&amp;gt; select period_add(200808,2), period_add(20080808,-2)&lt;/p&gt;
&lt;p&gt;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-+&lt;br /&gt;
| period_add(200808,2) | period_add(20080808,-2) |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-+&lt;br /&gt;
| 200810 | 20080806 |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-+&lt;/p&gt;
&lt;p&gt;MySQL period_diff(P1,P2)：日期 P1-P2，返回 N 个月。&lt;br /&gt;
mysql&amp;gt; select period_diff(200808, 200801);&lt;/p&gt;
&lt;p&gt;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;+&lt;br /&gt;
| period_diff(200808, 200801) |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;+&lt;br /&gt;
| 7 |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;+&lt;/p&gt;
&lt;p&gt;在 MySQL 中，这两个日期函数，一般情况下很少用到。&lt;br /&gt;
4. MySQL 日期、时间相减函数：datediff(date1,date2), timediff(time1,time2)&lt;br /&gt;
MySQL datediff(date1,date2)：两个日期相减 date1 &amp;#8211; date2，返回天数。&lt;br /&gt;
select datediff(&amp;#8217;2008-08-08&amp;#8242;, &amp;#8217;2008-08-01&amp;#8242;); &amp;#8212; 7&lt;br /&gt;
select datediff(&amp;#8217;2008-08-01&amp;#8242;, &amp;#8217;2008-08-08&amp;#8242;); &amp;#8212; -7&lt;/p&gt;
&lt;p&gt;MySQL timediff(time1,time2)：两个日期相减 time1 &amp;#8211; time2，返回 time 差值。&lt;br /&gt;
select timediff(&amp;#8217;2008-08-08 08:08:08&amp;#8242;, &amp;#8217;2008-08-08 00:00:00&amp;#8242;); &amp;#8212; 08:08:08&lt;br /&gt;
select timediff(&amp;#8217;08:08:08&amp;#8242;, &amp;#8217;00:00:00&amp;#8242;); &amp;#8212; 08:08:08&lt;/p&gt;
&lt;p&gt;注意：timediff(time1,time2) 函数的两个参数类型必须相同。&lt;/p&gt;
&lt;p&gt;四、MySQL 日期转换函数、时间转换函数&lt;br /&gt;
1. MySQL （时间、秒）转换函数：time_to_sec(time), sec_to_time(seconds)&lt;br /&gt;
select time_to_sec(&amp;#8217;01:00:05&amp;#8242;); &amp;#8212; 3605&lt;br /&gt;
select sec_to_time(3605); &amp;#8212; &amp;#8217;01:00:05&amp;#8242;&lt;/p&gt;
&lt;p&gt;2. MySQL （日期、天数）转换函数：to_days(date), from_days(days)&lt;br /&gt;
select to_days(&amp;#8217;0000-00-00&amp;#8242;); &amp;#8212; 0&lt;br /&gt;
select to_days(&amp;#8217;2008-08-08&amp;#8242;); &amp;#8212; 733627&lt;/p&gt;
&lt;p&gt;select from_days(0); &amp;#8212; &amp;#8217;0000-00-00&amp;#8242;&lt;br /&gt;
select from_days(733627); &amp;#8212; &amp;#8217;2008-08-08&amp;#8242;&lt;/p&gt;
&lt;p&gt;3. MySQL Str to Date （字符串转换为日期）函数：str_to_date(str, format)&lt;br /&gt;
select str_to_date(&amp;#8217;08/09/2008&amp;#8242;, &amp;#8216;%m/%d/%Y&amp;#8217;); &amp;#8212; 2008-08-09&lt;br /&gt;
select str_to_date(&amp;#8217;08/09/08&amp;#8242; , &amp;#8216;%m/%d/%y&amp;#8217;); &amp;#8212; 2008-08-09&lt;br /&gt;
select str_to_date(&amp;#8217;08.09.2008&amp;#8242;, &amp;#8216;%m.%d.%Y&amp;#8217;); &amp;#8212; 2008-08-09&lt;br /&gt;
select str_to_date(&amp;#8217;08:09:30&amp;#8242;, &amp;#8216;%h:%i:%s&amp;#8217;); &amp;#8212; 08:09:30&lt;br /&gt;
select str_to_date(&amp;#8217;08.09.2008 08:09:30&amp;#8242;, &amp;#8216;%m.%d.%Y %h:%i:%s&amp;#8217;); &amp;#8212; 2008-08-09 08:09:30&lt;/p&gt;
&lt;p&gt;可以看到，str_to_date(str,format) 转换函数，可以把一些杂乱无章的字符串转换为日期格式。另外，它也可以转换为时间。“format” 可以参看 MySQL 手册。&lt;br /&gt;
4. MySQL Date/Time to Str（日期/时间转换为字符串）函数：date_format(date,format), time_format(time,format)&lt;br /&gt;
mysql&amp;gt; select date_format(&amp;#8217;2008-08-08 22:23:00&amp;#8242;, &amp;#8216;%W %M %Y&amp;#8217;);&lt;/p&gt;
&lt;p&gt;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;br /&gt;
| date_format(&amp;#8217;2008-08-08 22:23:00&amp;#8242;, &amp;#8216;%W %M %Y&amp;#8217;) |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;br /&gt;
| Friday August 2008 |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;/p&gt;
&lt;p&gt;mysql&amp;gt; select date_format(&amp;#8217;2008-08-08 22:23:01&amp;#8242;, &amp;#8216;%Y%m%d%H%i%s&amp;#8217;);&lt;/p&gt;
&lt;p&gt;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-+&lt;br /&gt;
| date_format(&amp;#8217;2008-08-08 22:23:01&amp;#8242;, &amp;#8216;%Y%m%d%H%i%s&amp;#8217;) |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-+&lt;br /&gt;
| 20080808222301 |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-+&lt;/p&gt;
&lt;p&gt;mysql&amp;gt; select time_format(&amp;#8217;22:23:01&amp;#8242;, &amp;#8216;%H.%i.%s&amp;#8217;);&lt;/p&gt;
&lt;p&gt;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-+&lt;br /&gt;
| time_format(&amp;#8217;22:23:01&amp;#8242;, &amp;#8216;%H.%i.%s&amp;#8217;) |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-+&lt;br /&gt;
| 22.23.01 |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-+&lt;/p&gt;
&lt;p&gt;MySQL 日期、时间转换函数：date_format(date,format), time_format(time,format) 能够把一个日期/时间转换成各种各样的字符串格式。它是 str_to_date(str,format) 函数的 一个逆转换。&lt;br /&gt;
5. MySQL 获得国家地区时间格式函数：get_format()&lt;br /&gt;
MySQL get_format() 语法：&lt;br /&gt;
get_format(date|time|datetime, &amp;#8216;eur&amp;#8217;|'usa&amp;#8217;|'jis&amp;#8217;|'iso&amp;#8217;|'internal&amp;#8217;&lt;/p&gt;
&lt;p&gt;MySQL get_format() 用法的全部示例：&lt;br /&gt;
select get_format(date,&amp;#8217;usa&amp;#8217;) ; &amp;#8212; &amp;#8216;%m.%d.%Y&amp;#8217;&lt;br /&gt;
select get_format(date,&amp;#8217;jis&amp;#8217;) ; &amp;#8212; &amp;#8216;%Y-%m-%d&amp;#8217;&lt;br /&gt;
select get_format(date,&amp;#8217;iso&amp;#8217;) ; &amp;#8212; &amp;#8216;%Y-%m-%d&amp;#8217;&lt;br /&gt;
select get_format(date,&amp;#8217;eur&amp;#8217;) ; &amp;#8212; &amp;#8216;%d.%m.%Y&amp;#8217;&lt;br /&gt;
select get_format(date,&amp;#8217;internal&amp;#8217;) ; &amp;#8212; &amp;#8216;%Y%m%d&amp;#8217;&lt;br /&gt;
select get_format(datetime,&amp;#8217;usa&amp;#8217;) ; &amp;#8212; &amp;#8216;%Y-%m-%d %H.%i.%s&amp;#8217;&lt;br /&gt;
select get_format(datetime,&amp;#8217;jis&amp;#8217;) ; &amp;#8212; &amp;#8216;%Y-%m-%d %H:%i:%s&amp;#8217;&lt;br /&gt;
select get_format(datetime,&amp;#8217;iso&amp;#8217;) ; &amp;#8212; &amp;#8216;%Y-%m-%d %H:%i:%s&amp;#8217;&lt;br /&gt;
select get_format(datetime,&amp;#8217;eur&amp;#8217;) ; &amp;#8212; &amp;#8216;%Y-%m-%d %H.%i.%s&amp;#8217;&lt;br /&gt;
select get_format(datetime,&amp;#8217;internal&amp;#8217;) ; &amp;#8212; &amp;#8216;%Y%m%d%H%i%s&amp;#8217;&lt;br /&gt;
select get_format(time,&amp;#8217;usa&amp;#8217;) ; &amp;#8212; &amp;#8216;%h:%i:%s %p&amp;#8217;&lt;br /&gt;
select get_format(time,&amp;#8217;jis&amp;#8217;) ; &amp;#8212; &amp;#8216;%H:%i:%s&amp;#8217;&lt;br /&gt;
select get_format(time,&amp;#8217;iso&amp;#8217;) ; &amp;#8212; &amp;#8216;%H:%i:%s&amp;#8217;&lt;br /&gt;
select get_format(time,&amp;#8217;eur&amp;#8217;) ; &amp;#8212; &amp;#8216;%H.%i.%s&amp;#8217;&lt;br /&gt;
select get_format(time,&amp;#8217;internal&amp;#8217;) ; &amp;#8212; &amp;#8216;%H%i%s&amp;#8217;&lt;/p&gt;
&lt;p&gt;MySQL get_format() 函数在实际中用到机会的比较少。&lt;br /&gt;
6. MySQL 拼凑日期、时间函数：makdedate(year,dayofyear), maketime(hour,minute,second)&lt;br /&gt;
select makedate(2001,31); &amp;#8212; &amp;#8217;2001-01-31&amp;#8242;&lt;br /&gt;
select makedate(2001,32); &amp;#8212; &amp;#8217;2001-02-01&amp;#8242;&lt;/p&gt;
&lt;p&gt;select maketime(12,15,30); &amp;#8212; &amp;#8217;12:15:30&amp;#8242;&lt;/p&gt;
&lt;p&gt;五、MySQL 时间戳（Timestamp）函数&lt;br /&gt;
1. MySQL 获得当前时间戳函数：current_timestamp, current_timestamp()&lt;br /&gt;
mysql&amp;gt; select current_timestamp, current_timestamp();&lt;/p&gt;
&lt;p&gt;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;br /&gt;
| current_timestamp | current_timestamp() |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;br /&gt;
| 2008-08-09 23:22:24 | 2008-08-09 23:22:24 |&lt;br /&gt;
+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;+&lt;/p&gt;
&lt;p&gt;2. MySQL （Unix 时间戳、日期）转换函数：&lt;br /&gt;
unix_timestamp(),&lt;br /&gt;
unix_timestamp(date),&lt;br /&gt;
from_unixtime(unix_timestamp),&lt;br /&gt;
from_unixtime(unix_timestamp,format)&lt;/p&gt;
&lt;p&gt;下面是示例：&lt;br /&gt;
select unix_timestamp(); &amp;#8212; 1218290027&lt;br /&gt;
select unix_timestamp(&amp;#8217;2008-08-08&amp;#8242;); &amp;#8212; 1218124800&lt;br /&gt;
select unix_timestamp(&amp;#8217;2008-08-08 12:30:00&amp;#8242;); &amp;#8212; 1218169800&lt;/p&gt;
&lt;p&gt;select from_unixtime(1218290027); &amp;#8212; &amp;#8217;2008-08-09 21:53:47&amp;#8242;&lt;br /&gt;
select from_unixtime(1218124800); &amp;#8212; &amp;#8217;2008-08-08 00:00:00&amp;#8242;&lt;br /&gt;
select from_unixtime(1218169800); &amp;#8212; &amp;#8217;2008-08-08 12:30:00&amp;#8242;&lt;/p&gt;
&lt;p&gt;select from_unixtime(1218169800, &amp;#8216;%Y %D %M %h:%i:%s %x&amp;#8217;); &amp;#8212; &amp;#8217;2008 8th August 12:30:00 2008&amp;#8242;&lt;/p&gt;
&lt;p&gt;3. MySQL 时间戳（timestamp）转换、增、减函数：&lt;br /&gt;
timestamp(date) &amp;#8212; date to timestamp&lt;br /&gt;
timestamp(dt,time) &amp;#8212; dt + time&lt;br /&gt;
timestampadd(unit,interval,datetime_expr) &amp;#8211;&lt;br /&gt;
timestampdiff(unit,datetime_expr1,datetime_expr2) &amp;#8211;&lt;/p&gt;
&lt;p&gt;请看示例部分：&lt;br /&gt;
select timestamp(&amp;#8217;2008-08-08&amp;#8242;); &amp;#8212; 2008-08-08 00:00:00&lt;br /&gt;
select timestamp(&amp;#8217;2008-08-08 08:00:00&amp;#8242;, &amp;#8217;01:01:01&amp;#8242;); &amp;#8212; 2008-08-08 09:01:01&lt;br /&gt;
select timestamp(&amp;#8217;2008-08-08 08:00:00&amp;#8242;, &amp;#8217;10 01:01:01&amp;#8242;); &amp;#8212; 2008-08-18 09:01:01&lt;/p&gt;
&lt;p&gt;select timestampadd(day, 1, &amp;#8217;2008-08-08 08:00:00&amp;#8242;); &amp;#8212; 2008-08-09 08:00:00&lt;br /&gt;
select date_add(&amp;#8217;2008-08-08 08:00:00&amp;#8242;, interval 1 day); &amp;#8212; 2008-08-09 08:00:00&lt;/p&gt;
&lt;p&gt;MySQL timestampadd() 函数类似于 date_add()。&lt;br /&gt;
select timestampdiff(year,&amp;#8217;2002-05-01&amp;#8242;,&amp;#8217;2001-01-01&amp;#8242;); &amp;#8212; -1&lt;br /&gt;
select timestampdiff(day ,&amp;#8217;2002-05-01&amp;#8242;,&amp;#8217;2001-01-01&amp;#8242;); &amp;#8212; -485&lt;br /&gt;
select timestampdiff(hour,&amp;#8217;2008-08-08 12:00:00&amp;#8242;,&amp;#8217;2008-08-08 00:00:00&amp;#8242;); &amp;#8212; -12&lt;/p&gt;
&lt;p&gt;select datediff(&amp;#8217;2008-08-08 12:00:00&amp;#8242;, &amp;#8217;2008-08-01 00:00:00&amp;#8242;); &amp;#8212; 7&lt;/p&gt;
&lt;p&gt;MySQL timestampdiff() 函数就比 datediff() 功能强多了，datediff() 只能计算两个日期（date）之间相差的天数。&lt;/p&gt;
&lt;p&gt;六、MySQL 时区（timezone）转换函数&lt;br /&gt;
convert_tz(dt,from_tz,to_tz)&lt;/p&gt;
&lt;p&gt;select convert_tz(&amp;#8217;2008-08-08 12:00:00&amp;#8242;, &amp;#8216;+08:00&amp;#8242;, &amp;#8216;+00:00&amp;#8242;); &amp;#8212; 2008-08-08 04:00:00&lt;/p&gt;
&lt;p&gt;时区转换也可以通过 date_add, date_sub, timestampadd 来实现。&lt;br /&gt;
select date_add(&amp;#8217;2008-08-08 12:00:00&amp;#8242;, interval -8 hour); &amp;#8212; 2008-08-08 04:00:00&lt;br /&gt;
select date_sub(&amp;#8217;2008-08-08 12:00:00&amp;#8242;, interval 8 hour); &amp;#8212; 2008-08-08 04:00:00&lt;br /&gt;
select timestampadd(hour, -8, &amp;#8217;2008-08-08 12:00:00&amp;#8242;); &amp;#8212; 2008-08-08 04:00:00&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/429425426/JavaDou/feedsky/s.gif?r=http://javadou.com/mysql-date-644/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/JavaDou/429425426/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/JavaDou/429425426/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://javadou.com/mysql-date-644/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>2008年11月18日 15:37 一、MySQL 获得当前日期时间 函数 1.1 获得当前日期+时间（date + time）函数：now() mysql&amp;62; select now(); +&amp;8212;&amp;8212;&amp;8212;&amp;8212;&amp;8212;&amp;8212;&amp;8212;+ &amp;124; now() &amp;124; +&amp;8212;&amp;8212;&amp;8212;&amp;8212;&amp;8212;&amp;8212;&amp;8212;+ &amp;124;...&lt;img src=&quot;http://www1.feedsky.com/t1/429425426/JavaDou/feedsky/s.gif?r=http://javadou.com/mysql-date-644/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/JavaDou/429425426/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/JavaDou/429425426/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>date</category><category>mysql</category><pubDate>Thu, 12 Aug 2010 17:01:17 +0800</pubDate><author>阿超</author><comments>http://javadou.com/mysql-date-644/#comments</comments><guid isPermaLink="false">http://javadou.com/?p=644</guid><dc:creator>阿超</dc:creator><fs:srclink>http://javadou.com/mysql-date-644/</fs:srclink><fs:srcfeed>http://javadou.com/feed</fs:srcfeed><fs:itemid>feedsky/JavaDou/~7779303/429425426/5888533</fs:itemid></item><item><title>Apache ActiveMQ（2）教程</title><link>http://javadou.com/apache-activemq-2-642/</link><content:encoded>&lt;p&gt;Apache ActiveMQ教程（二） 2008-06-03 14:25&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;五、&lt;/strong&gt;&lt;strong&gt;Point-to-Point (&lt;/strong&gt;&lt;strong&gt;点对点&lt;/strong&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;strong&gt;消息模式开发流程&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;strong&gt;、生产者（producer&lt;/strong&gt;&lt;strong&gt;）开发流程（ProducerTool.java&lt;/strong&gt;&lt;strong&gt;）：&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.1 &lt;/strong&gt;&lt;strong&gt;创建&lt;/strong&gt;&lt;strong&gt;Connection&lt;/strong&gt;&lt;strong&gt;：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;根据&lt;/strong&gt;&lt;strong&gt;url&lt;/strong&gt;&lt;strong&gt;，&lt;/strong&gt;&lt;strong&gt;user&lt;/strong&gt;&lt;strong&gt;和&lt;/strong&gt;&lt;strong&gt;password&lt;/strong&gt;&lt;strong&gt;创建一个&lt;/strong&gt;&lt;strong&gt;jms Connection&lt;/strong&gt;&lt;strong&gt;。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.2 &lt;/strong&gt;&lt;strong&gt;创建&lt;/strong&gt;&lt;strong&gt;Session&lt;/strong&gt;&lt;strong&gt;：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;在&lt;/strong&gt;&lt;strong&gt;connection&lt;/strong&gt;&lt;strong&gt;的基础上创建一个&lt;/strong&gt;&lt;strong&gt;session&lt;/strong&gt;&lt;strong&gt;，同时设置是否支持事务和&lt;/strong&gt;&lt;strong&gt;ACKNOWLEDGE&lt;/strong&gt;&lt;strong&gt;标识。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.3 &lt;/strong&gt;&lt;strong&gt;创建&lt;/strong&gt;&lt;strong&gt;Destination&lt;/strong&gt;&lt;strong&gt;对象：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;需指定其对应的主题（&lt;/strong&gt;&lt;strong&gt;subject&lt;/strong&gt;&lt;strong&gt;）名称，&lt;/strong&gt;&lt;strong&gt;producer&lt;/strong&gt;&lt;strong&gt;和&lt;/strong&gt;&lt;strong&gt;consumer&lt;/strong&gt;&lt;strong&gt;将根据&lt;/strong&gt;&lt;strong&gt;subject&lt;/strong&gt;&lt;strong&gt;来发送&lt;/strong&gt;&lt;strong&gt;/&lt;/strong&gt;&lt;strong&gt;接收对应的消息。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.4 &lt;/strong&gt;&lt;strong&gt;创建&lt;/strong&gt;&lt;strong&gt;MessageProducer&lt;/strong&gt;&lt;strong&gt;：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;根据&lt;/strong&gt;&lt;strong&gt;Destination&lt;/strong&gt;&lt;strong&gt;创建&lt;/strong&gt;&lt;strong&gt;MessageProducer&lt;/strong&gt;&lt;strong&gt;对象，同时设置其持久模式。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.5 &lt;/strong&gt;&lt;strong&gt;发送消息到队列（&lt;/strong&gt;&lt;strong&gt;Queue&lt;/strong&gt;&lt;strong&gt;）：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;封装&lt;/strong&gt;&lt;strong&gt;TextMessage&lt;/strong&gt;&lt;strong&gt;消息，使用&lt;/strong&gt;&lt;strong&gt;MessageProducer&lt;/strong&gt;&lt;strong&gt;的&lt;/strong&gt;&lt;strong&gt;send&lt;/strong&gt;&lt;strong&gt;方法将消息发送出去。&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;strong&gt;、消费者（consumer&lt;/strong&gt;&lt;strong&gt;）开发流程（ConsumerTool.java&lt;/strong&gt;&lt;strong&gt;）：&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;2.1 &lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;实现&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;MessageListener&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;接口：&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;消费者类必须实现&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;MessageListener&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;接口，然后在&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;onMessage()&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;方法中监听消息的到达并处理。&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;2.2 &lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;创建&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;Connection&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;：&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;根据&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;url&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;，&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;user&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;和&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;password&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;创建一个&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;jms Connection&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;，如果是&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;durable&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;模式，还需要给&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;connection&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;设置一个&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;clientId&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;。&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;2.3 &lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;创建&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;Session&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;和&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;Destination&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;：&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;与&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;ProducerTool.java&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;中的流程类似，不再赘述。&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;2.4&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;创建&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;replyProducer&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;【可选】：&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;可以用来将消息处理结果发送给&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;producer&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;。&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;2.5 &lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;创建&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;MessageConsumer&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;：&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;根据&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;Destination&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;创建&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;MessageConsumer&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;对象。&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;2.6 &lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;消费&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;message&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;：&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;在&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;onMessage()&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;方法中接收&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;producer&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;发送过来的消息进行处理，并可以通过&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;replyProducer&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;反馈信息给&lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;producer&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if&lt;/strong&gt; (message.getJMSReplyTo() != &lt;strong&gt;null&lt;/strong&gt;) {&lt;/p&gt;
&lt;p&gt;replyProducer.send(message.getJMSReplyTo(),&lt;/p&gt;
&lt;p&gt;session.createTextMessage(&amp;#8220;Reply: &amp;#8221; + message.getJMSMessageID()));&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/429425427/JavaDou/feedsky/s.gif?r=http://javadou.com/apache-activemq-2-642/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/JavaDou/429425427/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/JavaDou/429425427/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://javadou.com/apache-activemq-2-642/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>Apache ActiveMQ教程（二） 2008-06-03 14:25 五、Point-to-Point (点对点)消息模式开发流程 1、生产者（producer）开发流程（ProducerTool.java）： 1.1 创建Connection： 根据url，user和password创建一个jms Connection。 1.2 创建Session： 在connecti...&lt;img src=&quot;http://www1.feedsky.com/t1/429425427/JavaDou/feedsky/s.gif?r=http://javadou.com/apache-activemq-2-642/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/JavaDou/429425427/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/JavaDou/429425427/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>activemq</category><category>jms</category><category>开发框架</category><pubDate>Wed, 21 Jul 2010 16:08:04 +0800</pubDate><author>阿超</author><comments>http://javadou.com/apache-activemq-2-642/#comments</comments><guid isPermaLink="false">http://javadou.com/?p=642</guid><dc:creator>阿超</dc:creator><fs:srclink>http://javadou.com/apache-activemq-2-642/</fs:srclink><fs:srcfeed>http://javadou.com/feed</fs:srcfeed><fs:itemid>feedsky/JavaDou/~7779303/429425427/5888533</fs:itemid></item><item><title>ActiveMQ基础笔记</title><link>http://javadou.com/activemq-notebook-640/</link><content:encoded>&lt;p&gt;一.   ActiveMQ是什么?&lt;/p&gt;
&lt;p&gt;ActiveMQ is the most popular and powerful open source Message Bus.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台&lt;br /&gt;
已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。&lt;/p&gt;
&lt;p&gt;下面是它的特性列表&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;多种语言和协议编写客户端。语言: Java, C, C++,      C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS      Notification,XMPP,AMQP&lt;/li&gt;
&lt;li&gt;完全支持JMS1.1和J2EE 1.4规范  (持久化,XA消息,事务)&lt;/li&gt;
&lt;li&gt;对Spring的支持,ActiveMQ可以很容得内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性&lt;/li&gt;
&lt;li&gt;通过了常见J2EE服务器(如 Geronimo,JBoss 4,      GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上&lt;/li&gt;
&lt;li&gt;支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA&lt;/li&gt;
&lt;li&gt;支持通过JDBC和journal提供高速的消息持久化&lt;/li&gt;
&lt;li&gt;从设计上保证了高性能的集群,客户端-服务器,点对点&lt;/li&gt;
&lt;li&gt;支持Ajax&lt;/li&gt;
&lt;li&gt;支持与Axis的整合&lt;/li&gt;
&lt;li&gt;可以很容易得调用内嵌JMS provider,进行测试&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;二.   ActiveMQ的竞争者&lt;/p&gt;
&lt;p&gt;1，其他开源 JMS provider(资料来自 java-source.net) :&lt;br /&gt;
jbossmq(jboss 4)&lt;br /&gt;
jboss messaging (jboss 5)&lt;br /&gt;
joram-4.3.21  2006-09-22&lt;br /&gt;
openjms-0.7.7-alpha-3.zip December 26, 2005&lt;br /&gt;
mantamq&lt;/p&gt;
&lt;p&gt;ubermq&lt;br /&gt;
SomnifugiJMS  2005-7-27&lt;/p&gt;
&lt;p&gt;开源的JMS Provider大部分都已经停止发展了,剩下的几个都是找到了东家,和某种J2EE 服务器挂钩,比如jboss mq 与jboss,joram与jonas(objectweb组织),ActiveMQ 与Geronimo(ASF APACHE基金组织),而在这3个之间，从网络底层来看,只有ActiveMQ使用了NIO,单从这个角度来看ActiveMQ在性能上会有一定的优势。&lt;/p&gt;
&lt;p&gt;2.商业JMS provider&lt;br /&gt;
IBM WebSphere MQ&lt;br /&gt;
BEA WebLogic JMS&lt;br /&gt;
Oracle AQ&lt;br /&gt;
NonStop Server for Java Message Service(JMS)&lt;br /&gt;
Sun Java System Message Queue&lt;br /&gt;
Sonic jms&lt;br /&gt;
TIBCO Enterprise For JMS&lt;br /&gt;
iLinkMQ (国内)&lt;/p&gt;
&lt;p&gt;现在的商业J2EE 应用服务器大部分都会有JMS Provider的实现,毕竟应用服务器都已经花费不薄,也不在乎在里面送一个JMS Provider了,当然还是有独立的比如IBM WebSphere MQ,Sonic JMS ,前者肯定是商用MQ（这个概念不仅仅是JMS Provier了，只能说JMS 只是它提供的一个应用）中间的巨无霸了。&lt;/p&gt;
&lt;p&gt;从这点来看,ActiveMQ明显的竞争者并不多,因为它是作为独立的开源JMS Provider出现的,很容易被用于多种结构设计中，使用ActiveMQ作为默认JMS Provider的开源项目有ServiceMix,Geronimo.&lt;/p&gt;
&lt;p&gt;三.安装ActiveMQ&lt;/p&gt;
&lt;p&gt;首先去http://activemq.apache.org/download.html 下载最新版本4.1.0release， 解压apache-activemq-4.1-incubator.zip(或者apache-activemq-4.1-incubator.tar.gz)目录如下:&lt;/p&gt;
&lt;p&gt;+bin       (windows下面的bat和unix/linux下面的sh)&lt;br /&gt;
+conf      (activeMQ配置目录,包含最基本的activeMQ配置文件)&lt;br /&gt;
+data      (默认是空的)&lt;br /&gt;
+docs      (index,replease版本里面没有文档,-.-b不知道为啥不带)&lt;br /&gt;
+example   (几个例子&lt;br /&gt;
+lib       (activemMQ使用到的lib)&lt;br /&gt;
-apache-activemq-4.1-incubator.jar  (ActiveMQ的binary)&lt;br /&gt;
-LICENSE.txt&lt;br /&gt;
-NOTICE.txt&lt;br /&gt;
-README.txt&lt;br /&gt;
-user-guide.html&lt;/p&gt;
&lt;p&gt;你可以使用bin\activemq.bat(activemq) 启动,如果一切顺利,你就会看见类似下面的信息：&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://javadou.com/wordpress/wp-content/uploads/2010/07/jms.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-641 aligncenter&quot; title=&quot;jms&quot; src=&quot;http://javadou.com/wordpress/wp-content/uploads/2010/07/jms-300x283.jpg&quot; alt=&quot;&quot; width=&quot;393&quot; height=&quot;283&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;几个小提示&lt;/p&gt;
&lt;p&gt;1. 这个仅仅是最基础的ActiveMQ的配置,很多地方都没有配置因此不要直接使用这个配置用于生产系统&lt;/p&gt;
&lt;p&gt;2. 有的时候由于端口被占用,导致ActiveMQ错误,ActiveMQ可能需要以下端口1099(JMX),61616(默认的TransportConnector)&lt;/p&gt;
&lt;p&gt;3. 如果没有物理网卡,或者MS的LoopBackAdpater Multicast会报一个错误&lt;/p&gt;
&lt;p&gt;四.   测试你的ActiveMQ&lt;/p&gt;
&lt;p&gt;由于ActiveMQ是一个独立的jms provider,所以我们不需要其他任何第三方服务器就可以马上做我们的测试了.编译example目录下面的程序ProducerTool/ConsumerTool 是JMS参考里面提到的典型应用,Producer产生消息,Consumer消费消息，而且这个例子还可以加入参数帮助你测试刚才启动的本地ActiveMQ或者是远程的ActiveMQ&lt;/p&gt;
&lt;p&gt;ProducerTool [url] broker的地址,默认的是tcp://localhost:61616&lt;br /&gt;
[true|flase] 是否使用topic,默认是false&lt;br /&gt;
[subject] subject的名字,默认是TOOL.DEFAULT&lt;br /&gt;
[durabl] 是否持久化消息,默认是false&lt;br /&gt;
[messagecount] 发送消息数量,默认是10&lt;br /&gt;
[messagesize] 消息长度,默认是255&lt;br /&gt;
[clientID] durable为true的时候,需要配置clientID&lt;br /&gt;
[timeToLive] 消息存活时间&lt;br /&gt;
[sleepTime] 发送消息中间的休眠时间&lt;br /&gt;
[transacte]  是否采用事务&lt;/p&gt;
&lt;p&gt;ConsumerTool [url] broker的地址,默认的是tcp://localhost:61616&lt;br /&gt;
[true|flase] 是否使用topic,默认是false&lt;br /&gt;
[subject] subject的名字,默认是TOOL.DEFAULT&lt;br /&gt;
[durabl] 是否持久化消息,默认是false&lt;br /&gt;
[maxiumMessages] 接受最大消息数量,0表示不限制&lt;br /&gt;
[clientID] durable为true的时候,需要配置clientID&lt;br /&gt;
[transacte]  是否采用事务&lt;br /&gt;
[sleepTime]  接受消息中间的休眠时间,默认是0,onMeesage方法不休眠&lt;br /&gt;
[receiveTimeOut] 接受超时&lt;/p&gt;
&lt;p&gt;我们可以这样使用:&lt;br /&gt;
先启动activeMQ，再打开两个命令窗口，都进入D:\activemq\example，一个运行：ant consumer,一个运行：ant producer，如果成功发送/接收了消息就OK了。&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/429425428/JavaDou/feedsky/s.gif?r=http://javadou.com/activemq-notebook-640/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/JavaDou/429425428/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/JavaDou/429425428/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://javadou.com/activemq-notebook-640/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>1. 多种语言和协议编写客户端。语言: Java, C, C++, C, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
   2. 完全支持JMS1.1和J2EE 1.4规范  (持久化,XA消息,事务)
   3. 对Spring的支持,ActiveMQ可以很容得内嵌...&lt;img src=&quot;http://www1.feedsky.com/t1/429425428/JavaDou/feedsky/s.gif?r=http://javadou.com/activemq-notebook-640/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/JavaDou/429425428/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/JavaDou/429425428/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>activemq</category><category>jms</category><category>开发框架</category><pubDate>Tue, 20 Jul 2010 08:06:30 +0800</pubDate><author>阿超</author><comments>http://javadou.com/activemq-notebook-640/#comments</comments><guid isPermaLink="false">http://javadou.com/?p=640</guid><dc:creator>阿超</dc:creator><fs:srclink>http://javadou.com/activemq-notebook-640/</fs:srclink><fs:srcfeed>http://javadou.com/feed</fs:srcfeed><fs:itemid>feedsky/JavaDou/~7779303/429425428/5888533</fs:itemid></item><item><title>Apache ActiveMQ (1)教程</title><link>http://javadou.com/apache-activemq-1-639/</link><content:encoded>&lt;p&gt;Apache ActiveMQ教程（一） 2008-06-03 11:05&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一、特性及优势&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1、实现JMS1.1规范，支持J2EE1.4以上&lt;/p&gt;
&lt;p&gt;2、可运行于任何jvm和大部分web容器（ActiveMQ works great in any JVM）&lt;/p&gt;
&lt;p&gt;3、支持多种语言客户端（java, C, C++, AJAX, ACTIONSCRIPT等等）&lt;/p&gt;
&lt;p&gt;4、支持多种协议（stomp，openwire，REST）&lt;/p&gt;
&lt;p&gt;5、良好的spring支持（ActiveMQ has great Spring Support）&lt;/p&gt;
&lt;p&gt;6、速度很快，JBossMQ的十倍（ActiveMQ is very fast; often 10x faster than JBossMQ.）&lt;/p&gt;
&lt;p&gt;7、与OpenJMS、JbossMQ等开源jms provider相比，ActiveMQ有Apache的支持，持续发展的优势明显。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;二、下载部署&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1、下载&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://activemq.apache.org/activemq-510-release.html&quot;&gt;http://activemq.apache.org/activemq-510-release.html&lt;/a&gt;，下载5.1.0 Windows Distribution版本&lt;/p&gt;
&lt;p&gt;2、安装&lt;/p&gt;
&lt;p&gt;直接解压至任意目录（如：d:\ apache-activemq-5.1.0）&lt;/p&gt;
&lt;p&gt;3、启动ActiveMQ服务器&lt;/p&gt;
&lt;p&gt;方法1：&lt;/p&gt;
&lt;p&gt;直接运行bin\activemq.bat&lt;/p&gt;
&lt;p&gt;方法2（在JVM中嵌套启动）：&lt;/p&gt;
&lt;p&gt;cd example&lt;/p&gt;
&lt;p&gt;ant embedBroker&lt;/p&gt;
&lt;p&gt;4、ActiveMQ消息管理后台系统：&lt;/p&gt;
&lt;p&gt;http://localhost:8161/admin&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;三、运行附带的示例程序&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;strong&gt;、Queue&lt;/strong&gt;&lt;strong&gt;消息示例：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;* 启动Queue消息消费者&lt;/p&gt;
&lt;p&gt;cd example&lt;/p&gt;
&lt;p&gt;ant consumer&lt;/p&gt;
&lt;p&gt;* 启动Queue消息生产者&lt;/p&gt;
&lt;p&gt;cd example&lt;/p&gt;
&lt;p&gt;ant producer&lt;/p&gt;
&lt;p&gt;简要说明：生产者（producer）发消息，消费者（consumer）接消息，发送/接收2000个消息后自动关闭&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;strong&gt;、Topic&lt;/strong&gt;&lt;strong&gt;消息示例：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;* 启动Topic消息消费者&lt;/p&gt;
&lt;p&gt;cd example&lt;/p&gt;
&lt;p&gt;ant topic-listener&lt;/p&gt;
&lt;p&gt;* 启动Topic消息生产者&lt;/p&gt;
&lt;p&gt;cd example&lt;/p&gt;
&lt;p&gt;ant topic-publisher&lt;/p&gt;
&lt;p&gt;简要说明：重复10轮，publisher每轮发送2000个消息，并等待获取listener的处理结果报告，然后进入下一轮发送，最后统计全局发送时间。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;四、&lt;/strong&gt;&lt;strong&gt;Queue&lt;/strong&gt;&lt;strong&gt;与&lt;/strong&gt;&lt;strong&gt;Topic&lt;/strong&gt;&lt;strong&gt;的比较&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;strong&gt;、JMS Queue&lt;/strong&gt;&lt;strong&gt;执行load balancer&lt;/strong&gt;&lt;strong&gt;语义：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一条消息仅能被一个consumer收到。如果在message发送的时候没有可用的consumer，那么它将被保存一直到能处理该message的consumer可用。如果一个consumer收到一条message后却不响应它，那么这条消息将被转到另一个consumer那儿。一个Queue可以有很多consumer，并且在多个可用的consumer中负载均衡。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;strong&gt;、Topic&lt;/strong&gt;&lt;strong&gt;实现publish&lt;/strong&gt;&lt;strong&gt;和subscribe&lt;/strong&gt;&lt;strong&gt;语义：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一条消息被publish时，它将发到所有感兴趣的订阅者，所以零到多个subscriber将接收到消息的一个拷贝。但是在消息代理接收到消息时，只有激活订阅的subscriber能够获得消息的一个拷贝。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;strong&gt;、分别对应两种消息模式：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Point-to-Point (点对点),Publisher/Subscriber Model (发布/订阅者)&lt;/p&gt;
&lt;p&gt;其中在Publicher/Subscriber 模式下又有Nondurable subscription（非持久订阅）和durable subscription (持久化订阅)2种消息处理方式。&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/429425429/JavaDou/feedsky/s.gif?r=http://javadou.com/apache-activemq-1-639/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/JavaDou/429425429/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/JavaDou/429425429/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://javadou.com/apache-activemq-1-639/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>Apache ActiveMQ教程（一） 2008-06-03 11:05 一、特性及优势 1、实现JMS1.1规范，支持J2EE1.4以上 2、可运行于任何jvm和大部分web容器（ActiveMQ works great in any JVM） 3、支持多种语言客户端（java, C, C++, AJAX, ACTIONSCRIPT等等） 4、支...&lt;img src=&quot;http://www1.feedsky.com/t1/429425429/JavaDou/feedsky/s.gif?r=http://javadou.com/apache-activemq-1-639/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/JavaDou/429425429/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/JavaDou/429425429/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>activemq</category><category>jms</category><category>apache</category><category>开发框架</category><pubDate>Mon, 19 Jul 2010 16:02:40 +0800</pubDate><author>阿超</author><comments>http://javadou.com/apache-activemq-1-639/#comments</comments><guid isPermaLink="false">http://javadou.com/?p=639</guid><dc:creator>阿超</dc:creator><fs:srclink>http://javadou.com/apache-activemq-1-639/</fs:srclink><fs:srcfeed>http://javadou.com/feed</fs:srcfeed><fs:itemid>feedsky/JavaDou/~7779303/429425429/5888533</fs:itemid></item><item><title>连接池泄露的问题：Timeout waiting for idle object</title><link>http://javadou.com/org-apache-commons-dbcp-sqlnestedexception-cannot-get-a-connection-pool-exhausted-causejava-util-nosuchelementexcep-638/</link><content:encoded>&lt;p&gt;问题描述:&lt;strong&gt;连接池泄露的问题：org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted, cause:java.util.NoSuchElementException: Timeout waiting for idle object&lt;/strong&gt;&lt;br /&gt;
问题同样适用于其他服务器,使用spring配置文件的可以加下面的参数&lt;br /&gt;
&amp;lt;property name=&amp;#8221;removeAbandoned&amp;#8221; value=&amp;#8221;true&amp;#8221;/&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;removeAbandonedTimeout&amp;#8221; value=&amp;#8221;60&amp;#8243;/&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;logAbandoned&amp;#8221; value=&amp;#8221;true&amp;#8221;/&amp;gt;&lt;/p&gt;
&lt;p&gt;1 问题描述&lt;br /&gt;
Web程序在tomcat刚开始运行时速度很快，但过一段时间后发现速度变得很慢。&lt;br /&gt;
检查日志输出，发现异常如下:&lt;br /&gt;
org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted, cause:&lt;br /&gt;
java.util.NoSuchElementException: Timeout waiting for idle object&lt;br /&gt;
同时在SQLServer事件探查器中发现，每执行一次sql语句都要产生Audit login事件，语句执行后产生&lt;br /&gt;
Audit logout事件。说明每一次tomcat都是重新打开新的连接。&lt;br /&gt;
2 问题解决&lt;br /&gt;
tomcat 的数据源定义提供了三个参数：&lt;br /&gt;
a. 如果设为true则tomcat自动检查恢复重新利用，没有正常关闭的Connection.（默认是false）&lt;br /&gt;
&amp;lt;parameter&amp;gt;&lt;br /&gt;
&amp;lt;name&amp;gt;removeAbandoned&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;value&amp;gt;true&amp;lt;/value&amp;gt;&lt;br /&gt;
&amp;lt;/parameter&amp;gt;&lt;br /&gt;
b. 设定连接在多少秒内被认为是放弃的连接，即可进行恢复利用。&lt;br /&gt;
&amp;lt;parameter&amp;gt;&lt;br /&gt;
&amp;lt;name&amp;gt;removeAbandonedTimeout&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;value&amp;gt;60&amp;lt;/value&amp;gt;&lt;br /&gt;
&amp;lt;/parameter&amp;gt;&lt;br /&gt;
c. 输出回收的日志，可以详细打印出异常从而发现是在那里发生了泄漏&lt;br /&gt;
&amp;lt;parameter&amp;gt;&lt;br /&gt;
&amp;lt;name&amp;gt;logAbandoned&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;value&amp;gt;true&amp;lt;/value&amp;gt;&lt;br /&gt;
&amp;lt;/parameter&amp;gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/429425430/JavaDou/feedsky/s.gif?r=http://javadou.com/org-apache-commons-dbcp-sqlnestedexception-cannot-get-a-connection-pool-exhausted-causejava-util-nosuchelementexcep-638/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/JavaDou/429425430/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/JavaDou/429425430/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://javadou.com/org-apache-commons-dbcp-sqlnestedexception-cannot-get-a-connection-pool-exhausted-causejava-util-nosuchelementexcep-638/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>问题描述:连接池泄露的问题：org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted, cause:java.util.NoSuchElementException: Timeout waiting for idle object 问题同样适用于其他服务器,使用spring配置文件的可以加下面的参...&lt;img src=&quot;http://www1.feedsky.com/t1/429425430/JavaDou/feedsky/s.gif?r=http://javadou.com/org-apache-commons-dbcp-sqlnestedexception-cannot-get-a-connection-pool-exhausted-causejava-util-nosuchelementexcep-638/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/JavaDou/429425430/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/JavaDou/429425430/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Java核心类</category><category>Spring</category><category>Hibernate</category><category>Timeout waiting for idle object</category><pubDate>Tue, 13 Jul 2010 18:58:47 +0800</pubDate><author>阿超</author><comments>http://javadou.com/org-apache-commons-dbcp-sqlnestedexception-cannot-get-a-connection-pool-exhausted-causejava-util-nosuchelementexcep-638/#comments</comments><guid isPermaLink="false">http://javadou.com/?p=638</guid><dc:creator>阿超</dc:creator><fs:srclink>http://javadou.com/org-apache-commons-dbcp-sqlnestedexception-cannot-get-a-connection-pool-exhausted-causejava-util-nosuchelementexcep-638/</fs:srclink><fs:srcfeed>http://javadou.com/feed</fs:srcfeed><fs:itemid>feedsky/JavaDou/~7779303/429425430/5888533</fs:itemid></item><item><title>jQuery autocomplete 导致页面光标自动定位到了文本框</title><link>http://javadou.com/jquery-autocomplete-page-cursor-input-635/</link><content:encoded>&lt;p&gt;在用jquery.autocomplete 进行自动匹配查询时,发现页面加载完成后,光标就自动停留在文本框,但是我并不想要这个功能,检查发现是由于多用了一个方法: 如下:&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;#name&amp;#8221;).focus().autocomplete(&lt;br /&gt;
&amp;#8220;/rule/ervicePkg.htm?method=queryByLikeName&amp;#8221;, {&lt;br /&gt;
scroll : false,&lt;br /&gt;
width : 150&lt;br /&gt;
});&lt;/p&gt;
&lt;p&gt;改成如下即可:&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;#name&amp;#8221;).focus().autocomplete(&lt;br /&gt;
&amp;#8220;/rule/ervicePkg.htm?method=queryByLikeName&amp;#8221;, {&lt;br /&gt;
scroll : false,&lt;br /&gt;
width : 150&lt;br /&gt;
});&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/429425431/JavaDou/feedsky/s.gif?r=http://javadou.com/jquery-autocomplete-page-cursor-input-635/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/JavaDou/429425431/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/JavaDou/429425431/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://javadou.com/jquery-autocomplete-page-cursor-input-635/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>在用jquery.autocomplete 进行自动匹配查询时,发现页面加载完成后,光标就自动停留在文本框,但是我并不想要这个功能,检查发现是由于多用了一个方法: 如下: $(&amp;8220;name&amp;8221;).focus().autocomplete( &amp;8220;/rule/ervicePkg.htm?method=que...&lt;img src=&quot;http://www1.feedsky.com/t1/429425431/JavaDou/feedsky/s.gif?r=http://javadou.com/jquery-autocomplete-page-cursor-input-635/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/JavaDou/429425431/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/JavaDou/429425431/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>jQuery</category><category>jquery</category><category>autocomplete</category><pubDate>Wed, 07 Jul 2010 06:30:44 +0800</pubDate><author>阿超</author><comments>http://javadou.com/jquery-autocomplete-page-cursor-input-635/#comments</comments><guid isPermaLink="false">http://javadou.com/?p=635</guid><dc:creator>阿超</dc:creator><fs:srclink>http://javadou.com/jquery-autocomplete-page-cursor-input-635/</fs:srclink><fs:srcfeed>http://javadou.com/feed</fs:srcfeed><fs:itemid>feedsky/JavaDou/~7779303/429425431/5888533</fs:itemid></item><item><title>hibernate C3P0连接池详细配置</title><link>http://javadou.com/hibernate-c3p0-config-634/</link><content:encoded>&lt;p&gt;&amp;lt;c3p0-config&amp;gt;&lt;br /&gt;
&amp;lt;default-config&amp;gt;&lt;br /&gt;
&amp;lt;!&amp;#8211;当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 &amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;acquireIncrement&amp;#8221;&amp;gt;3&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 &amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;acquireRetryAttempts&amp;#8221;&amp;gt;30&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;两次连接中间隔时间，单位毫秒。Default: 1000 &amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;acquireRetryDelay&amp;#8221;&amp;gt;1000&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;连接关闭时默认将所有未提交的操作回滚。Default: false &amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;autoCommitOnClose&amp;#8221;&amp;gt;false&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;c3p0将建一张名为Test的空表，并使用其自带的查询语句进行测试。如果定义了这个参数那么&lt;br /&gt;
属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作，它将只供c3p0测试&lt;br /&gt;
使用。Default: null&amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;automaticTestTable&amp;#8221;&amp;gt;Test&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效&lt;br /&gt;
保留，并在下次调用getConnection()的时候继续尝试获取连接。如果设为true，那么在尝试&lt;br /&gt;
获取连接失败后该数据源将申明已断开并永久关闭。Default: false&amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;breakAfterAcquireFailure&amp;#8221;&amp;gt;false&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;当连接池用完时客户端调用getConnection()后等待获取新连接的时间，超时后将抛出&lt;br /&gt;
SQLException,如设为0则无限期等待。单位毫秒。Default: 0 &amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;checkoutTimeout&amp;#8221;&amp;gt;100&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;通过实现ConnectionTester或QueryConnectionTester的类来测试连接。类名需制定全路径。&lt;br /&gt;
Default: com.mchange.v2.c3p0.impl.DefaultConnectionTester&amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;connectionTesterClassName&amp;#8221;&amp;gt;&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;指定c3p0 libraries的路径，如果（通常都是这样）在本地即可获得那么无需设置，默认null即可&lt;br /&gt;
Default: null&amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;factoryClassLocation&amp;#8221;&amp;gt;null&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;Strongly disrecommended. Setting this to true may lead to subtle and bizarre bugs.&lt;br /&gt;
（文档原文）作者强烈建议不使用的一个属性&amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;forceIgnoreUnresolvedTransactions&amp;#8221;&amp;gt;false&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;每60秒检查所有连接池中的空闲连接。Default: 0 &amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;idleConnectionTestPeriod&amp;#8221;&amp;gt;60&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;初始化时获取三个连接，取值应在minPoolSize与maxPoolSize之间。Default: 3 &amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;initialPoolSize&amp;#8221;&amp;gt;3&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 &amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;maxIdleTime&amp;#8221;&amp;gt;60&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;连接池中保留的最大连接数。Default: 15 &amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;maxPoolSize&amp;#8221;&amp;gt;15&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;JDBC的标准参数，用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements&lt;br /&gt;
属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。&lt;br /&gt;
如果maxStatements与maxStatementsPerConnection均为0，则缓存被关闭。Default: 0&amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;maxStatements&amp;#8221;&amp;gt;100&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0  &amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;maxStatementsPerConnection&amp;#8221;&amp;gt;&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;c3p0是异步操作的，缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能&lt;br /&gt;
通过多线程实现多个操作同时被执行。Default: 3&amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;numHelperThreads&amp;#8221;&amp;gt;3&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;当用户调用getConnection()时使root用户成为去获取连接的用户。主要用于连接池连接非c3p0&lt;br /&gt;
的数据源时。Default: null&amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;overrideDefaultUser&amp;#8221;&amp;gt;root&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;与overrideDefaultUser参数对应使用的一个参数。Default: null&amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;overrideDefaultPassword&amp;#8221;&amp;gt;password&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;密码。Default: null&amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;password&amp;#8221;&amp;gt;&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个一显著提高测试速度。注意：&lt;br /&gt;
测试的表必须在初始数据源的时候就存在。Default: null&amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;preferredTestQuery&amp;#8221;&amp;gt;select id from test where id=1&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;用户修改系统配置参数执行前最多等待300秒。Default: 300 &amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;propertyCycle&amp;#8221;&amp;gt;300&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的&lt;br /&gt;
时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable&lt;br /&gt;
等方法来提升连接测试的性能。Default: false &amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;testConnectionOnCheckout&amp;#8221;&amp;gt;false&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;如果设为true那么在取得连接的同时将校验连接的有效性。Default: false &amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;testConnectionOnCheckin&amp;#8221;&amp;gt;true&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;用户名。Default: null&amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;user&amp;#8221;&amp;gt;root&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!&amp;#8211;早期的c3p0版本对JDBC接口采用动态反射代理。在早期版本用途广泛的情况下这个参数&lt;br /&gt;
允许用户恢复到动态反射代理以解决不稳定的故障。最新的非反射代理更快并且已经开始&lt;br /&gt;
广泛的被使用，所以这个参数未必有用。现在原先的动态反射与新的非反射代理同时受到&lt;br /&gt;
支持，但今后可能的版本可能不支持动态反射代理。Default: false&amp;#8211;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;usesTraditionalReflectiveProxies&amp;#8221;&amp;gt;false&amp;lt;/property&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;property name=&amp;#8221;automaticTestTable&amp;#8221;&amp;gt;con_test&amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;checkoutTimeout&amp;#8221;&amp;gt;30000&amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;idleConnectionTestPeriod&amp;#8221;&amp;gt;30&amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;initialPoolSize&amp;#8221;&amp;gt;10&amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;maxIdleTime&amp;#8221;&amp;gt;30&amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;maxPoolSize&amp;#8221;&amp;gt;25&amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;minPoolSize&amp;#8221;&amp;gt;10&amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;maxStatements&amp;#8221;&amp;gt;0&amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;user-overrides user=&amp;#8221;swaldman&amp;#8221;&amp;gt;&lt;br /&gt;
&amp;lt;/user-overrides&amp;gt;&lt;br /&gt;
&amp;lt;/default-config&amp;gt;&lt;br /&gt;
&amp;lt;named-config name=&amp;#8221;dumbTestConfig&amp;#8221;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;maxStatements&amp;#8221;&amp;gt;200&amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;user-overrides user=&amp;#8221;poop&amp;#8221;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;#8221;maxStatements&amp;#8221;&amp;gt;300&amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;/user-overrides&amp;gt;&lt;br /&gt;
&amp;lt;/named-config&amp;gt;&lt;br /&gt;
&amp;lt;/c3p0-config&amp;gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/429425432/JavaDou/feedsky/s.gif?r=http://javadou.com/hibernate-c3p0-config-634/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/JavaDou/429425432/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/JavaDou/429425432/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://javadou.com/hibernate-c3p0-config-634/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>&amp;60;c3p0-config&amp;62; &amp;60;default-config&amp;62; &amp;60;!&amp;8211;当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 &amp;8211;&amp;62; &amp;60;property name=&amp;8221;acquireIncrement&amp;8221;&amp;62;3&amp;60;/property&amp;62; &amp;60;!&amp;8211;定义在从数据库获取新连接...&lt;img src=&quot;http://www1.feedsky.com/t1/429425432/JavaDou/feedsky/s.gif?r=http://javadou.com/hibernate-c3p0-config-634/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/JavaDou/429425432/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/JavaDou/429425432/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>c3p0</category><category>hibernate</category><category>Hibernate</category><pubDate>Tue, 06 Jul 2010 20:30:18 +0800</pubDate><author>阿超</author><comments>http://javadou.com/hibernate-c3p0-config-634/#comments</comments><guid isPermaLink="false">http://javadou.com/?p=634</guid><dc:creator>阿超</dc:creator><fs:srclink>http://javadou.com/hibernate-c3p0-config-634/</fs:srclink><fs:srcfeed>http://javadou.com/feed</fs:srcfeed><fs:itemid>feedsky/JavaDou/~7779303/429425432/5888533</fs:itemid></item><item><title>【锋利的JQuery】 学习笔记,锋利的JQuery电子书pdf学习笔记</title><link>http://javadou.com/feng-li-jquery-pdf-node-633/</link><content:encoded>&lt;p&gt;锋利的JQuery是一本不错的JQuery书，看完后感觉总体也不错，介绍的挺全面的，列举了大量的例子，比较易懂。&lt;br /&gt;
加上之前学过一点CSS方面的知识，所以在看选择器这部分也比较容易理解（很多都是CSS的写法）。&lt;br /&gt;
总体感觉，JQuery大置分成了几大块：选择器、DOM操作、事件、动画、AJAX。&lt;br /&gt;
本书都一一的介绍了，特别是选择器，几乎每种选择器都列举了一个例子，很容易看懂。&lt;br /&gt;
此文为读本书的过程中，记录的一些笔记，例子不是书里面的，只是觉得自己比较容易理解，就随便写了个。&lt;br /&gt;
如果有出错的地方，麻烦指正。&lt;/p&gt;
&lt;p&gt;// 锋利的JQuery 学习笔记&lt;br /&gt;
// dier&lt;br /&gt;
// 2009-10-17 至 2009-11-22&lt;/p&gt;
&lt;p&gt;//&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;- 第一章 认识JQuery &amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;页面加载事件（可以写多个ready()）&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
alert(&amp;#8220;hello world&amp;#8221;);&lt;br /&gt;
})&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;链式操作：JQuery允许你在一句代码中操做任何与其相关联的元素，包括其子元素、父元素等&lt;br /&gt;
//选择名称为myDiv的元素，为其自身添加css1的样式，然后再选择其所有子元素a，为其移除css2样式&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).addClass(&amp;#8220;css1&amp;#8243;).children(&amp;#8220;a&amp;#8221;).removeClass(&amp;#8220;css2&amp;#8243;);&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;JQuery中获得一个对象的所有子元素内容&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).html()&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;JQuery中的变量 与 DOM中的变量&lt;br /&gt;
var $myVar = &amp;#8220;&amp;#8221;;&lt;br /&gt;
var myVar = &amp;#8220;&amp;#8221;;&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;DOM对象 转换成 JQuery对象&lt;br /&gt;
var obj = documnet.getElementById(&amp;#8220;myDiv&amp;#8221;);&lt;br /&gt;
var $obj = $(obj);&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;JQuery对象 转换成 DOM对象&lt;br /&gt;
var $obj = $(&amp;#8220;#myDiv&amp;#8221;);&lt;br /&gt;
var obj = $obj.get(0);  //或者var obj = $obj[0];&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;释放JQuery对$符号的控制权&lt;br /&gt;
JQuery.noConflict();&lt;/p&gt;
&lt;p&gt;//&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;- 第二章 JQuery选择器 &amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;JQuery完善的处理机制&lt;br /&gt;
document.getElementById(&amp;#8220;test&amp;#8221;).style.color = &amp;#8220;red&amp;#8221;; //如果test不存在，则页面出现异常&lt;br /&gt;
$(&amp;#8220;#test&amp;#8221;).css(&amp;#8220;color&amp;#8221;,&amp;#8221;red&amp;#8221;); //哪怕页面没有名称为test的元素，也不会报错。它是一个JQuery对象&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;判断页面是否选择的对象&lt;br /&gt;
if( $(&amp;#8220;.class&amp;#8221;).length &amp;amp;gt; 0 ){&lt;br /&gt;
// todo something&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;基本选择器&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;)    //根据给定的ID选择匹配的元素，返回：单个元素&lt;br /&gt;
$(&amp;#8220;.myClass&amp;#8221;) //根据给定的样式名称选择匹配的元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;div&amp;#8221;) //根据给定的元素名称选择匹配的元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;#myDiv,div.myClass,span&amp;#8221;) //根据给定的规则选择匹配的元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;*&amp;#8221;) //选择页面所有元素，返回：集合元素&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;层次选择器&lt;br /&gt;
$(&amp;#8220;div span&amp;#8221;) //选择所有DIV元素下的所有SPAN元素（所有后代元素），返回：集合元素&lt;br /&gt;
$(&amp;#8220;div&amp;amp;gt;span&amp;#8221;) //选择所有DIV元素下的SPAN子元素（仅子元素），返回：集合元素&lt;br /&gt;
$(&amp;#8220;.myClass+div&amp;#8221;) //选择样式名称为myClass的下一个DIV元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;.myClass+div&amp;#8221;) //等价于 $(&amp;#8220;.myClass&amp;#8221;).next(&amp;#8220;div&amp;#8221;);&lt;br /&gt;
$(&amp;#8220;.myClass~div&amp;#8221;) //选择样式名称为myClass之后的所有DIV元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;.myClass~div&amp;#8221;) //等价于 $(&amp;#8220;.myClass&amp;#8221;).nextAll();&lt;br /&gt;
$(&amp;#8220;.myClass&amp;#8221;).siblings(&amp;#8220;div&amp;#8221;) //选择样式名称为myClass的元素的所有同辈DIV元素（无论前后），返回集合元素&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;过滤选择器（index从0开始）&lt;br /&gt;
$(&amp;#8220;div:first&amp;#8221;) //选择所有DIV元素下的第一个DIV元素，返回：单个元素&lt;br /&gt;
$(&amp;#8220;div:last&amp;#8221;) //选择所有DIV元素下的最后一个DIV元素，返回：单个元素&lt;br /&gt;
$(&amp;#8220;div:not(.myClass)&amp;#8221;) //选择所有样式不包括myClass的DIV元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;div:even&amp;#8221;) //选择所有索引是偶数的DIV元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;div:odd&amp;#8221;) //选择所有索引是奇数的DIV元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;div:eq(index)&amp;#8221;) //选择所有索引等于index的DIV元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;div:gt(index)&amp;#8221;) //选择所有索引大于index的DIV元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;div:lt(index)&amp;#8221;) //选择所有索引小于index的DIV元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;:header&amp;#8221;) //选择所有标题元素（h1,h2,h3），返回：集合元素&lt;br /&gt;
$(&amp;#8220;div:animated&amp;#8221;) //选择所有正在执行去画的DIV元素，返回：集合元素&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;子元素过滤选择器（index从1开始）&lt;br /&gt;
$(&amp;#8220;:nth-child(index/even/odd)&amp;#8221;) //选择每个父元素下的第index/偶数/奇数个子元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;:first-child&amp;#8221;) //选择每个父元素下的第一个子元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;:last-child&amp;#8221;) //选择每个父元素下的最后一个子元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;ul li:only-child&amp;#8221;) //在UL元素中选择只有一个LI元素的子元素，返回：集合元素&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;内容过滤选择器&lt;br /&gt;
$(&amp;#8220;:contains(text)&amp;#8221;) //选择所有内容包含text的元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;div:empty&amp;#8221;) //选择所有内容为空的DIV元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;div:has(span)&amp;#8221;) //选择所有含有SPAN子元素的DIV元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;div:parent&amp;#8221;) //选择所有含有子元素的DIV元素，返回：集合元素&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;可见性选择器&lt;br /&gt;
$(&amp;#8220;:hidden&amp;#8221;) //选择所有不可见的元素（type=&amp;#8221;hidden&amp;#8221; style=&amp;#8221;display:none&amp;#8221; style=&amp;#8221;visibility:none&amp;#8221;），返回：集合元素&lt;br /&gt;
$(&amp;#8220;:visible&amp;#8221;) //选择所有可见的元素，返回：集合元素&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;属性过滤选择器&lt;br /&gt;
$(&amp;#8220;[id]&amp;#8220;) //选择所有含有id属性的元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;[class=myClass]&amp;#8220;) //选择所有class属性值是myClass的元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;[class!=myClass]&amp;#8220;) //选择所有class属性值不是myClass的元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;[alt^=begin]&amp;#8220;) //选择所有alt属性值以begin开始的元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;[alt^=end]&amp;#8220;) //选择所有alt属性值以end结束的元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;[alt*=some]&amp;#8220;) //选择所有alt属性值含有some的元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;div[id][class=myClass]&amp;#8220;) //选择所有含有id属性的并且class属性值是myClass的元素，返回：集合元素&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;表单对象属性选择器&lt;br /&gt;
$(&amp;#8220;#myForm:enabled&amp;#8221;) //选择ID属性为myForm的表单的所有可用元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;#myForm:disabled&amp;#8221;) //选择ID属性为myForm的表单的所有不可用元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;#myForm:checked&amp;#8221;) //选择ID属性为myForm的表单的所有所有被选中的元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;#myForm:selected&amp;#8221;) //选择ID属性为myForm的表单的所有所有被选中的元素，返回：集合元素&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;表单选择器&lt;br /&gt;
$(&amp;#8220;:input&amp;#8221;) //选择所有&amp;amp;lt;input&amp;amp;gt; &amp;amp;lt;select&amp;amp;gt; &amp;amp;lt;button&amp;amp;gt; &amp;amp;lt;textarea&amp;amp;gt;元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;:text&amp;#8221;) //选择所有单行文本框元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;:password&amp;#8221;) //选择所有密码框元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;:radio&amp;#8221;) //选择所有单选框元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;:checkbox&amp;#8221;) //选择所有复选框元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;:submit&amp;#8221;) //选择所有提交按钮元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;:image&amp;#8221;) //选择所有图片按钮元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;:reset&amp;#8221;) //选择所有重置按钮元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;:button&amp;#8221;) //选择所有按钮元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;:file&amp;#8221;) //选择所有上传域元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;:hidden&amp;#8221;) //选择所有不可见域元素，返回：集合元素&lt;br /&gt;
$(&amp;#8220;:text&amp;#8221;) //选择所有单选文本框元素，返回：集合元素&lt;/p&gt;
&lt;p&gt;//&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;- 第三章 JQuery中的DOM操作 &amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;查找元素节点&lt;br /&gt;
var str = $(&amp;#8220;#myDiv&amp;#8221;).text(); //&amp;amp;lt;div id=&amp;#8221;myDiv&amp;#8221; title=&amp;#8221;hello&amp;#8221;&amp;amp;gt;123&amp;amp;lt;/div&amp;amp;gt;&lt;br /&gt;
alert(str); //结果：123&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;查找属性节点&lt;br /&gt;
var str = $(&amp;#8220;#myDiv&amp;#8221;).attr(&amp;#8220;title&amp;#8221;); //&amp;amp;lt;div id=&amp;#8221;myDiv&amp;#8221; title=&amp;#8221;hello&amp;#8221;&amp;amp;gt;123&amp;amp;lt;/div&amp;amp;gt;&lt;br /&gt;
alert(str); //结果：hello&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;创建元素节点&lt;br /&gt;
var $li1 = $(&amp;#8220;&amp;amp;lt;span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;#8221;); //传入元素标记，自动包装并创建第一个li元素对象&lt;br /&gt;
var $li2 = $(&amp;#8220;&amp;amp;lt;span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;#8221;); //第二个,创建时需要遵循XHTML规则（闭合、小写）&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).append($li1); //往id为myDiv的元素中添加一个元素&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).append($li2); //结果：&amp;amp;lt;div id=&amp;#8221;myDiv&amp;#8221;&amp;amp;gt;&amp;amp;lt;span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;/div&amp;amp;gt;&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;#myDIv&amp;#8221;).append($li1).append($li2); //客串：传说中的链式写法，省一行代码 ^_^&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;创建文本节点&lt;br /&gt;
var $li1 = $(&amp;#8220;&amp;amp;lt;span&amp;amp;gt;first&amp;amp;lt;/span&amp;amp;gt;&amp;#8221;);&lt;br /&gt;
var $li2 = $(&amp;#8220;&amp;amp;lt;span&amp;amp;gt;second&amp;amp;lt;/span&amp;amp;gt;&amp;#8221;);&lt;br /&gt;
$(&amp;#8220;#myDIv&amp;#8221;).append($li1).append($li2);&lt;br /&gt;
//结果：&amp;amp;lt;div id=&amp;#8221;myDiv&amp;#8221;&amp;amp;gt;&amp;amp;lt;span&amp;amp;gt;first&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;span&amp;amp;gt;second&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;/div&amp;amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;创建属性节点&lt;br /&gt;
var $li1 = $(&amp;#8220;&amp;amp;lt;span title=&amp;#8221;111&amp;#8243;&amp;amp;gt;first&amp;amp;lt;/span&amp;amp;gt;&amp;#8221;);&lt;br /&gt;
var $li2 = $(&amp;#8220;&amp;amp;lt;span title=&amp;#8221;222&amp;#8243;&amp;amp;gt;second&amp;amp;lt;/span&amp;amp;gt;&amp;#8221;);&lt;br /&gt;
$(&amp;#8220;#myDIv&amp;#8221;).append($li1).append($li2);&lt;br /&gt;
//结果：&amp;amp;lt;div id=&amp;#8221;myDiv&amp;#8221;&amp;amp;gt;&amp;amp;lt;span title=&amp;#8221;111&amp;#8243;&amp;amp;gt;first&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;span title=&amp;#8221;222&amp;#8243;&amp;amp;gt;second&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;/div&amp;amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;插入节点&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).append(&amp;#8220;&amp;amp;lt;span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;#8221;); //往id为myDiv的元素插入span元素&lt;br /&gt;
$(&amp;#8220;&amp;amp;lt;span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;#8221;).appendTo(&amp;#8220;#myDiv&amp;#8221;); //倒过来，将span元素插入到id为myDiv的元素&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;#myDiv&amp;#8221;).prepend(&amp;#8220;&amp;amp;lt;span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;#8221;); //往id为myDiv的元素内最前面插入span元素&lt;br /&gt;
$(&amp;#8220;&amp;amp;lt;span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;#8221;).prependTo(&amp;#8220;#myDiv&amp;#8221;); //倒过来，将span元素插入到id为myDiv的元素内的最前面&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;#myDiv&amp;#8221;).after(&amp;#8220;&amp;amp;lt;span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;#8221;); //往id为myDiv的元素后面插入span元素（同级，不是子元素）&lt;br /&gt;
$(&amp;#8220;&amp;amp;lt;span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;#8221;).insertAfter(&amp;#8220;#myDiv&amp;#8221;); //倒过来，将span元素插入到id为myDiv的元素后面（同级，不是子元素）&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;#myDiv&amp;#8221;).before(&amp;#8220;&amp;amp;lt;span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;#8221;); //往id为myDiv的元素前面插入span元素（同级，不是子元素）&lt;br /&gt;
$(&amp;#8220;&amp;amp;lt;span&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;#8221;).insertBefore(&amp;#8220;#myDiv&amp;#8221;); //倒过来，将span元素插入到id为myDiv的元素前面（同级，不是子元素）&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;删除节点&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).remove(); //将id为myDiv的元素移除&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;清空节点&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).remove(&amp;#8220;span&amp;#8221;); //将id为myDiv的元素内的所有span元素移除&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;复制节点&lt;br /&gt;
$(&amp;#8220;#myDiv span&amp;#8221;).click( function(){ //点击id为myDiv的元素内的span元素，触发click事件&lt;br /&gt;
$(this).clone().appendTo(&amp;#8220;#myDiv&amp;#8221;); //将span元素克隆，然后再添加到id为myDiv的元素内&lt;br /&gt;
$(this).clone(true).appendTo(&amp;#8220;#myDiv&amp;#8221;); //如果clone传入true参数，表示同时复制事件&lt;br /&gt;
})&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;替换节点&lt;br /&gt;
$(&amp;#8220;p&amp;#8221;).replaceWith(&amp;#8220;&amp;amp;lt;strong&amp;amp;gt;您好&amp;amp;lt;/strong&amp;amp;gt;&amp;#8221;); //将所有p元素替换成后者 &amp;amp;lt;p&amp;amp;gt;您好&amp;amp;lt;/p&amp;amp;gt; &amp;#8211;&amp;amp;gt; &amp;amp;lt;strong&amp;amp;gt;您好&amp;amp;lt;/strong&amp;amp;gt;&lt;br /&gt;
$(&amp;#8220;&amp;amp;lt;strong&amp;amp;gt;您好&amp;amp;lt;/strong&amp;amp;gt;&amp;#8221;).replaceAll(&amp;#8220;p&amp;#8221;); //倒过来写，同上&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;包裹节点&lt;br /&gt;
$(&amp;#8220;strong&amp;#8221;).wrap(&amp;#8220;&amp;amp;lt;b&amp;amp;gt;&amp;amp;lt;/b&amp;amp;gt;&amp;#8221;); //用b元素把所有strong元素单独包裹起来 &amp;amp;lt;b&amp;amp;gt;&amp;amp;lt;strong&amp;amp;gt;您好&amp;amp;lt;/strong&amp;amp;gt;&amp;amp;lt;/b&amp;amp;gt;&amp;amp;lt;b&amp;amp;gt;&amp;amp;lt;strong&amp;amp;gt;您好&amp;amp;lt;/strong&amp;amp;gt;&amp;amp;lt;/b&amp;amp;gt;&lt;br /&gt;
$(&amp;#8220;strong&amp;#8221;).wrapAll(&amp;#8220;&amp;amp;lt;b&amp;amp;gt;&amp;amp;lt;/b&amp;amp;gt;&amp;#8221;); //用b元素把所有strong元素全部包裹起来 &amp;amp;lt;b&amp;amp;gt;&amp;amp;lt;strong&amp;amp;gt;您好&amp;amp;lt;/strong&amp;amp;gt;&amp;amp;lt;strong&amp;amp;gt;您好&amp;amp;lt;/strong&amp;amp;gt;&amp;amp;lt;/b&amp;amp;gt;&lt;br /&gt;
$(&amp;#8220;strong&amp;#8221;).wrapInner(&amp;#8220;&amp;amp;lt;b&amp;amp;gt;&amp;amp;lt;/b&amp;amp;gt;&amp;#8221;); //把b元素包裹在strong元素内 &amp;amp;lt;strong&amp;amp;gt;&amp;amp;lt;b&amp;amp;gt;您好&amp;amp;lt;/b&amp;amp;gt;&amp;amp;lt;/strong&amp;amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;属性操作&lt;br /&gt;
var txt = $(&amp;#8220;#myDiv&amp;#8221;).arrt(&amp;#8220;title&amp;#8221;); //获取id为myDiv的元素的title属性&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).attr(&amp;#8220;title&amp;#8221;,&amp;#8221;我是标题内容&amp;#8221;); //设置id为myDiv的元素的title属性的值&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).attr({&amp;#8220;title&amp;#8221;:&amp;#8221;我是标题内容&amp;#8221;, &amp;#8220;alt&amp;#8221;:&amp;#8221;我还是标题&amp;#8221;); //一次性设置多个属性的值&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).removeArrt(&amp;#8220;alt&amp;#8221;); //移除id为myDiv的元素的title属性&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;样式操作&lt;br /&gt;
var txt = $(&amp;#8220;#myDiv&amp;#8221;).arrt(&amp;#8220;class&amp;#8221;); //获取id为myDiv的元素的样式&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).attr(&amp;#8220;class&amp;#8221;,&amp;#8221;myClass&amp;#8221;); //设置id为myDiv的元素的样式&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).addClass(&amp;#8220;other&amp;#8221;); //在id为myDiv的元素中追加样式&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).removeClass(&amp;#8220;other&amp;#8221;); //在id为myDiv的元素中移除other样式&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).removeClass(&amp;#8220;myClass other&amp;#8221;); //在id为myDiv的元素中移除myClass和other多个样式&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).removeClass(); //在id为myDiv的元素中移除所有样式&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).toggleClass(&amp;#8220;other&amp;#8221;); //切换样式，在有other样式和没other样式之间切换&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).hasClass(&amp;#8220;other&amp;#8221;); //判断是否有other样式&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;设置和获取HTML、文本和值&lt;br /&gt;
alert( $(&amp;#8220;#myDiv&amp;#8221;).html() ); //获取id为myDiv的元素的HTML代码（相当于innerHTML）&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).html(&amp;#8220;&amp;amp;lt;span&amp;amp;gt;hello&amp;amp;lt;/span&amp;amp;gt;&amp;#8221;); //设置id为myDiv的元素的HTML代码&lt;/p&gt;
&lt;p&gt;alert( $(&amp;#8220;#myDiv&amp;#8221;).text() ); //获取id为myDiv的元素的HTML代码（相当于innerText）&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).text(&amp;#8220;hello&amp;#8221;); //设置id为myDiv的元素的HTML代码&lt;/p&gt;
&lt;p&gt;alert( $(&amp;#8220;#myInput&amp;#8221;).val() ); //获取id为myDiv的元素的value值（支持文本框、下拉框、单选框、复选框等）&lt;br /&gt;
$(&amp;#8220;#myInput&amp;#8221;).val(&amp;#8220;hello&amp;#8221;); //设置id为myDiv的元素的value值（下拉框、单选框、复选框带有选中效果）&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;遍历节点&lt;br /&gt;
var $cList = $(&amp;#8220;#myDiv&amp;#8221;).children(); //获取id为myDiv的元素的子元素（只考虑子元素，不考虑后代元素）&lt;br /&gt;
var $sNext = $(&amp;#8220;#myDiv&amp;#8221;).next(); //获取id为myDiv的元素的下一个同辈元素&lt;br /&gt;
var $sPrev = $(&amp;#8220;#myDiv&amp;#8221;).prev(); //获取id为myDiv的元素的上一个同辈元素&lt;br /&gt;
var $sSibl = $(&amp;#8220;#myDiv&amp;#8221;).siblings(); //获取id为myDiv的元素的所有同辈元素&lt;br /&gt;
var $pClos = $(&amp;#8220;#myDiv&amp;#8221;).closest(&amp;#8220;span&amp;#8221;); //获取id为myDiv的元素本身开始，最接近的span元素（向上查找）&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;CSS-DOM操作&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).css(&amp;#8220;color&amp;#8221;); //获取id为myDiv的元素的color样式的值&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).css(&amp;#8220;color&amp;#8221;, &amp;#8220;blue&amp;#8221;); //设置id为myDiv的元素的color样式的值&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).css({&amp;#8220;color&amp;#8221;:&amp;#8221;blue&amp;#8221;, &amp;#8220;fontSize&amp;#8221;:&amp;#8221;12px&amp;#8221;}); //设置id为myDiv的元素的color样式的值（多个）&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;#myDiv&amp;#8221;).css(&amp;#8220;opacity&amp;#8221;, &amp;#8220;0.5&amp;#8243;); //设置id为myDiv的元素的透明度（兼容浏览器）&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;#myDiv&amp;#8221;).css(&amp;#8220;height&amp;#8221;); //获取id为myDiv的元素的高度（单位：px，兼容浏览器）&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).height(); //同上（实际高度）&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;#myDiv&amp;#8221;).css(&amp;#8220;width&amp;#8221;); //获取id为myDiv的元素的宽度（单位：px，兼容浏览器）&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).width(); //同上（实际宽度）&lt;/p&gt;
&lt;p&gt;var offset = $(&amp;#8220;#myDiv&amp;#8221;).offset(); //获取id为myDiv的元素在当前窗口的相对偏移量&lt;br /&gt;
alert( offset.top + &amp;#8220;|&amp;#8221; + offset.left );&lt;/p&gt;
&lt;p&gt;var offset = $(&amp;#8220;#myDiv&amp;#8221;).position(); //获取id为myDiv的元素相对于最近一个position设置为relative或absolute的父元素的相对偏移量&lt;br /&gt;
alert( offset.top + &amp;#8220;|&amp;#8221; + offset.left );&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;#txtArea&amp;#8221;).scrollTop(); //获取id为txtArea的元素滚动条距离顶端的距离&lt;br /&gt;
$(&amp;#8220;#txtArea&amp;#8221;).scrollLeft(); //获取id为txtArea的元素滚动条距离左侧的距离&lt;br /&gt;
$(&amp;#8220;#txtArea&amp;#8221;).scrollTop(100); //设置id为txtArea的元素滚动条距离顶端的距离&lt;br /&gt;
$(&amp;#8220;#txtArea&amp;#8221;).scrollLeft(100); //设置id为txtArea的元素滚动条距离左侧的距离&lt;/p&gt;
&lt;p&gt;//&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;- 第四章 JQuery中的事件和动画 &amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;加载DOM&lt;br /&gt;
$(window).load() 等价于 window.onload 事件&lt;/p&gt;
&lt;p&gt;$(document).ready() 相当于window.onload事件，但有些区别：&lt;br /&gt;
(1)执行时机：&lt;br /&gt;
window.onload 是在网页中所有元素（包括元素的所有关联文件）完全加载后才执行&lt;br /&gt;
$(document).ready() 是在DOM完全就绪时就可以被调用，此时，并不意味着这些元素关系的文件都已经下载完毕&lt;/p&gt;
&lt;p&gt;(2)多次使用：可以在同一个页面注册多个$(document).ready()事件&lt;br /&gt;
(3)简写方式：可以缩写成 $(function(){ })  或  $().ready()&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;事件绑定&lt;br /&gt;
当文档装载完成后，可以通过bind()方法，为特定的元素进行事件的绑定，可重复多次使用&lt;br /&gt;
bind( type, [data, ] fn );&lt;br /&gt;
type：指事件的类型:&lt;br /&gt;
blur（失去焦点）、focus（获得焦点）&lt;br /&gt;
load（加载完成）、unload（销毁完成）&lt;br /&gt;
resize（调整元素大小）、scroll（滚动元素）&lt;br /&gt;
click（单击元素事件）、dbclick（双击元素事件）&lt;br /&gt;
mousedown（按下鼠标）、mouseup（松开鼠标）&lt;br /&gt;
mousemove（鼠标移过）、mouseover（鼠标移入）、mouseout（鼠标移出）&lt;br /&gt;
mouseenter（鼠标进入）、mouseleave（鼠标离开）&lt;br /&gt;
change（值改变）、select（下拉框索引改变）、submit（提交按钮）&lt;br /&gt;
keydown（键盘按下）、keyup（键盘松开）、keypress（键盘单击）&lt;br /&gt;
error（异常）&lt;br /&gt;
data：指事件传递的属性值，event.data 额外传递给对象事件的值&lt;br /&gt;
fn：指绑定的处理函数，在此函数体内，$(this)指携带相应行为的DOM元素&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;合并事件&lt;br /&gt;
hover(enter,leave)：鼠标移入执行enter、移出事件执行leave&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).hover( function(){&lt;br /&gt;
$(this).css(&amp;#8220;border&amp;#8221;, &amp;#8220;1px solid black&amp;#8221;);0&lt;br /&gt;
}, function(){&lt;br /&gt;
$(this).css(&amp;#8220;border&amp;#8221;, &amp;#8220;none&amp;#8221;);&lt;br /&gt;
});&lt;/p&gt;
&lt;p&gt;toggle(fn1,fn2,&amp;#8230;fnN)：鼠标每点击一次，执行一个函数，直到最后一个后重复&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).toggle( function(){&lt;br /&gt;
$(this).css(&amp;#8220;border&amp;#8221;, &amp;#8220;1px solid black&amp;#8221;);0&lt;br /&gt;
}, function(){&lt;br /&gt;
$(this).css(&amp;#8220;border&amp;#8221;, &amp;#8220;none&amp;#8221;);&lt;br /&gt;
});&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;事件冒泡&lt;br /&gt;
下面的例子，BODY元素下有DIV元素，DIV元素下有SPAN元素，分别将三种元素都注册click事件。&lt;br /&gt;
那么，click事件会按照DOM的层次结构，像水泡一样不断向上直到顶端，所以称之为事件冒泡。&lt;br /&gt;
&amp;amp;lt;body&amp;amp;gt;&amp;amp;lt;div&amp;amp;gt;&amp;amp;lt;span&amp;amp;gt;我是SPAN我怕谁&amp;amp;lt;/span&amp;amp;gt;&amp;amp;lt;/div&amp;amp;gt;&amp;amp;lt;/body&amp;amp;gt;&lt;br /&gt;
$(&amp;#8220;span&amp;#8221;).bind(&amp;#8220;click&amp;#8221;, function(){ alert(&amp;#8216;span click&amp;#8217;); });&lt;br /&gt;
$(&amp;#8220;div&amp;#8221;).bind(&amp;#8220;click&amp;#8221;, function(){ alert(&amp;#8216;div click&amp;#8217;); });&lt;br /&gt;
$(&amp;#8220;body&amp;#8221;).bind(&amp;#8220;click&amp;#8221;, function(){ alert(&amp;#8216;body click&amp;#8217;); });&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;阻止冒泡&lt;br /&gt;
解决这个问题的办法是：在SPAN执行完click事件后，停止事件冒泡。&lt;br /&gt;
$(&amp;#8220;span&amp;#8221;).bind(&amp;#8220;click&amp;#8221;, function(event){&lt;br /&gt;
alert(&amp;#8216;span click&amp;#8217;);&lt;br /&gt;
event.stopPropagation(); //停止冒泡&lt;br /&gt;
});&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;阻止默认行为&lt;br /&gt;
提交按钮在提交前做相应的逻辑判断，当不满足时&lt;br /&gt;
$(&amp;#8220;#btnSubmit&amp;#8221;).bind(&amp;#8220;click&amp;#8221;, function(event){&lt;br /&gt;
event.preventDefault(); //阻止默认行为 相当于return false;&lt;br /&gt;
});&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;事件对象的属性&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).bind(&amp;#8220;click&amp;#8221;, function(event){ });&lt;br /&gt;
event.type() //返回：click&lt;br /&gt;
event.target() //获取当前元素&lt;br /&gt;
event.relatedTarget() //引发事件的元素&lt;br /&gt;
event.pageX()/event.pageY() //获取鼠标相对于页面的X和Y坐标&lt;br /&gt;
event.which() //在单击事件中获取到对应的按键 鼠标左中右分别是123&lt;br /&gt;
event.metaKey() //获取操作中的相关功能键（ctrl/alt/shift）&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;移除事件&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).bind(&amp;#8220;click&amp;#8221;, fn1 = function(){&lt;br /&gt;
alert(&amp;#8220;function1&amp;#8243;);&lt;br /&gt;
}).bind(&amp;#8220;click&amp;#8221;, fn2 = function(){&lt;br /&gt;
alert(&amp;#8220;function2&amp;#8243;);&lt;br /&gt;
}).bind(&amp;#8220;click&amp;#8221;, fn3 = function(){&lt;br /&gt;
alert(&amp;#8220;function3&amp;#8243;);&lt;br /&gt;
});&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).unbind(); //移除id为myDiv的元素的所有事件&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).unbind(&amp;#8220;click&amp;#8221;); //移除id为myDiv的元素的所有click事件&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).unbind(&amp;#8220;click&amp;#8221;,fn1); //移除id为myDiv的元素的名称为fn1的click事件&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;一次性事件：绑定的事件执行一次后自动移除&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).one(&amp;#8220;click&amp;#8221;, [data], function(){&lt;br /&gt;
alert(&amp;#8220;function1&amp;#8243;);&lt;br /&gt;
});&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;触发事件&lt;br /&gt;
$(&amp;#8220;#btn&amp;#8221;).trigger(&amp;#8220;click&amp;#8221;, [data]); //代码方式触发click事件&lt;br /&gt;
$(&amp;#8220;#btn&amp;#8221;).click(); //另一种简写方式&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;事件命名空间&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).bind(&amp;#8220;click.hello&amp;#8221;, function(){&lt;br /&gt;
alert(&amp;#8220;function1&amp;#8243;);&lt;br /&gt;
});&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).bind(&amp;#8220;click&amp;#8221;, function(){&lt;br /&gt;
alert(&amp;#8220;function1&amp;#8243;);&lt;br /&gt;
})&lt;br /&gt;
$(&amp;#8220;div&amp;#8221;).unbind(&amp;#8220;click&amp;#8221;); //两个事件都被移除&lt;br /&gt;
$(&amp;#8220;div&amp;#8221;).unbind(&amp;#8220;.hello&amp;#8221;); //只移除第一个&lt;br /&gt;
$(&amp;#8220;div&amp;#8221;).unbind(&amp;#8220;click!&amp;#8221;); //只移除第二个（注意感叹号，指没有名字空间的）&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;JQuery中的动画&lt;br /&gt;
$(&amp;#8220;div&amp;#8221;).hide(); //隐藏所有DIV元素，相当于sytle=&amp;#8221;display:none&amp;#8221;&lt;br /&gt;
$(&amp;#8220;div&amp;#8221;).show(); //显示所有DIV元素&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;div&amp;#8221;).hide(1000); //一秒内隐藏所有DIV元素，其它参数还有：slow(600) normal(400) fast(200)&lt;br /&gt;
$(&amp;#8220;div&amp;#8221;).show(1000); //一秒内显示所有DIV元素&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;div&amp;#8221;).fadeOut(); //降低元素的不透明度，直至消失（支持速度参数，不会改变宽高）&lt;br /&gt;
$(&amp;#8220;div&amp;#8221;).fadeIn(); //升高元素的不透明度，直至显示&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;div&amp;#8221;).slideUp(); //由下至上收缩元素，直至消失（支持速度参数）&lt;br /&gt;
$(&amp;#8220;div&amp;#8221;).slideDown(); //由上至下展开元素，直至显示&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;自定义动画animate&lt;br /&gt;
$(elem).animate(params, speed, callback);&lt;br /&gt;
params：样式属性及值的映射 {protected:&amp;#8221;value&amp;#8221;, protected:&amp;#8221;value&amp;#8221;}&lt;br /&gt;
speed: 速度参数&lt;br /&gt;
callback: 动画完成后执行函数，可选&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;#myDiv&amp;#8221;).animate({left:&amp;#8221;500px&amp;#8221;}, 2000); //两秒内ID为myDiv的元素移至左边距500px的位置&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).animate({left:&amp;#8221;+=500px&amp;#8221;}, 2000); //同上，支持累加、累减&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).animate({top:&amp;#8221;200px&amp;#8221;, left:&amp;#8221;+=500px&amp;#8221;}, 2000); //同上，多重动画，同时执行&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;#myDiv&amp;#8221;).animate({opacity:&amp;#8221;0.5&amp;#8243;}, 1000) //先变成50%透明&lt;br /&gt;
.animate({top:&amp;#8221;500px&amp;#8221;}, 500) //移至离顶端500px&lt;br /&gt;
.animate({left:&amp;#8221;500px&amp;#8221;}, 500) //移至离左边500px&lt;br /&gt;
.fadeOut(1000); //显示出来 （四个动作为队列，一步步执行）&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;#myDiv&amp;#8221;).stop([cleanQuene] [,gotuEnd]); //停止动画，参数为boolean&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;#myDiv&amp;#8221;).is(&amp;#8220;:animate&amp;#8221;) //判断元素是否在执行动画&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;其它动画&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).toggle(); //显示与隐藏元素&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).slideToggle(); //展开与收缩元素&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).fadeTo(1000, 0.2); //一秒内将元素透明度调整到20%&lt;/p&gt;
&lt;p&gt;//&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211; 第五章 JQuery对表单、表格的操作及更多应用 &amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;单选文本框应用（获得焦点时，加了个特殊的样式，失去焦点时还原，兼容所有浏览器）&lt;br /&gt;
$(&amp;#8220;:input&amp;#8221;).focus(function(){ this.addClass(&amp;#8220;inputFocus&amp;#8221;); })&lt;br /&gt;
.blur(function(){ this.removeClass(&amp;#8220;inputFocus&amp;#8221;); });&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;多行文本框的应用（放大、缩小多行文本框的高度，限制最大500px，兼容所有浏览器）&lt;br /&gt;
var $txt = $(&amp;#8220;#textArea&amp;#8221;);&lt;br /&gt;
$(&amp;#8220;.bigger&amp;#8221;).click(function(){&lt;br /&gt;
if( $txt.height() &amp;amp;lt; 500) $txt.height( $txt.height() + 50 );&lt;br /&gt;
//if( $txt.height() &amp;amp;lt; 500) $txt.animate({height:&amp;#8221;+=50&amp;#8243;}, 500 );&lt;br /&gt;
});&lt;br /&gt;
$(&amp;#8220;.smaller&amp;#8221;).click(function(){&lt;br /&gt;
if( $txt.height() &amp;amp;gt; 100) $txt.height( $txt.height() &amp;#8211; 50 );&lt;br /&gt;
//if( $txt.height() &amp;amp;lt; 500) $txt.animate({height:&amp;#8221;-=50&amp;#8243;}, 500 );&lt;br /&gt;
});&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;复选框的应用（实现全选、全不选、反选）&lt;br /&gt;
$(&amp;#8220;#btnCheckedAll&amp;#8221;).click(function(){ //全选&lt;br /&gt;
$(&amp;#8220;[name=items]:checkbox&amp;#8221;).attr(&amp;#8220;checked&amp;#8221;, true);&lt;br /&gt;
});&lt;br /&gt;
$(&amp;#8220;#btnCheckedNone&amp;#8221;).click(function(){ //全不选&lt;br /&gt;
$(&amp;#8220;[name=items]:checkbox&amp;#8221;).attr(&amp;#8220;checked&amp;#8221;, false);&lt;br /&gt;
});&lt;br /&gt;
$(&amp;#8220;#btnCheckedRev&amp;#8221;).click(function(){ //反选&lt;br /&gt;
$(&amp;#8220;[name=items]:checkbox&amp;#8221;).each(function(){&lt;br /&gt;
$(this).attr(&amp;#8220;checked&amp;#8221;, !$(this).attr(&amp;#8220;checked&amp;#8221;));&lt;br /&gt;
//this.checked = !this.checked;&lt;br /&gt;
}&lt;br /&gt;
});&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;下拉框的应用（将一个下拉列表的选中项搬至另一个下拉列表）&lt;br /&gt;
$(&amp;#8220;#btnAdd&amp;#8221;).click(function(){ //将选中选项搬过去&lt;br /&gt;
$(&amp;#8220;#mySelect1 option:selected&amp;#8221;).appendTo(&amp;#8220;#mySelect2&amp;#8243;);&lt;br /&gt;
});&lt;br /&gt;
$(&amp;#8220;#btnAddAll&amp;#8221;).click(function(){ //将全部选项搬过去&lt;br /&gt;
$(&amp;#8220;#mySelect1 option&amp;#8221;).appendTo(&amp;#8220;#mySelect2&amp;#8243;);&lt;br /&gt;
});&lt;br /&gt;
$(&amp;#8220;#mySelect1&amp;#8243;).dblclick(function()[ //双击项搬过去&lt;br /&gt;
$(&quot;#mySelect1 option:selected&quot;).appendTo(&quot;#mySelect2&quot;);&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;表单验证&lt;br /&gt;
&amp;amp;lt;form&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;div&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;label&amp;amp;gt;用户名：&amp;amp;lt;/label&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;input type=&quot;text&quot; id=&quot;txtUid&quot; value=&quot;&quot; /&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/div&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/form&amp;amp;gt;&lt;br /&gt;
$(&quot;form :input.required&quot;).each(function(){ //往每个class有required样式的input元素后面添加*号&lt;br /&gt;
$(this).parent().append( $(&quot;&amp;amp;lt;span class='star'&amp;amp;gt;*&amp;amp;lt;/span&amp;amp;gt;&quot;) );&lt;br /&gt;
});&lt;br /&gt;
$(&quot;form :input.required&quot;).blur(function(){ //失去焦点时验证域&lt;br /&gt;
if( this.value == &quot;&quot; ){&lt;br /&gt;
$(this).parent().append( $(&quot;&amp;amp;lt;span class='error'&amp;amp;gt;必填字段&amp;amp;lt;/span&amp;amp;gt;&quot;) );&lt;br /&gt;
}&lt;br /&gt;
else{&lt;br /&gt;
$(this).parent().append( $(&quot;&amp;amp;lt;span class='success'&amp;amp;gt;验证正确&amp;amp;lt;/span&amp;amp;gt;&quot;) );&lt;br /&gt;
$(this).parent().find(&quot;.error&quot;).remove();&lt;br /&gt;
}&lt;br /&gt;
}).keyup(function(){ //用户每点一个键触发&lt;br /&gt;
$(this).triggerHandler(&quot;blur&quot;);&lt;br /&gt;
}).focus(function(){ //控制有焦点时触发&lt;br /&gt;
$(this).triggerHandler(&quot;blur&quot;);&lt;br /&gt;
});&lt;br /&gt;
$(&quot;#btnSubmit&quot;).click(function(){&lt;br /&gt;
$(&quot;form :input.required&quot;).trigger(&quot;blur&quot;); //让所有需要验证的域失去焦点&lt;br /&gt;
var errNum = $(&quot;form .error&quot;).length;&lt;br /&gt;
if( errNum ){&lt;br /&gt;
alert(&quot;有验证字段失败，请重新填写&quot;);&lt;br /&gt;
return false;&lt;br /&gt;
}&lt;br /&gt;
});&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;表格应用&lt;br /&gt;
$(&quot;tr:odd&quot;).addClass(&quot;oddTr&quot;); //给奇数行添加oddTr样式&lt;br /&gt;
$(&quot;tr:even&quot;).addClass(&quot;evenTr&quot;); //给偶数行添加evenTr样式&lt;/p&gt;
&lt;p&gt;$(&quot;tr:contains('王五')&quot;).addClass(&quot;highlightTr&quot;); //查找包含&amp;amp;ldquo;王五&amp;amp;rdquo;的行，添加highlightTr样式&lt;/p&gt;
&lt;p&gt;$(&quot;tr&quot;).click(function(){&lt;br /&gt;
$(this).addClass(&quot;selectedTr&quot;) //给当前行添加选中样式&lt;br /&gt;
.siblings().removeClass(&quot;selectedTr&quot;) //反选移除选中样式&lt;br /&gt;
.end() //结束，返回$(this)，否则则是反选的行&lt;br /&gt;
.find(':radio&quot;).attr(&quot;checked&quot;,true); //在当前行查找单选框，选中它&lt;br /&gt;
});&lt;/p&gt;
&lt;p&gt;//-------------------- 第六章 JQuery与Ajax的应用 ------------------------&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;load( url [,data] [,callback] )方法&lt;br /&gt;
url：要请求的页面的地址&lt;br /&gt;
data：要发送的相关参数&lt;br /&gt;
callback：回调函数&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;#myDiv&amp;#8221;).load(&amp;#8220;hello.html&amp;#8221;); //向myDiv元素加载hello.html的内容&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).load(&amp;#8220;hello.html .myClass&amp;#8221;); //筛选，只加载hello.html中myClass样式的内容&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;#myDiv&amp;#8221;).load(&amp;#8220;hello.html&amp;#8221;, function(){} ); //没参数的，使用GET方式&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).load(&amp;#8220;hello.html&amp;#8221;, {id:&amp;#8217;123&amp;#8242;, name:&amp;#8217;dier&amp;#8217;}, function(){} ); //有参数的，使用POST方式&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;#myDiv&amp;#8221;).load(&amp;#8220;hello.html&amp;#8221;, function(responseText, textStatus, XMLHttpRequest){ //回调函数&lt;br /&gt;
//responseText : 请求返回的内容&lt;br /&gt;
//textStatus : 请求状态 success error notmodified timeout&lt;br /&gt;
//XMLHttpRequest : Ajax对象&lt;br /&gt;
});&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;$.get( url [,data] [,callback] [,type])和$.post( url [,data] [,callback] [,type])方法&lt;br /&gt;
url：要请求的页面的地址&lt;br /&gt;
data：要发送的相关参数&lt;br /&gt;
callback：回调函数&lt;br /&gt;
type：指定服务器返回内容的格式 xml html script json text _default&lt;/p&gt;
&lt;p&gt;$.get( &amp;#8220;test.aspx&amp;#8221;, {id:&amp;#8221;123&amp;#8243;, name:&amp;#8221;dier&amp;#8221;}, function(data,textStatus){ //回调函数只有当状态是success才触发&lt;br /&gt;
//data : 请求返回的内容&lt;br /&gt;
//textStatus : 请求状态 success error notmodified timeout&lt;/p&gt;
&lt;p&gt;//当data是HTML时，直接加载&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).html(data);&lt;/p&gt;
&lt;p&gt;//当data是XML时，可筛选 &amp;amp;lt;user id=&amp;#8221;123&amp;#8243; name=&amp;#8221;dier&amp;#8221; age=&amp;#8221;27&amp;#8243; /&amp;amp;gt;&lt;br /&gt;
var age = $(data).find(&amp;#8220;user&amp;#8221;).attr(&amp;#8220;age&amp;#8221;);&lt;/p&gt;
&lt;p&gt;//当data是JSON时，可直接点出属性来 {id:&amp;#8221;123&amp;#8243;, name:&amp;#8221;dier&amp;#8221;, age:&amp;#8221;27&amp;#8243;}&lt;br /&gt;
var age = data.age;&lt;br /&gt;
});&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;getScript(url [,callback])方法&lt;br /&gt;
$(function(){ //动态加载JS脚本&lt;br /&gt;
$.getScript(&amp;#8220;test.js&amp;#8221;);&lt;/p&gt;
&lt;p&gt;$.getScript(&amp;#8220;test.js&amp;#8221;, function(){ //回调函数&lt;br /&gt;
//do something..&lt;br /&gt;
});&lt;br /&gt;
});&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;getJSON(url [,callback])方法&lt;br /&gt;
$(function(){ //动态加载JS脚本&lt;br /&gt;
$.getJSON(&amp;#8220;test.js&amp;#8221;);&lt;/p&gt;
&lt;p&gt;$.getJSON(&amp;#8220;test.js&amp;#8221;, function(data){ //回调函数&lt;br /&gt;
//do something..&lt;br /&gt;
//data : 返回的数据&lt;br /&gt;
$.each( data, function(index, item){ //遍历，相当于foreach&lt;br /&gt;
//index : 索引&lt;br /&gt;
//item : 当前项内容&lt;br /&gt;
//return false; 退出循环&lt;br /&gt;
});&lt;br /&gt;
});&lt;br /&gt;
});&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;ajax(options)方法&lt;br /&gt;
url : 请求的地址&lt;br /&gt;
type : 请求的方式 GET POST 默认为GET&lt;br /&gt;
timeout : 请求超时时间(单位：毫秒）&lt;br /&gt;
data : 请求时发送的参数（String,Object）&lt;br /&gt;
dataType : 预期返回的数据类型 xml html script json jsonp text&lt;br /&gt;
bdforeSend : 发送请求前触发事件，如果return false则取消发送 function(XmlHttpRequest){}&lt;br /&gt;
complete : 请求完成后触发事件，不管成功与否 function(XmlHttpRequest, textStatus){}&lt;br /&gt;
success : 请求完成并且成功时触发事件 function(data, textStatus){}&lt;br /&gt;
error : 请求完成并且失败时触发事件 function(XmlHttpRequest, textStatus, errorThrown){}&lt;br /&gt;
global : 是否为全局请求，默认为true，可使用AjaxStart、AjaxStop控制各种事件&lt;/p&gt;
&lt;p&gt;$.ajax({&lt;br /&gt;
url : &amp;#8220;test.aspx&amp;#8221;,&lt;br /&gt;
type : &amp;#8220;POST&amp;#8221;,&lt;br /&gt;
timeout : &amp;#8220;3000&amp;#8243;,&lt;br /&gt;
data : {id:&amp;#8221;123&amp;#8243;, name:&amp;#8221;dier&amp;#8221;},&lt;br /&gt;
dataType : &amp;#8220;HTML&amp;#8221;,&lt;br /&gt;
success : function(data,textStatus){&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).html( data );&lt;br /&gt;
}&lt;br /&gt;
error : function(XmlHttpRequest, textStatus, errThrown){&lt;br /&gt;
$(&amp;#8220;#myDiv&amp;#8221;).html( &amp;#8220;请求失败：&amp;#8221; + errThrown );&lt;br /&gt;
}&lt;br /&gt;
});&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;序列化字符串 serialize()&lt;br /&gt;
$.get( &amp;#8220;test.aspx&amp;#8221;, $(&amp;#8220;#form1&amp;#8243;).serialize(), function(data,textStatus){&lt;br /&gt;
//将form1整个表单中的所有域序列化成提交的参数，支持自动编码&lt;br /&gt;
});&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;序列化数组 serializeArray()&lt;br /&gt;
var arr = $(&amp;#8220;:checkbox, :radio&amp;#8221;).serializeArray();&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;对象序列化 param()&lt;br /&gt;
var obj = {id:&amp;#8221;123&amp;#8243;, name:&amp;#8221;dier&amp;#8221;, age:&amp;#8221;27&amp;#8243;};&lt;br /&gt;
var kv = $.param(obj); //id=123&amp;amp;amp;name=dier&amp;amp;amp;age=27&lt;/p&gt;
&lt;p&gt;&amp;amp;middot;JQuery中的全局Ajax事件&lt;br /&gt;
ajaxStart(callback) //请求开始时触发&lt;br /&gt;
ajaxStop(callback) //请求结束时触发&lt;br /&gt;
ajaxComplete(callback) //请求完成时触发&lt;br /&gt;
ajaxSuccess(callback) //请求成功时触发&lt;br /&gt;
ajaxError(callback) //请求失败时触发&lt;br /&gt;
ajaxSend(callback) //请求发送前触发&lt;/p&gt;
&lt;p&gt;$(&amp;#8220;#loading&amp;#8221;).ajaxStart(function(){ //当有AJAX请求时显示，完成时隐藏&lt;br /&gt;
$(this).show();&lt;br /&gt;
}.ajaxStop(function(){&lt;br /&gt;
$(this).hide();&lt;br /&gt;
}&lt;br /&gt;
);&lt;/p&gt;
&lt;p&gt;//第七章是插件的使用及编写 第八章则是一个实例 此处忽略&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/429425433/JavaDou/feedsky/s.gif?r=http://javadou.com/feng-li-jquery-pdf-node-633/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/JavaDou/429425433/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/JavaDou/429425433/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://javadou.com/feng-li-jquery-pdf-node-633/feed/</wfw:commentRss><slash:comments>1</slash:comments><description>锋利的JQuery是一本不错的JQuery书，看完后感觉总体也不错，介绍的挺全面的，列举了大量的例子，比较易懂。 加上之前学过一点CSS方面的知识，所以在看选择器这部分也比较容易理解（很多都是CSS的写法）。 总体感...&lt;img src=&quot;http://www1.feedsky.com/t1/429425433/JavaDou/feedsky/s.gif?r=http://javadou.com/feng-li-jquery-pdf-node-633/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/JavaDou/429425433/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/JavaDou/429425433/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>jQuery</category><category>jquery</category><category>锋利的JQuery</category><pubDate>Mon, 07 Jun 2010 18:47:48 +0800</pubDate><author>阿超</author><comments>http://javadou.com/feng-li-jquery-pdf-node-633/#comments</comments><guid isPermaLink="false">http://javadou.com/?p=633</guid><dc:creator>阿超</dc:creator><fs:srclink>http://javadou.com/feng-li-jquery-pdf-node-633/</fs:srclink><fs:srcfeed>http://javadou.com/feed</fs:srcfeed><fs:itemid>feedsky/JavaDou/~7779303/429425433/5888533</fs:itemid></item></channel></rss>
