<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>神vlinux飘飘</title>
    <description>用我的生命,炼成我的未来</description>
    <link>http://vlinux.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>厄...调用明基注册短信进行大规模搔扰</title>
        <author>vlinux</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://vlinux.javaeye.com">vlinux</a>&nbsp;
          链接：<a href="http://vlinux.javaeye.com/blog/234699" style="color:red;">http://vlinux.javaeye.com/blog/234699</a>&nbsp;
          发表时间: 2008年08月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>一个简单的调用例子</p>
<pre name="code" class="java">import java.util.ArrayList;
import java.util.Collection;

import com.javaeye.vlinux.smsbomber.Bomber;
import com.javaeye.vlinux.smsbomber.BomberFactory;
import com.javaeye.vlinux.smsbomber.BombingException;

public class ExampleA {

	public static void main(String... args) throws BombingException {
		Bomber bomber = BomberFactory.make(BomberFactory.WWW_BENQ_COM_CN);
		//从13967000000l一直到13967519999l都是被轰炸的目标
		Collection&lt;Long&gt; targets = new ArrayList&lt;Long&gt;();
		for( long target=13967000000l; target&lt;13967519999l; target++ ) {
			targets.add(target);
		}//for 初始化轰炸目标
		bomber.setTarget(targets);	//设置轰炸目标
		bomber.bombing(null);	//开始地毯式轰炸
	}
	
}</pre>
<p>&nbsp;</p>
<p>每个号码只能被轰炸10次，每次间隔至少10分钟。</p>
<p>主要是用来交流HttpClient的使用，禁止乱玩哦，否则要负担起法律责任地...</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://vlinux.javaeye.com/blog/234699#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 30 Aug 2008 02:49:12 +0800</pubDate>
        <link>http://vlinux.javaeye.com/blog/234699</link>
        <guid>http://vlinux.javaeye.com/blog/234699</guid>
      </item>
      <item>
        <title>Rapae 弱化DAO的一种方法</title>
        <author>vlinux</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://vlinux.javaeye.com">vlinux</a>&nbsp;
          链接：<a href="http://vlinux.javaeye.com/blog/203872" style="color:red;">http://vlinux.javaeye.com/blog/203872</a>&nbsp;
          发表时间: 2008年06月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可怜的DAO层已经被各位大侠蹂躏得体肤完肤了，从范型DAO一直被蹂躏到现在只剩下一个可怜巴巴的接口，无不体现Java人追求敏捷开发的热情。其实，DAO层本来的作用就应该自从Hibernate一类优秀的ORM框架诞生之日起就应该消失灭迹了的。既然如此，那么我们就毁灭得更彻底一点。</p>
