<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>jarit</title>
    <description></description>
    <link>http://jarit.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>MYSQL导入导出常用命令</title>
        <author>jarit</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jarit.javaeye.com">jarit</a>&nbsp;
          链接：<a href="http://jarit.javaeye.com/blog/218791" style="color:red;">http://jarit.javaeye.com/blog/218791</a>&nbsp;
          发表时间: 2008年07月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>一、备份数据库：（命令在DOS的mysql\bin目录下执行） <br />mysqldump --opt school&gt;school.bbb <br />注释:将数据库school备份到school.bbb文件，school.bbb是一个文本文件，文件名任取，打开看看你会有新发现。 <br />1.导出整个数据库<br />mysqldump -u 用户名 -p 数据库名 &gt; 导出的文件名 <br />mysqldump -u root -p aikersql&gt; aiker.sql<br />2.导出一个表<br />mysqldump -u 用户名 -p 数据库名 表名&gt; 导出的文件名<br />mysqldump -u aiker -p aikersql users&gt; aiker_users.sql<br />3.导出一个数据库结构<br />mysqldump -u root -p -d --add-drop-table aikersql&gt;d:\aiker_db.sql</p>
<p>-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table</p>
<p>二.导入数据库<br />常用source 命令<br />进入mysql数据库控制台，如mysql -u root -p</p>
<p>mysql&gt;use 数据库</p>
<p>然后使用source命令，后面参数为脚本文件（如这里用到的.sql）<br />mysql&gt;source d:\aiker_db.sql</p>
<p>也可以用 mysql -uroot -Ddb1 &lt;d:\aiker_db.sql</p>
<p>三、将文本数据转到数据库中 <br />1、文本数据应符合的格式：字段数据之间用tab键隔开，null值用n来代替. <br />例： <br />3 rose 深圳二中 1976-10-10 <br />4 mike 深圳一中 1975-12-23 <br />2、数据传入命令 load data local infile "文件名" into table 表名; <br />注意：你最好将文件复制到mysqlbin目录下，并且要先用use命令打表所在的库。<br />数据导出<br />　　数据导出主要有以下几种方法：<br />　　使用select into outfile "filename"语句<br />　　使用mysqldump实用程序<br />使用phpmyadmin导入<br />例如：mysql&gt; select * from driver into outfile "a.txt";</p>
<p>导入<br />　　同导出相类似，导入也有两种方法：<br />使用LOAD DATA INFILE "filename"命令<br />使用mysqlimport实用程序<br />使用phpmyadmin导入<br />使用sql文件</p>
          <br/>
          <span style="color:red;">
            <a href="http://jarit.javaeye.com/blog/218791#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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>Thu, 24 Jul 2008 00:11:35 +0800</pubDate>
        <link>http://jarit.javaeye.com/blog/218791</link>
        <guid>http://jarit.javaeye.com/blog/218791</guid>
      </item>
      <item>
        <title>[转]深入HashCode方法</title>
        <author>jarit</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jarit.javaeye.com">jarit</a>&nbsp;
          链接：<a href="http://jarit.javaeye.com/blog/193523" style="color:red;">http://jarit.javaeye.com/blog/193523</a>&nbsp;
          发表时间: 2008年05月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>　　为什么HashCode对于对象是如此的重要?</p>
<p>　　一个对象的HashCode就是一个简单的Hash算法的实现，虽然它和那些真正的复杂的Hash算法相比还不能叫真正的算法，它如何实现它，不仅仅是程序员的编程水平问题，而是关系到你的对象在存取是性能的非常重要的关系.有可能，不同的HashCode可能会使你的对象存取产生，成百上千倍的性能差别。</p>
<p>　　我们先来看一下，在JAVA中两个重要的数据结构:HashMap和Hashtable，虽然它们有很大的区别，如继承关系不同，对value的约束条件(是否允许null)不同，以及线程安全性等有着特定的区别，但从实现原理上来说，它们是一致的.所以，我们只以Hashtable来说明:</p>
<p>　　在java中，存取数据的性能，一般来说当然是首推数组，但是在数据量稍大的容器选择中，Hashtable将有比数组性能更高的查询速度.具体原因看下面的内容。</p>
<p>　　Hashtable在存储数据时，一般先将作为key的对象的HashCode和0x7FFFFFFF做与操作，因为一个对象的HashCode可以为负数，这样操作后可以保证它为一个正整数.然后以Hashtable的长度取模，得到值对象在Hashtable中的索引。</p>
<p>　　index = (o.hashCode() &amp; 0x7FFFFFFF)%hs.length;这个值对象就会直接放在Hashtable的第index位置，对于写入，这和数组一样，把一个对象放在其中的第index位置，但如果是查询，经过同样的算法，Hashtable可以直接通过key得到index，从第index取得这个值对象，而数组却要做循环比较.所以对于数据量稍大时，Hashtable的查询比数据具有更高的性能。</p>
<p>　　虽然不同对象有不同的hashcode，但不同的hashCode经过与长度的取余，就很可能产生相同的index。</p>
<p>　　极端情况下会有大量的对象产生一个相同的索引.这就是关系Hashtable性能问题的最重要的问题:</p>
<p>　　Hash冲突。</p>
<p>　　常见的Hash冲突是不同key对象最终产生了相同的索引，而一种非常甚至绝对少见的Hash冲突是，如果一组对象的个数大过了int范围，而HashCode的长度只能在int范围中，所以肯定要有同一组的元素有相同的HashCode，这样无论如何他们都会有相同的索引.当然这种极端的情况是极少见的，可以暂不考虑，但是对于同的HashCode经过取模，则会产中相同的索引，或者不同的对象却具有相同的HashCode，当然具有相同的索引。</p>
<p>　　事实上一个设计各好的HashTable，一般来说会比较平均地分布每个元素，因为Hashtable的长度总是比实际元素的个数按一定比例进行自增(装填因子一般为0.75)左右，这样大多数的索引位置只有一个对象，而很少的位置会有几个元素.所以Hashtable中的每个位置存放的是一个链表，对于只有一个对象是位置，链表只有一个首节点(Entry)，Entry的next为null.然后有hashCode，key，value属性保存了该位置的对象的HashCode，key和value(对象本身)，如果有相同索引的对象进来则会进入链表的下一个节点.如果同一个索引中有多个对象，根据HashCode和key可以在该链表中找到一个和查询的key相匹配的对象。</p>
<p>　　从上面我看可以看到，对于HashMap和Hashtable的存取性能有重大影响的首先是应该使该数据结构中的元素尽量大可能具有不同的HashCode，虽然这并不能保证不同的HashCode产生不同的index，但相同的HashCode一定产生相同的index，从而影响产生Hash冲突。</p>
<p>　　对于一个象，如果具有很多属性，把所有属性都参与散列，显然是一种笨拙的设计.因为对象的HashCode()方法几乎无所不在地被自动调用，如equals比较，如果太多的对象参与了散列.那么需要的操作常数时间将会增加很大.所以，挑选哪些属性参与散列绝对是一个编程水平的问题。</p>
<p>　　从实现来说，一般的HashCode方法会这样:</p>
<p>　　return Attribute1.HashCode() + Attribute1.HashCode()..[+super.HashCode()]。</p>
<p>　　我们知道，每次调用这个方法，都要重新对方法内的参与散列的对象重新计算一次它们的HashCode的运算，如果一个对象的属性没有改变，仍然要每次都进行计算，所以如果设置一个标记来缓存当前的散列码，只要当参与散列的对象改变时才重新计算，否则调用缓存的hashCode，这可以从很大程度上提高性能。</p>
<p>　　默认的实现是将对象内部地址转化为整数作为HashCode，这当然能保证每个对象具有不同的HasCode，因为不同的对象内部地址肯定不同(废话)，但java语言并不能让程序员获取对象内部地址，所以，让每个对象产生不同的HashCode有着很多可研究的技术。</p>
<p>　　如果从多个属性中采样出能具有平均分布的hashCode的属性，这是一个性能和多样性相矛盾的地方，如果所有属性都参与散列，当然hashCode的多样性将大大提高，但牺牲了性能，而如果只能少量的属性采样散列，极端情况会产生大量的散列冲突，如对"人"的属性中，如果用性别而不是姓名或出生日期，那将只有两个或几个可选的hashcode值，将产生一半以上的散列冲突.所以如果可能的条件下，专门产生一个序列用来生成HashCode将是一个好的选择(当然产生序列的性能要比所有属性参与散列的性能高的情况下才行，否则还不如直接用所有属性散列)。</p>
<p>　　如何对HashCode的性能和多样性求得一个平衡，可以参考相关算法设计的书，其实并不一定要求非常的优秀，只要能尽最大可能减少散列值的聚集.重要的是我们应该记得HashCode对于我们的程序性能有着生要的影响，在程序设计时应该时时加以注意。</p>
<p>作者：axman</p>
          <br/>
          <span style="color:red;">
            <a href="http://jarit.javaeye.com/blog/193523#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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>Fri, 16 May 2008 09:22:44 +0800</pubDate>
        <link>http://jarit.javaeye.com/blog/193523</link>
        <guid>http://jarit.javaeye.com/blog/193523</guid>
      </item>
      <item>
        <title>SCP用法</title>
        <author>jarit</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jarit.javaeye.com">jarit</a>&nbsp;
          链接：<a href="http://jarit.javaeye.com/blog/191470" style="color:red;">http://jarit.javaeye.com/blog/191470</a>&nbsp;
          发表时间: 2008年05月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>当两台LINUX主机之间要互传文件时可使用SCP命令来实现，建立信任关系之后可不输入密码。 <br /><br />把你的本地主机用户的ssh公匙文件复制到远程主机用户的~/.ssh/authorized_keys文件中 <br />假设本地主机linux100,远程主机linux200 <br />一，在linux100主机里的用户 <br />运行 <br />#ssh-keygen -t rsa <br />结果如下 <br /><br />QUOTE: <br />Generating public/private rsa key pair. <br />Enter file in which to save the key (/home/.username/ssh/id_rsa):#回车 <br />Enter passphrase (empty for no passphrase):#回车 <br />Enter same passphrase again:#回车 <br />Your identification has been saved in /home/.username /.ssh/id_rsa. <br />Your public key has been saved in /home/.username /.ssh/id_rsa.pub. <br />The key fingerprint is: <br />38:25:c1:4d:5d:d3:89:bb:46:67:bf:52:af:c3:17:0c username@localhost <br />Generating RSA keys: <br />Key generation complete. <br /><br />会在用户目录~/.ssh/产生两个文件，id_rsa，id_rsa.pub <br />二，把linux100主机上的id_rsa.pub文件拷贝到linux200主机的root用户主目录下的.ssh目录下,并且改名为authorized_keys <br />即： <br />/root/.ssh/authorized_keys <br />这样在linux100主机上使用scp命令复制文件到linux200上将不提示输入密码了，直接复制了。 <br />反之亦然！ <br /><br />三，复制文件或目录命令： <br />复制文件： <br />（1）将本地文件拷贝到远程 <br />scp 文件名 --<span style="color: #ff0000;">用户名</span>@<span style="color: #ff0000;">计算机IP或者计算机名称</span>:远程路径 <br />（2）从远程将文件拷回本地 <br />scp --<span style="color: #ff0000;">用户名</span>@<span style="color: #ff0000;">计算机IP或者计算机名称</span>:文件名 本地路径 <br />复制目录： <br />（1）将本地目录拷贝到远程 <br />scp -r 目录名 --<span style="color: #ff0000;">用户名</span>@<span style="color: #ff0000;">计算机IP或者计算机名称</span>:远程路径 <br />（2）从远程将目录拷回本地 <br />scp -r --<span style="color: #ff0000;">用户名</span>@<span style="color: #ff0000;">计算机IP或者计算机名称</span>:目录名 本地路径</p>
          <br/>
          <span style="color:red;">
            <a href="http://jarit.javaeye.com/blog/191470#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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>Fri, 09 May 2008 15:57:37 +0800</pubDate>
        <link>http://jarit.javaeye.com/blog/191470</link>
        <guid>http://jarit.javaeye.com/blog/191470</guid>
      </item>
      <item>
        <title>UML概述与详解</title>
        <author>jarit</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jarit.javaeye.com">jarit</a>&nbsp;
          链接：<a href="http://jarit.javaeye.com/blog/164409" style="color:red;">http://jarit.javaeye.com/blog/164409</a>&nbsp;
          发表时间: 2008年02月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Longronglin之UML： <div>&nbsp;因为上面写了个设计模式而没有UML所以贴了上来。这些都是我2004年上半年无聊的时候整理的。望对大家有用</div><div><strong><span style="color: blue">统一建模语言(UML:Unified Modeling Language)</span></strong></div><div style="margin-left: 18pt; text-indent: -18pt"><strong><span style="color: blue">1．</span></strong><strong><span style="color: blue">能够从不同的角度来看待系统的结构，行为，功能（需求）。</span></strong></div><div style="margin-left: 18pt; text-indent: -18pt"><strong><span style="color: blue">2．</span></strong><strong><span style="color: blue">能够在不同抽象程度上考虑系统，而仅仅是源代码是不够的。源代码是非常细化的内部结构，不能用来建造复杂的系统。</span></strong></div><table cellspacing="0" border="0" style="width: 100%; border-collapse: collapse" width="100%" cellpadding="0"><tbody><tr style="height: 13.75pt"><td valign="top" style="border-right: medium none; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 100%; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 13.75pt" width="100%" colspan="2"><div>UML图及其目的</div></td></tr><tr style="height: 13.3pt"><td valign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 18.46%; padding-top: 0cm; height: 13.3pt; border: medium none" width="18%"><div>当你<span>&hellip;&hellip;</span></div></td><td valign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 81.54%; padding-top: 0cm; height: 13.3pt; border: medium none" width="81%"><div>使用<span>UML图&hellip;&hellip;</span></div></td></tr><tr style="height: 13.3pt"><td rowspan="2" valign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 18.46%; padding-top: 0cm; height: 13.3pt" width="18%"><div>在分析阶段</div></td><td valign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 81.54%; padding-top: 0cm; height: 13.3pt" width="81%"><div>用例图，它们包含和系统交互的实体以及需要实现的功能点。</div></td></tr><tr style="height: 10.1pt"><td valign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 81.54%; padding-top: 0cm; height: 10.1pt" width="81%"><div>活动图，它们将焦点集中于问题域（人们以及其它主体工作的实际空间，程序的主题域）的工作流而不是程序的逻辑流。</div></td></tr><tr style="height: 10.1pt"><td valign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 18.46%; padding-top: 0cm; height: 10.1pt" width="18%"><div>观察对象交互</div></td><td valign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 81.54%; padding-top: 0cm; height: 10.1pt" width="81%"><div>交互图，它们展示特定的对象彼如何此交互。由于它们处理特定案例而不是一般情况，因此它们在检验需求和检验设计时都能有所帮助。最流行的交互图是顺序图。</div></td></tr><tr style="height: 17.9pt"><td valign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 18.46%; padding-top: 0cm; height: 17.9pt" width="18%"><div>在设计阶段</div></td><td valign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 81.54%; padding-top: 0cm; height: 17.9pt" width="81%"><div>类图，它们详述类与类之间的关系。</div></td></tr><tr style="height: 10.1pt"><td valign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 18.46%; padding-top: 0cm; height: 10.1pt" width="18%"><div>观察对象的行为，这些行为因对象所处的状态而不同</div></td><td valign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 81.54%; padding-top: 0cm; height: 10.1pt" width="81%"><div>状态图，它们详述一个对象可能处于的不同状态以及这些状态之间的过渡。</div></td></tr><tr style="height: 4pt"><td valign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 18.46%; padding-top: 0cm; height: 4pt" width="18%"><div>在布署阶段</div></td><td valign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 81.54%; padding-top: 0cm; height: 4pt" width="81%"><div>布署图，它们展示了不同的模块将被如何部署。我不会在此讨论它们。</div></td></tr></tbody></table><div><span style="color: blue">UML</span><span style="color: blue">的定义包括UML语义和UML表示法两个部分：</span></div><div>UML语义　描述基于<span>UML的精确元模型定义。元模型为UML的所有元素在语法和语义上提供了简单、一致、通用的定义性说明,使开发者能在语义上取得一致,消除了因人而异的最佳表达方法所造成的影响。此外UML还支持对元模型的扩展定义。</span></div><div>UML表示法　定义<span>UML符号的表示法,为开发者或开发工具使用这些图形符号和文本语法为系统建模提供了标准。这些图形符号和文字所表达的是应用级的模型,在语义上它是UML元模型的实例。<br />标准建模语言UML的重要内容可以由下列五类图(共9种图形)来定义:</span></div><div>&middot;第一类是<span style="color: blue">用例图,从用户角度描述系统功能,并指出各功能的操作者。<br />&middot;第二类是<span style="color: blue">静态图(</span>Static diagram),包括类图、对象图和包图。其中类图描述系统中类的静态结构。不仅定义系统中的类,表示类之间的联系如关联、依赖、聚合等,也包括类的内部结构(类的属性和操作)。类图描述的是一种静态关系,在系统的整个生命周期都是有效的。对象图是类图的实例,几乎使用与类图完全相同的标识。他们的不同点在于对象图显示类的多个对象实例,而不是实际的类。一个对象图是类图的一个实例。由于对象存在生命周期,因此对象图只能在系统某一时间段存在。包由包或类组成,表示包与包之间的关系。包图用于描述系统的分层结构。<br />&middot;第三类是<span style="color: blue">行为图</span>(Behavior diagram),描述系统的动态模型和组成对象间的交互关系。其中状态图描述类的对象所有可能的状态以及事件发生时状态的转移条件。通常,状态图是对类图的补充。在实用上并不需要为所有的类画状态图,仅为那些有多个状态其行为受外界环境的影响并且发生改变的类画状态图。而活动图描述满足用例要求所要进行的活动以及活动间的约束关系,有利于识别并行活动。<br />&middot;第四类是<span style="color: blue">交互图</span>(Interactive diagram),描述对象间的交互关系。其中顺序图显示对象之间的动态合作关系,它强调对象之间消息发送的顺序,同时显示对象之间的交互;合作图描述对象间的协作关系,合作图跟顺序图相似,显示对象间的动态合作关系。除显示信息交换外,合作图还显示对象以及它们之间的关系。如果强调时间和顺序,则使用顺序图;如果强调上下级关系,则选择合作图。这两种图合称为交互图。<br />&middot;第五类是<span style="color: blue">实现图</span>( Implementation diagram )。其中构件图描述代码部件的物理结构及各部件之间的依赖关系。一个部件可能是一个资源代码部件、一个二进制部件或一个可执行部件。它包含逻辑类或实现类的有关信息。部件图有助于分析和理解部件之间的相互影响程度。<br />配置图定义系统中软硬件的物理体系结构。它可以显示实际的计算机和设备(用节点表示)以及它们之间的连接关系,也可显示连接的类型及部件之间的依赖性。在节点内部,放置可执行部件和对象以显示节点跟可执行软件单元的对应关系。</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/7d9f8fa3bf3e4ebbb9bd4dca716219c4.png" alt="" /></div><div><span style="color: blue">从应用的角度看,当采用面向对象技术设计系统时,首先是描述需求;其次根据需求建立系统的静态模型,以构造系统的结构;第三步是描述系统的行为。其中在第一步与第二步中所建立的模型都是静态的,包括用例图、类图(包含包)、对象图、组件图和配置图等五个图形,是标准建模语言UML的静态建模机制。其中第三步中所建立的模型或者可以执行,或者表示执行时的时序状态或交互关系。它包括状态图、活动图、顺序图和合作图等四个图形,是标准建模语言UML的动态建模机制。因此,标准建模语言UML的主要内容也可以归纳为静态建模机制和动态建模机制两大类。</span></div><div>静态视图：</div><div><span style="color: blue">类元</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/efedc2fd8506421b980a86304a603e67.gif" alt="" /></div><div><span style="color: blue">关系的种类</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/4fd612f5e18344758381f4642b2ddf67.gif" alt="" /></div><div><span style="color: blue">用例之间的关系</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/c3e3848eee1742a78166c7c4181e3014.gif" alt="" /></div><div><span style="color: blue">状态的种类</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/654726e0c53a4c19aef42e82037f43a7.gif" alt="" /></div><div><span style="color: blue">总结：</span></div><div>行为：事物随着时间进行的改变。状态图和活动图描述个别类型的行为。例如，用例，类，子系统，组件：顺序图描述一组类型的协作：我们使用协作图。许多类潜在的结构，来定义对象的协作，这些协作实现用例，或完成一个用例。协作是一组对象实现一个用例。状态图是对象的行为描述。</div><div><span style="color: blue">售票系统设计（大家熟悉）：</span></div><div><span style="color: blue">用例视图</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/9a1427d48e6641d1adb5d28fa141aa93.png" alt="" /></div><div><span style="color: blue">顺序图</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/557edda05a224a4f995b33ffe3d84526.png" alt="" /></div><div><span style="color: blue">协作图</span><br />　　<span> <img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/b738097a53d44de2b3e9ae2048ab69d3.gif" alt="" /></span></div><div><span style="color: blue">状态机视图</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/f6c7e0e621ba44079d692b5ab69c6b92.gif" alt="" /></div><div><span style="color: blue">活动视图</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/788d081089cf4782a3c4bcf051342ae9.gif" alt="" /></div><div><span style="color: blue">物理视图</span></div><div><span style="color: blue">构件图</span><br />　　</div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/f3d4f9ee94954610b84dfe5e842422a6.gif" alt="" /></div><div><span style="color: blue">部署图（描述层）<br />　　</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/c6b411ba79a14922aaf27228780f982a.gif" alt="" /></div><div><span style="color: blue">实例层部署图</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/dbda0d9b388546209fdd9ecda13ceaeb.gif" alt="" /></div><div><span style="color: blue">模型管理视图</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/33220638ac254960a9b4571046b7569a.gif" alt="" /></div><div><strong><span style="color: blue">全面认识UML类图元素</span></strong> （<span><a href="http://blog.csdn.net/legendinfo/" target="_blank">http://blog.csdn.net/legendinfo/</a>）</span></div><div>类（<span>Class） </span></div><div>类（图<span>A）是对象的蓝图，其中包含3个组成部分。第一个是Java中定义的类名。第二个是属性（attributes）。第三个是该类提供的方法。<br />属性和操作之前可附加一个可见性修饰符。加号（+）表示具有公共可见性。减号（-）表示私有可见性。#号表示受保护的可见性。省略这些修饰符表示具有package（包）级别的可见性。如果属性或操作具有下划线，表明它是静态的。在操作中，可同时列出它接受的参数，以及返回类型，如图A的&ldquo;Java&rdquo;区域所示。</span></div><div>图<span>A</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/7828c73331ea4151a73ab230eb403667.gif" alt="" /><br />包（<span>Package） </span></div><div>包（图<span>B）是一种常规用途的组合机制。UML中的一个包直接对应于Java中的一个包。在Java中，一个包可能含有其他包、类或者同时含有这两者。进行建模时，你通常拥有逻辑性的包，它主要用于对你的模型进行组织。你还会拥有物理性的包，它直接转换成系统中的Java包。每个包的名称对这个包进行了惟一性的标识。</span></div><div>图<span>B</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/4c8f8d9aabdb4dca9a277f854fbc1f58.gif" alt="" /></div><div>接口（<span>Interface）</span></div><div>接口（图<span>C）是一系列操作的集合，它指定了一个类所提供的服务。它直接对应于Java中的一个接口类型。接口既可用图C的那个图标来表示，也可由附加了&lt;&lt;interface&gt;&gt;的一个标准类来表示。通常，根据接口在类图上的样子，就能知道与其他类的关系。</span></div><div>图<span>C</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/b36f9eadfd584f1dba74caa5219538b8.gif" alt="" /></div><div>关系</div><div>后面的例子将针对某个具体目的来独立地展示各种关系。虽然语法无误，但这些例子可进一步精炼，在它们的有效范围内包括更多的语义。</div><div>依赖（<span>Dependency）</span></div><div>实体之间一个<span>&ldquo;使用&rdquo;关系暗示一个实体的规范发生变化后，可能影响依赖于它的其他实例（图D）。更具体地说，它可转换为对不在实例作用域内的一个类或对象的任何类型的引用。其中包括一个局部变量，对通过方法调用而获得的一个对象的引用（如下例所示），或者对一个类的静态方法的引用（同时不存在那个类的一个实例）。也可利用&ldquo;依赖&rdquo;来表示包和包之间的关系。由于包中含有类，所以你可根据那些包中的各个类之间的关系，表示出包和包的关系。</span></div><div>图<span>D</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/0f993949fff745999deb605d554590d2.gif" alt="" /></div><div>关联（<span>Association）</span></div><div>实体之间的一个结构化关系表明对象是相互连接的。箭头是可选的，它用于指定导航能力。如果没有箭头，暗示是一种双向的导航能力。在<span>Java中，关联（图E）转换为一个实例作用域的变量，就像图E的&ldquo;Java&rdquo;区域所展示的代码那样。可为一个关联附加其他修饰符。多重性（Multiplicity）修饰符暗示着实例之间的关系。在示范代码中，Employee可以有0个或更多的TimeCard对象。但是，每个TimeCard只从属于单独一个Employee。</span></div><div>图<span>E</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/b770e146db704c8f85b53ef20d225598.gif" alt="" /><br />聚合（<span>Aggregation）</span></div><div>聚合（图<span>F）是关联的一种形式，代表两个类之间的整体/局部关系。聚合暗示着整体在概念上处于比局部更高的一个级别，而关联暗示两个类在概念上位于相同的级别。聚合也转换成Java中的一个实例作用域变量。<br />关联和聚合的区别纯粹是概念上的，而且严格反映在语义上。聚合还暗示着实例图中不存在回路。换言之，只能是一种单向关系。</span></div><div>图<span>F</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/2825005037b84abe896b4f515186a34f.gif" alt="" /></div><div>合成（<span>Composition）</span></div><div>合成 （图<span>G）是聚合的一种特殊形式，暗示&ldquo;局部&rdquo;在&ldquo;整体&rdquo;内部的生存期职责。合成也是非共享的。所以，虽然局部不一定要随整体的销毁而被销毁，但整体要么负责保持局部的存活状态，要么负责将其销毁。局部不可与其他整体共享。但是，整体可将所有权转交给另一个对象，后者随即将承担生存期职责。</span></div><div>Employee和<span>TimeCard的关系或许更适合表示成&ldquo;合成&rdquo;，而不是表示成&ldquo;关联&rdquo;。</span></div><div>图<span>G</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/f3bf19a91a604a15a360782dc984408b.gif" alt="" /><br />泛化（<span>Generalization）</span></div><div>泛化（图<span>H）表示一个更泛化的元素和一个更具体的元素之间的关系。泛化是用于对继承进行建模的UML元素。在Java中，用extends关键字来直接表示这种关系。</span></div><div>图<span>H</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/a79bfb22d8fe42989072b84291a9316e.gif" alt="" /></div><div>实现（<span>Realization）</span></div><div>实例（图<span>I）关系指定两个实体之间的一个合同。换言之，一个实体定义一个合同，而另一个实体保证履行该合同。对Java应用程序进行建模时，实现关系可直接用implements关键字来表示。</span></div><div>图<span>I</span></div><div><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/843685e31db84719887e5ee2e1b1dfc1.gif" alt="" /></div><div><strong><span style="color: blue">术语大全</span></strong></div><div><span style="color: blue">access</span><span style="color: blue">（访问）</span><br />访问是一种许可依赖关系，允许一个包引用另一个包中的元素。<span><br />见friend、import、visibility。<br />语义<br />一个包（客户）如果要引用另一个包（提供者）内的元素，那么它必须引入一个包，该包包括客户包到提供者包的《access》或《import》依赖关系上的元素。一个包可以隐含地获得对由包含该包的任何包所引入的包的访问权（即，嵌套包可以看到包含包可以看到的一切）。<br />包中的元素可以访问包内所有可见的元素。可见性规则可以总结如下：<br />* 一个包中定义的元素在同一个包中是可见的。<br />* 如果一个元素在一个包中是可见的，那么它对所有嵌套在这个包中的所有包都是可见的。<br />* 如果一个包访问或引入另一个包，那么在要被引入或访问的包中定义为公共可见性的元素对引入包都是可见的。<br />* 如果一个包是另一个包的孩子，那么所有在父包中定义为公共的或受保护的可见性的元素对子包是可见的。<br />* 访问或引入依赖关系是不能传递的，如果A能看到B，且B能看到C，这并不意味着A能看到C。<br />结论：除非一个包能够访问它的嵌套包且嵌套包的内容是公共可见的，否则这个包不能看到它自己的嵌套包的内部。<br />下面是有关可见性的更深一步的规则：<br />* 如果一个类元的内容，如它的属性和操作以及嵌套类，在类元中具有公共可见性，那么它们在包中是可见的。请注意一个子系统的未组织的内容是由上面提到的包规则指导的，但是任何子系统本身的属性或操作由这条规则指导。<br />* 如果一个类元的内容有公共的或受保护的可见性，那么它们对后代类元是可见的。<br />* 一个类元的所有内容对类元内的元素都是可见的，包括类元的方法或状态机中的元素。<br />一般情况下都会涉及到对等包中的元素。在这种情况下，一个元素能看到它自己包内的所有元素和被它所在包引入的包的具有公共可见性的所有元素。一个类可以看到其他类中的公共特征。一个类也可以看到它的祖先的受保护的特征。<br />表示法<br />访问依赖关系用一个从客户包指向提供者包的虚箭头表示。箭头用关键字《access》作为标号。<br />讨论<br />图为一个两个包间的对等层访问的例子。包P能够访问包Q，但是包Q不能访问包P。P包中的类K和L能看到包Q中的类M，但是它们看不到私有类N。除了具有公共可见性的类K之外，类M和N看不到包P中的任何类，因为包Q不能访问包P。要想一个类对对等包是可见的，这个类必须具有公共可见性，并且它的包必须被对等包访问或引入。<br /><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/ed7d47fe849e41308077b28f1abd4267.gif" alt="" /><br />图对等访问<br /><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/longronglin/96cccb5e8e70422a9cd22161d482e530.gif" alt="" /><br />图访问规则<br />图为一个有关可见性和访问声明的更复杂的例子。元素名字前的符号代表了它的可见性：+代表公共的，#代表是受保护的（只对后代可见），-代表是私有的（对外界是不可见的）。<br />类A能看到C和E因为它们包含在包Y和X内。<br />类C和A能够看到D，因为包Y引入了包Z。类A嵌套在包Y中并且能够看到Y能看到的一切。<br />类A、C和E能看到B，因为它们嵌套在包X中，而X引入包含B的包V，但是，它们看不到F，因为F在它的包V中是有私有可见性。所以，类F在包V外是看不到的。<br />类E看不到D因为D在包Z中，而Z并没有被包X访问。<br />类C和E都看不到A。类A在包U中，U没有被任何包访问。<br />类B和F能够看到类D和E，D和E建立在包含包中。它们也能看到C，C在包Y中，而包Y被包含包访问。虽然F是私有的，但这并不影响它看到其他的类，而其他的类看不到F。<br />类B和F能够互相看到，因为它们在同一个包中。类F对外面的包中的类是私有的，但对它自己包中的类不是这样。</span></div><div><span style="color: blue">UML</span><span style="color: blue">与设计模式（设计模式请查询相关资料）</span></div><div><strong>参考文献：</strong></div><div><a href="http://blog.csdn.net/legendinfo/" target="_blank"><span style="color: windowtext">http://blog.csdn.net/legendinfo/</span></a></div><div><a href="http://blog.csdn.net/dwater/" target="_blank"><span style="color: windowtext">http://blog.csdn.net/dwater/</span></a></div><div><a href="http://blog.csdn.net/cwj007/" target="_blank"><span style="color: windowtext">http://blog.csdn.net/cwj007/</span></a></div><div>《<span>UML参考手册》</span></div><div>《<span>The Unified Modeling Language Reference Language》</span></div><div>《标准建模语言<span>UML及其支持环境》北京航空航天大学软件工程研究所</span></div><div>《<span>UML Programming Guide》</span></div><div>《<span>OMG Unified Modeling Language Specification》</span></div><div>《<span>X-Programmar》</span></div>
          <br/>
          <span style="color:red;">
            <a href="http://jarit.javaeye.com/blog/164409#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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, 23 Feb 2008 11:07:54 +0800</pubDate>
        <link>http://jarit.javaeye.com/blog/164409</link>
        <guid>http://jarit.javaeye.com/blog/164409</guid>
      </item>
      <item>
        <title>JDBC之URL注解</title>
        <author>jarit</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jarit.javaeye.com">jarit</a>&nbsp;
          链接：<a href="http://jarit.javaeye.com/blog/164170" style="color:red;">http://jarit.javaeye.com/blog/164170</a>&nbsp;
          发表时间: 2008年02月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1.JDBC URL的概念<br /><br />JDBC URL提供了一种标识数据库的方法，可以使相应的驱动程序能识别该数据库并与之建立连接。实际上，驱动程序编程员将决定用什么JDBC URL来标识特定的驱动程序。用户不必关心如何来形成JDBC URL，它们只须使用与所用的驱动程序一起提供的URL即可。JDBC的作用是提供某些约定，驱动程序程序员在构造它们的JDBC URL时应该遵循这些约定。<br /><br />（1）由于JDBC URL要与各种不同的驱动程序一起用，因此，这些约定应非常灵活。首先，它们应允许不同的驱动程序使用不同的方案来命名数据库。例如，odbc子协议允许（但不是要求）URL含有属性值。<br /><br />（2）JDBC URL应允许驱动程序程序员将一切所需的信息编入其中。这样就可以让要与数据库对话的applet打开数据库连接，而无需要求用户去做任何系统管理工作。<br /><br />（3）JDBC URL应允许某种程度的间接性。也就是说，JDBC URL可指向逻辑主机或数据库名，而这种逻辑主机或数据库名将由网络命名系统动态地转换为实际名称。这可以使系统不必将特定主机声明为JDBC名称的一部分。网络命名服务（例如：DNS，NIS和DCE）有多种，而对于使用哪种命名服务并无限制。<br /><br />2.JDBC URL格式<br /><br />JDBC URL的标准语法如下所示。它由三个部分组成，各部分间用冒号分隔。<br /><br />jdbc:&lt;子协议>:&lt;子名称><br /><br />JDBC URL的三个部分可以分解如下：<br /><br />（1）jdbc——协议。JDBC URL中的协议总是jdbc.<br /><br />（2）&lt;子协议>——驱动程序名或数据库连接机制（这种机制可由一个或多个驱动程序支持）的名称。子协议名的典型示例是：ODBC，该名称是为用于指定ODBC风格的数据资源名称的URL专门保留。例如，为了通过JDBC-ODBC桥来访问某个数据库，可以用如下的所示的UR：<br /><br />jdbc:odbc:mydatabase<br /><br />（3）&lt;子名称>——一种标识数据库的方法。子名称可以依不同的子协议而变化，用子名称的目的是为了定位数据库提供足够的信息。如果数据库是通过Internet来访问的，在JDBC URL中应将网络地址作为子名称的一部分包括进去，且必须遵循如下所示的标准URL命名约定：<br /><br />//主机名：端口/子协议<br /><br />===========================================<br /><br />    MySQL JDBC Driver<br />    <br />    常用的有两个，一个是gjt（Giant Java Tree）组织提供的mysql驱动，其JDBC Driver名称（JAVA类名）为：org.gjt.mm.mysql.Driver<br />    详情请参见网站：http://www.gjt.org/<br />    <br />    另一个是mysql官方提供的JDBC Driver，其JAVA类名为：com.mysql.jdbc.Driver<br />    驱动下载网址：http://dev.mysql.com/downloads/，进入其中的MySQL Connector/J区域下载。<br /><br />    mysql JDBC URL格式如下：<br />    <br />    jdbc:mysql://[host：port],[host：port].../[database][?参数名1][=参数值1][&参数名2][=参数值2]...<br /><br /><br />    现只列举几个重要的参数，如下表所示： <br />    <br />         <br />    参数名称 参数说明 缺省值 最低版本要求   <br /><br />    user 数据库用户名（用于连接数据库）  所有版本  <br /><br />    password 用户密码（用于连接数据库）  所有版本  <br /><br />    useUnicode 是否使用Unicode字符集，如果参数characterEncoding设置为gb2312或gbk，本参数值必须设置为true false  1.1g  <br /><br />    characterEncoding 当useUnicode设置为true时，指定字符编码。比如可设置为gb2312或gbk false 1.1g   <br /><br />    autoReconnect 当数据库连接异常中断时，是否自动重新连接？ false 1.1   <br /><br />    autoReconnectForPools 是否使用针对数据库连接池的重连策略 false 3.1.3   <br /><br />    failOverReadOnly 自动重连成功后，连接是否设置为只读？ true 3.0.12   <br /><br />    maxReconnects autoReconnect设置为true时，重试连接的次数 3 1.1   <br /><br />    initialTimeout autoReconnect设置为true时，两次重连之间的时间间隔，单位：秒 2 1.1   <br /><br />    connectTimeout 和数据库服务器建立socket连接时的超时，单位：毫秒。 0表示永不超时，适用于JDK 1.4及更高版本 0 3.0.1   <br /><br />    socketTimeout socket操作（读写）超时，单位：毫秒。 0表示永不超时 0 3.0.1<br />     <br /><br />    <br />    对应中文环境，通常mysql连接URL可以设置为：<br />    jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk&autoReconnect=true&failOverReadOnly=false<br />    <br />    在使用数据库连接池的情况下，最好设置如下两个参数：<br />    autoReconnect=true&failOverReadOnly=false<br />    <br />    需要注意的是，在xml配置文件中，url中的&符号需要转义成&。比如在tomcat的server.xml中配置数据库连接池时，mysql jdbc url样例如下：<br />    jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk<br />    &amp;autoReconnect=true&;amp;failOverReadOnly=false
          <br/>
          <span style="color:red;">
            <a href="http://jarit.javaeye.com/blog/164170#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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>Fri, 22 Feb 2008 12:47:14 +0800</pubDate>
        <link>http://jarit.javaeye.com/blog/164170</link>
        <guid>http://jarit.javaeye.com/blog/164170</guid>
      </item>
  </channel>
</rss>