<p>&nbsp;</p>
<p>下面是我对Service与DAO层整合的一些构想</p>
<p>&nbsp;</p>
<p><span>约定优先于配置</span><span><br /><span style="font-size: small;"><strong>一、Rapae代理接口标签定义</strong></span><br /></span></p>
<div style="margin-left: 40px;"><span><em><strong>query属性：</strong></em>查询语句或者命名查询名称</span><br /></div>
<ol style="margin-left: 40px;">
<li><span>不止由一个单词组成时：简单查询语句</span></li>
<li><span>由单个单词组成时：为命名查询，名称规则为[query的值]</span></li>
<li><span>为默认值""时：为命名查询，名称规则为[类名.方法名]</span></li>
</ol>
<div style="margin-left: 40px;"><span><em><strong>count属性：</strong></em>用于统计个数的查询语句或者命名查询名称，固定返回为一个Long型的数据</span><br /></div>
<div style="margin-left: 40px;"><ol>
<li><span>不止由一个单词组成时：简单查询语句</span></li>
<li><span>由单个单词组成时：为民命查询，名称规则为[count的值]</span></li>
<li><span>为默认值""时：自动生成count(*)语句</span><br />
<ul>
<li><span>query为语句查询时：count自动生成为语句查询，规则为：select count(*) + query从第一个from开始到语句结束</span></li>
<li><span>query为命名查询时：count自动生成为命名查询，规则为：[query命名查询名称_count]</span></li>
</ul>
</li>
</ol></div>
<div style="margin-left: 40px;"><span><em><strong>PS：</strong></em>当接口的方法没有Rapae注释的时候，按query与count均属于默认值情况处理</span><br /></div>
<p><span><br /></span><br /><br /><br /><br /><br /><br /><span style="font-size: small;"><strong>二、Pagination翻页注释</strong></span><br /></p>
<div style="margin-left: 40px;"><strong><em>注释定义：</em></strong><br /></div>
<div style="margin-left: 40px;"><ol>
<li><strong>FirstResult注释：</strong>方法级上的Annotation，它标记了分页查询时所要知道的第一条记录所在的位置。期待的类型为int</li>
<li><strong>MaxSize注释：</strong>方法级上的Annotation，它标记了分页查询时所要知道的每页最大查询记录数。期待的类型为int</li>
<li><strong>Total注释：</strong>方法级上的Annotation，它标记了分页查询后返回的总数统计。期待的类型为long</li>
<li><strong>Result注释：</strong>方法级上的Annotation，它标记了分页查询后返回的结果。期待的类型为java.util.Collection&lt;E&gt;</li>
</ol></div>
<div style="margin-left: 40px;"><strong><em>详细说明：</em></strong><br /></div>
<div style="margin-left: 40px;"><ol>
<li><strong>分页查询时：</strong>第一个参数必须是能同时提供有FirstResult和MaxSize注释方法的类，并且方法期待的返回类型都必须匹配，否则将会抛出异常。Rapae通过调用被标注的方法来进行分页查询。</li>
<li><strong>分页查询返回时：</strong>返
回的类必须同时提供有Result和Total注释的方法，参数个数为1，并且期待的类型都必须匹配，否则将会抛出异常。与此同时，若返回的类同时还能提
供FirstResult、MaxSize注释的方法，方法的参数个数为1且为期待类型，那么Rapae在分页查询完成后将查询用到的
FirstResult、MaxSize值原封不动的通过标注的方法设回给返回类。</li>
</ol></div>
<p><br /><br /><br /><br /><strong><span style="font-size: small;"><br />三、CRUD基本查询注释</span></strong><br /></p>
<div style="margin-left: 40px;"><strong><em>注释定义：</em></strong><br /></div>
<div style="margin-left: 40px;"><ol>
<li><strong>Create注释：</strong>格式 T [方法名] (T t);</li>
<li><strong>Read注释：</strong>格式 T [方法名] (java.io.Serializable pk);</li>
<li><strong>Update注释：</strong>格式 T [方法名] (T t);</li>
<li><strong>Delete注释：</strong>格式 T [方法名] (java.io.Serializable pk);</li>
</ol>一旦被标注上了CRUD标签，则必须严格遵循标签所规定的格式，否则抛出异常。<br /></div>
<p><br /><br /><br /><br /><br /><span><span style="font-size: small;"><strong>四、查询行为方式与方法的返回类型、参数类型、参数个数以及方法名称之间的约定</strong></span><br /><br /></span></p>
<div style="margin-left: 40px;"><em><strong><span>查询行为方式</span>：</strong></em><br /></div>
<ol>
<li>&nbsp;<ol>
<li><strong>执行查询</strong><br />
<ul>
<li>返回值必须为void</li>
</ul>
</li>
<li><strong>查询多条记录（不翻页）</strong><br />
<ul>
<li>返回值是java.util.Collection&lt;E&gt;的实现<br /></li>
</ul>
</li>
<li><strong>查询多条记录（翻页）</strong><br />
<ul>
<li>返回类必须同时提供标注有Result与Total的方法，并且参数个数为1，参数类型为标签所期待的类型</li>
<li>返回类可以选择性的提供标注有FirstResult和MaxSize的方法，并且参数个数为1，参数类型为标签所期待的类型</li>
<li>传入的第一个参数必须同时提供标注有FirstResult与MaxSize的方法，参数个数为0，返回类型为标签所期待的类型</li>
</ul>
</li>
<li><strong>查询单条记录</strong><br />
<ul>
<li>返回值必须是一个对象</li>
</ul>
</li>
</ol></li>
</ol>
<div style="margin-left: 40px;">查询条件传递：<br /><ol>
<li>若是翻页查询，则参数个数至少为一个，且第一个参数必须为提供标标注有FirstResult与MaxSize的方法。</li>
<li>若查询条件是通过可变参或者Collection集合类进行传递的，则按顺序对查询条件进行设置</li>
<li>若查询条件是通过参数列表直接传递进来的，则按参数列表定义的顺序对查询条件进行设置</li>
<li>若查询条件是通过Map传递进来的，则可通过Map对参数的参数进行设置</li>
</ol></div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://vlinux.javaeye.com/blog/203872#comments" style="color:red;">已有 <strong>36</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 15 Jun 2008 22:53:40 +0800</pubDate>
        <link>http://vlinux.javaeye.com/blog/203872</link>
        <guid>http://vlinux.javaeye.com/blog/203872</guid>
      </item>
  </channel>
</rss>