<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[21 工作室 - hiberate]]></title>
<link>http://www.is21.cn/</link>
<description><![CDATA[本站承接网页制作、软件项目开发、代写代码等业务，我们将和您真诚合作，以最低的价格提供最优越的服务。13488846575   联系人:潘劲]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog2 v2.4]]></copyright>
<webMaster><![CDATA[lianxiangpanjin@163.com(潘劲)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>21 工作室</title> 
	<url>http://www.is21.cn/images/logos.gif</url> 
	<link>http://www.is21.cn/</link> 
	<description>21 工作室</description> 
</image>

			<item>
			<link>http://www.is21.cn/default.asp?id=432</link>
			<title><![CDATA[hibernate 中出现 table is not mapped 问题]]></title>
			<author>lianxiangpanjin@163.com(admin)</author>
			<category><![CDATA[hiberate]]></category>
			<pubDate>Tue,07 Oct 2008 16:25:39 +0800</pubDate>
			<guid>http://www.is21.cn/default.asp?id=432</guid>	
		<description><![CDATA[HQL语句原来是这样写的：&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;hql=&#34;from&nbsp;person&nbsp;as&nbsp;p&nbsp;wh&#101;re&nbsp;p.id=?&nbsp;and&nbsp;p.password=?&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;后来上网查找原因，发现原来person第一个字母应大字，也就是说表名应该是ORM映射的类名。&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;改成这样就可以了：&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;hql=&#34;from&nbsp;Person&nbsp;as&nbsp;p&nbsp;wh&#101;re&nbsp;p.id=?&nbsp;and&nbsp;p.password=?&#34;;&nbsp;<br/><br/><br/>一般与类名一致<br/><br/><br/><br/>&nbsp;&nbsp;原来的是这样写的：<br/><br/>&#34;del&#101;te&nbsp;from&nbsp;table&nbsp;wh&#101;re&nbsp;username&nbsp;=&nbsp;:user&#34;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;后来发现原因在于要写成这样：<br/><br/>&#34;del&#101;te&nbsp;from&nbsp;User&nbsp;wh&#101;re&nbsp;username&nbsp;=&nbsp;:name&#34;<br/><br/>只要将表明换成ORM映射的类名就可以了<br/><br/><br/><br/>&#39;&nbsp;引用自<a href="http://blog.5ego.net/article.asp?id=35" target="_blank">http://blog.5ego.net/article.asp?id=35</a><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.is21.cn/default.asp?id=431</link>
			<title><![CDATA[Hibernate3中的更新与删除]]></title>
			<author>lianxiangpanjin@163.com(admin)</author>
			<category><![CDATA[hiberate]]></category>
			<pubDate>Tue,07 Oct 2008 16:24:05 +0800</pubDate>
			<guid>http://www.is21.cn/default.asp?id=431</guid>	
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;Up&#100;ate&nbsp;和&nbsp;Del&#101;te语句的语法为：&nbsp;<br/>(&nbsp;Up&#100;ate&nbsp;|&nbsp;Del&#101;te&nbsp;)&nbsp;FROM&nbsp;?&nbsp;ClassName&nbsp;(Wh&#101;re&nbsp;Wh&#101;re_CONDITIONS)&nbsp;?。&nbsp;有几点说明：<br/><br/>1.在FROM子句（from-clause）中，FROM关键字是可选的<br/><br/>2.在FROM子句（from-clause）中只能有一个类名，并且它不能有别名<br/><br/>3.不能在大批量HQL语句中使用连接（显式或隐式都不行）。不过在Wh&#101;re子句中可以使用子查询。<br/><br/>4.整个Wh&#101;re子句是可选的。<br/><br/>举个例子，使用Query.executeUp&#100;ate()方法执行一个HQL&nbsp;Up&#100;ate语句：<br/><br/>Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;=&nbsp;session.beginTransaction();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;hqlUp&#100;ate&nbsp;=&nbsp;&#34;up&#100;ate&nbsp;Customer&nbsp;set&nbsp;name&nbsp;=&nbsp;:newName&nbsp;wh&#101;re&nbsp;name&nbsp;=&nbsp;:oldName&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;up&#100;atedEntities&nbsp;=&nbsp;s.cr&#101;ateQuery(&nbsp;hqlUp&#100;ate&nbsp;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.setString(&nbsp;&#34;newName&#34;,&nbsp;newName&nbsp;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.setString(&nbsp;&#34;oldName&#34;,&nbsp;oldName&nbsp;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.executeUp&#100;ate();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();<br/>执行一个HQL&nbsp;Del&#101;te，同样使用&nbsp;Query.executeUp&#100;ate()&nbsp;方法&nbsp;（此方法是为那些熟悉JDBC&nbsp;PreparedStatement.executeUp&#100;ate()&nbsp;的人们而设定的）<br/><br/>Session&nbsp;session&nbsp;=&nbsp;sessionFactory.openSession();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;=&nbsp;session.beginTransaction();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;hqlDel&#101;te&nbsp;=&nbsp;&#34;del&#101;te&nbsp;Customer&nbsp;wh&#101;re&nbsp;name&nbsp;=&nbsp;:oldName&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;del&#101;tedEntities&nbsp;=&nbsp;s.cr&#101;ateQuery(&nbsp;hqlDel&#101;te&nbsp;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.setString(&nbsp;&#34;oldName&#34;,&nbsp;oldName&nbsp;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.executeUp&#100;ate();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();<br/>由Query.executeUp&#100;ate()方法返回的整型值表明了受此操作影响的记录数量。注意这个数值可能与数据库中被（最后一条SQL语句）影响了的“行”数有关，也可能没有。一个大批量HQL操作可能导致多条实际的SQL语句被执行，&nbsp;举个例子，对joined-subclass映射方式的类进行的此类操作。这个返回值代表了实际被语句影响了的记录数量。在那个joined-subclass的例子中，&nbsp;对一个子类的删除实际上可能不仅仅会删除子类映射到的表而且会影响“根”表，还有可能影响与之有继承关系的joined-subclass映射方式的子类的表。<br/><br/>注意，上述大批量HQL操作的少数限制会在新版本中得到改进；进一步详细信息请参考JIRA里的路线图(roadmap)。<br/><br/><br/>&#39;引用自<a href="http://hi.baidu.com/webidea/blog/item/c07f60c794be4ddad000605e.html" target="_blank">http://hi.baidu.com/webidea/blog/item/c07f60c794be4ddad000605e.html</a><br/><br/><br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.is21.cn/default.asp?id=64</link>
			<title><![CDATA[hibernate的hibernate.cfg.xml配置（ms sqlserver）]]></title>
			<author>lianxiangpanjin@163.com(admin)</author>
			<category><![CDATA[hiberate]]></category>
			<pubDate>Mon,17 Sep 2007 23:15:40 +0800</pubDate>
			<guid>http://www.is21.cn/default.asp?id=64</guid>	
		<description><![CDATA[&lt;!DOCTYPE&nbsp;hibernate-configuration&nbsp;PUBLIC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#34;-//Hibernate/Hibernate&nbsp;Configuration&nbsp;DTD&nbsp;3.0//EN&#34;<br/>&#34;<a href="http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" target="_blank">http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd</a>&#34;&gt;<br/>&lt;hibernate-configuration&gt;<br/>&lt;session-factory&nbsp;&gt;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=&#34;hibernate.dialect&#34;&gt;org.hibernate.dialect.SQLServerDialect&lt;/property&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=&#34;connection.driver_class&#34;&gt;com.microsoft.jdbc.sqlserver.SQLServerDriver&lt;/property&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=&#34;connection.url&#34;&gt;jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=myhibernate<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=&#34;connection.username&#34;&gt;sa&lt;/property&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=&#34;connection.password&#34;&gt;sa&lt;/property&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;mapping&nbsp;resource=&#34;com/ouxingning/hibernate/EntityArticle.hbm.xml&#34;/&gt;<br/>&lt;/session-factory&gt;<br/>&lt;/hibernate-configuration&gt;<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.is21.cn/default.asp?id=63</link>
			<title><![CDATA[关于hibernate的配置文件hibernate.cfg.xml]]></title>
			<author>lianxiangpanjin@163.com(admin)</author>
			<category><![CDATA[hiberate]]></category>
			<pubDate>Mon,17 Sep 2007 23:08:58 +0800</pubDate>
			<guid>http://www.is21.cn/default.asp?id=63</guid>	
		<description><![CDATA[&lt;property&nbsp;name=&#34;dialect&#34;&gt;org.hibernate.dialect.MySQLDialect&lt;/property&gt;一个Hibernate&nbsp;Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL<br/>&lt;property&nbsp;name=&#34;connection.driver_class&#34;&gt;com.mysql.jdbc.Driver&lt;/property&gt;jdbc驱动类<br/>&lt;property&nbsp;name=&#34;connection.url&#34;&gt;jdbc:mysql://localhost/student&lt;/property&gt;jdbc&nbsp;URL<br/>&lt;property&nbsp;name=&#34;connection.username&#34;&gt;root&lt;/property&gt;数据库用户<br/>&lt;property&nbsp;name=&#34;connection.password&#34;&gt;&lt;/property&gt;数据库用户密码<br/>&lt;property&nbsp;name=&#34;hibernate.connection.pool.size&#34;&gt;10&lt;/property&gt;连接池容量上限数目<br/>&lt;property&nbsp;name=&#34;hibernate.show_sql&#34;&gt;true&lt;/property&gt;输出所有SQL语句到控制台<br/>&lt;property&nbsp;name=&#34;jdbc.fetch_size&#34;&gt;50&lt;/property&gt;非零值，指定JDBC抓取数量的大小<br/>&lt;property&nbsp;name=&#34;jdbc.batch_size&#34;&gt;20&lt;/property&gt;非零值，允许Hibernate使用JDBC2的批量更新<br/>&lt;!--property&nbsp;name=&#34;jdbc.use_scrollable_resultset&#34;&gt;false&lt;/property--&gt;允许Hibernate使用JDBC2的可滚动结果集.&nbsp;只有在使用用户提供的JDBC连接时，这个选项才是必要的,&nbsp;否则Hibernate会使用连接的元数据<br/><br/><br/>&lt;mapping&nbsp;resource=&#34;eqzhou/test/Student.hbm.xml&#34;/&gt;映射定义文件<br/>&lt;mapping&nbsp;resource=&#34;eqzhou/test/Huzhao.hbm.xml&#34;/&gt;映射定义文件<br/>&lt;!--mapping&nbsp;resource=&#34;eqzhou/test/User.hbm.xml&#34;/--&gt;映射定义文件<br/>&lt;mapping&nbsp;resource=&#34;eqzhou/test/Dep.hbm.xml&#34;/&gt;映射定义文件<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.is21.cn/default.asp?id=62</link>
			<title><![CDATA[hibernate.properties]]></title>
			<author>lianxiangpanjin@163.com(admin)</author>
			<category><![CDATA[hiberate]]></category>
			<pubDate>Mon,17 Sep 2007 23:07:16 +0800</pubDate>
			<guid>http://www.is21.cn/default.asp?id=62</guid>	
		<description><![CDATA[##----------&nbsp;this&nbsp;is&nbsp;the&nbsp;connection&nbsp;and&nbsp;hibernate.dialect&nbsp;fo&nbsp;mysql&nbsp;--------------------------------&nbsp;<br/>hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect<br/>hibernate.connection.driver_class=org.gjt.mm.mysql.Driver<br/>hibernate.connection.url=jdbc:mysql://ip:3306/databasename?lastUp&#100;ateCount=true;useUnicode=true;characterEncoding=gb2312<br/>hibernate.connection.username=root<br/>hibernate.connection.password=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>##----------&nbsp;this&nbsp;is&nbsp;the&nbsp;connection&nbsp;and&nbsp;hibernate.dialect&nbsp;fo&nbsp;mssqlserver&nbsp;--------------------------------&nbsp;<br/>#hibernate.dialect=net.sf.hibernate.dialect.SQLServerDialect<br/>#hibernate.connection.driver_class=net.sourceforge.jtds.jdbc.Driver<br/>#hibernate.connection.url=jdbc:jtds:sqlserver://IP:1433;DatabaseName=databasename;charset=cp936<br/>#hibernate.connection.username=sa<br/>#hibernate.connection.password=sa<br/><br/>##----------&nbsp;this&nbsp;is&nbsp;the&nbsp;connection&nbsp;and&nbsp;hibernate.dialect&nbsp;fo&nbsp;ibmdb2&nbsp;--------------------------------&nbsp;<br/>#hibernate.dialect=net.sf.hibernate.dialect.DB2Dialect<br/>#hibernate.connection.driver_class=COM.ibm.db2.jdbc.app.DB2Driver<br/>#hibernate.connection.url=jdbc:db2:databasename<br/>#hibernate.connection.username=sa<br/>#hibernate.connection.password=sa<br/><br/>##----------&nbsp;this&nbsp;is&nbsp;the&nbsp;connection&nbsp;and&nbsp;hibernate.dialect&nbsp;fo&nbsp;o&#114;acle&nbsp;--------------------------------&nbsp;<br/>#hibernate.dialect=net.sf.hibernate.dialect.Oracle9Dialect<br/>#hibernate.dialect=net.sf.hibernate.dialect.OracleDialect<br/>#hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver<br/>#hibernate.connection.url=jdbc:oracle:thin:@localhost:1521:databasename<br/>#hibernate.connection.username=ora<br/>#hibernate.connection.password=ora<br/><br/>##----------&nbsp;after&nbsp;is&nbsp;hibernate&nbsp;config<br/><br/>hibernate.show_sql=true<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>hibernate.query.substitutions=true&nbsp;1,&nbsp;false&nbsp;0,&nbsp;yes&nbsp;&#39;Y&#39;,&nbsp;no&nbsp;&#39;N&#39;<br/>hibernate.jdbc.use_streams_for_binary=true<br/>hibernate.cache.region_prefix=hibernate.test<br/>hibernate.cache.use_query_cache=true<br/>hibernate.cache.provider_class=net.sf.ehcache.hibernate.Provider<br/>&nbsp;&nbsp;<br/>hibernate.connection.pool.size=20<br/>hibernate.jdbc.batch_size=25<br/>hibernate.statement_cache.size&nbsp;=&nbsp;6<br/>jdbc.fetch_size=50&nbsp;<br/>jdbc.use_scrollable_resultset=false<br/>jdbc.use_scrollable_resultset=false<br/>hibernate.jdbc.use_streams_for_binary=true<br/>hibernate.max_fetch_depth=1<br/><br/>##############################<br/>###&nbsp;Proxool&nbsp;Connection&nbsp;Pool###<br/>##############################<br/><br/>##&nbsp;Properties&nbsp;for&nbsp;external&nbsp;configuration&nbsp;of&nbsp;Proxool<br/><br/>hibernate.proxool.pool_alias&nbsp;netAuditing<br/><br/>##&nbsp;Only&nbsp;need&nbsp;one&nbsp;of&nbsp;the&nbsp;following<br/><br/>#hibernate.proxool.existing_pool&nbsp;true<br/>#hibernate.proxool.xml&nbsp;cfg/proxool.xml<br/>#hibernate.proxool.properties&nbsp;proxool.properties<br/><br/>##########################<br/>###&nbsp;Second-level&nbsp;Cache&nbsp;###<br/>##########################<br/><br/>##&nbsp;optimize&nbsp;chache&nbsp;for&nbsp;minimal&nbsp;&#34;puts&#34;&nbsp;instead&nbsp;of&nbsp;minimal&nbsp;&#34;gets&#34;&nbsp;(good&nbsp;for&nbsp;clustered&nbsp;cache)&nbsp;<br/><br/>#hibernate.cache.use_minimal_puts&nbsp;true<br/><br/><br/>##&nbsp;set&nbsp;a&nbsp;prefix&nbsp;for&nbsp;cache&nbsp;region&nbsp;names<br/><br/>hibernate.cache.region_prefix&nbsp;hibernate.test<br/><br/><br/>##&nbsp;enable&nbsp;the&nbsp;query&nbsp;cache<br/><br/>hibernate.cache.use_query_cache&nbsp;true<br/><br/><br/>##&nbsp;choose&nbsp;a&nbsp;cache&nbsp;implementation<br/><br/>hibernate.cache.provider_class&nbsp;net.sf.ehcache.hibernate.Provider<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.is21.cn/default.asp?id=61</link>
			<title><![CDATA[hibernate.cfg.xml ]]></title>
			<author>lianxiangpanjin@163.com(admin)</author>
			<category><![CDATA[hiberate]]></category>
			<pubDate>Mon,17 Sep 2007 23:06:17 +0800</pubDate>
			<guid>http://www.is21.cn/default.asp?id=61</guid>	
		<description><![CDATA[&lt;?xml&nbsp;version=&#34;1.0&#34;&nbsp;encoding=&#34;utf-8&#34;?&gt;<br/>&lt;!DOCTYPE&nbsp;hibernate-configuration<br/>PUBLIC&nbsp;&#34;-//Hibernate/Hibernate&nbsp;Configuration&nbsp;DTD//EN&#34;<br/>&#34;<a href="http://hibernate.sourceforge.net/hibernate-configuration-2.0." target="_blank">http://hibernate.sourceforge.net/hibernate-configuration-2.0.</a><br/>dtd&#34;&gt;<br/>&lt;hibernate-configuration&gt;<br/>&lt;!—-&nbsp;SessionFactory&nbsp;配置&nbsp;--&gt;<br/>&lt;session-factory&gt;<br/>&lt;!—-&nbsp;数据库URL&nbsp;--&gt;<br/>&lt;property&nbsp;name=&#34;hibernate.connection.url&#34;&gt;<br/>jdbc:mysql://localhost/sample<br/>&lt;/property&gt;<br/>&lt;!—-&nbsp;数据库JDBC驱动&nbsp;--&gt;<br/>&lt;property&nbsp;name=&#34;hibernate.connection.driver_class&#34;&gt;<br/>o&#114;g.gjt.mm.mysql.Driver<br/>&lt;/property&gt;<br/>&lt;!—-&nbsp;数据库用户名&nbsp;--&gt;<br/>&lt;property&nbsp;name=&#34;hibernate.connection.username&#34;&gt;<br/>User<br/>&lt;/property&gt;<br/>&lt;!—-&nbsp;数据库用户密码&nbsp;--&gt;<br/>&lt;property&nbsp;name=&#34;hibernate.connection.password&#34;&gt;<br/>Mypass<br/>&lt;/property&gt;<br/>&lt;!--dialect&nbsp;，每个数据库都有其对应的Dialet以匹配其平台特性&nbsp;--&gt;<br/>&lt;property&nbsp;name=&#34;dialect&#34;&gt;<br/>net.sf.hibernate.dialect.MySQLDialect<br/>&lt;/property&gt;<br/>&lt;!—-&nbsp;是否将运行期生成的SQL输出到日志以供调试&nbsp;--&gt;<br/>&lt;property&nbsp;name=&#34;hibernate.show_sql&#34;&gt;<br/>True<br/>&lt;/property&gt;<br/>&lt;!—-&nbsp;是否使用数据库外连接&nbsp;--&gt;<br/>&lt;property&nbsp;name=&#34;hibernate.use_outer_join&#34;&gt;<br/>True<br/>&lt;/property&gt;<br/>&lt;!—-&nbsp;事务管理类型，这里我们使用JDBC&nbsp;Transaction&nbsp;--&gt;<br/>&lt;property&nbsp;name=&#34;hibernate.transaction.factory_class&#34;&gt;<br/>net.sf.hibernate.transaction.JDBCTransactionFactory<br/>&lt;/property&gt;<br/>&lt;!—映射文件配置，注意配置文件名必须包含其相对于根的全路径&nbsp;--&gt;<br/>&lt;mapping&nbsp;resource=&#34;net/xiaxin/xdoclet/TUser.hbm.xml&#34;/&gt;<br/>&lt;mapping&nbsp;resource=&#34;net/xiaxin/xdoclet/TGroup.hbm.xml&#34;/&gt;<br/>&lt;/session-factory&gt;<br/>&lt;/hibernate-configuration&gt;]]></description>
		</item>
		
			<item>
			<link>http://www.is21.cn/default.asp?id=19</link>
			<title><![CDATA[工厂模式的简单用例]]></title>
			<author>lianxiangpanjin@163.com(admin)</author>
			<category><![CDATA[hiberate]]></category>
			<pubDate>Mon,13 Aug 2007 11:26:37 +0800</pubDate>
			<guid>http://www.is21.cn/default.asp?id=19</guid>	
		<description><![CDATA[工厂模式是J2EE核心模式中较简单的一种，听说Jive论坛中对数种设计模式有着广泛的应用，工厂模式也包括其中，本人就从该模式起步，希望有一天能对各种设计模式运用自如。<br/><br/>现给出一简单用例，模拟一火腿（Ham）生产工厂，工厂可以生产数种类型的Ham，那么在创建了一个工厂实例后，只需要告诉它请你生产何种Ham，它就会给你生产出来：<br/>package&nbsp;test;<br/><br/>interface&nbsp;Ham&nbsp;{&nbsp;//定义接口，用于辅助实现工厂模式<br/>&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;show();//由Ham工厂生产出的各种Ham将有show()的能力<br/>}<br/>public&nbsp;class&nbsp;FatoryModule&nbsp;{//工厂类，用于产品多种不同种类的Ham<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Ham&nbsp;getHam(String&nbsp;HamType)&nbsp;throws&nbsp;Exception{//工厂类对象生产Ham的动作<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(HamType.equals(&#34;HamA&#34;))&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;HamA();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(HamType.equals(&#34;HamB&#34;))&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;HamB();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(HamType.equals(&#34;HamC&#34;))&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;HamC();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;Exception();//如果该工厂收到生产某种Ham的指令但暂不支持，则抛出异常<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{//测试代码<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FatoryModule&nbsp;fatorymodule&nbsp;=&nbsp;new&nbsp;FatoryModule();<br/>&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ham&nbsp;myHam&nbsp;=&nbsp;fatorymodule.getHam(&#34;HamB&#34;);//可以方便地创建各种类型的Ham，而程序结构和代码的修改量达到最小<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myHam.show();<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;ex)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();//应进一步处理异常<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/>class&nbsp;HamA&nbsp;implements&nbsp;Ham&nbsp;{&nbsp;//工厂中生产的一种产品HamA<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;show()&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;You&nbsp;got&nbsp;a&nbsp;HamA.&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/>class&nbsp;HamB&nbsp;implements&nbsp;Ham&nbsp;{&nbsp;//工厂生产的另一种产品HamB<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;show()&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;You&nbsp;got&nbsp;a&nbsp;HamB.&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/>class&nbsp;HamC&nbsp;implements&nbsp;Ham&nbsp;{&nbsp;//工厂生产的第三种产品HamC<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;show()&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;You&nbsp;got&nbsp;a&nbsp;HamC.&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过程序的演示我得到了以下结论：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由于应用了工厂模式，我只需要告诉工厂对象给我生产一种什么样的Ham（即getHam()方法中的参数），便可以得到此类Ham，而不用写HamX&nbsp;&nbsp;hamX=new&nbsp;HamX();&nbsp;要是有数十种不同的Ham对象需要在程序的不同地方被创建，那么使用工厂模式代码将显得简单而统一，每个需要不同Ham的地方仅是getHam()的参数不同。否则程序一旦需要扩展和维护，数十处的new语句将让人头痛。而如果需要添加新的Ham类型，只需要在工厂类中添加即可。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我还这样理解：如果说每种Ham对象的创建都是一条生产线，那么我们用一个工厂将多个生产线封装起来了，从而用户就好比只与工厂传达室的人打交道，告诉他请你们工厂生产一种什么产品，而不是与每一条生产线打交道－－这样说来当然是有好处的。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.is21.cn/default.asp?id=17</link>
			<title><![CDATA[简单的数据库操作]]></title>
			<author>lianxiangpanjin@163.com(admin)</author>
			<category><![CDATA[hiberate]]></category>
			<pubDate>Mon,13 Aug 2007 00:17:28 +0800</pubDate>
			<guid>http://www.is21.cn/default.asp?id=17</guid>	
		<description><![CDATA[interface:&nbsp;DAOFace();<br/>implement&nbsp;class:&nbsp;DAOFaceImpl();<br/><br/>DAOFace&nbsp;face&nbsp;=&nbsp;new&nbsp;DAOFaceImpl();<br/>face.addUser();<br/>-------------------------------------------------------------<br/><br/><br/>先定义一个DAO接口如：IHelloDAO,里面定义你要进行的数据库操作的抽象方法如添加记录、查询等<br/>再写一个DAO实现类实现上边的接口如：HelloDAO,具体实现接口中定义的抽象方法。给你个例子：<br/><br/>public&nbsp;interface&nbsp;IUserDAO&nbsp;{&nbsp;<br/>public&nbsp;User&nbsp;getByName(String&nbsp;name,String&nbsp;password);<br/>}<br/><br/>public&nbsp;class&nbsp;UserDAO&nbsp;extends&nbsp;HibernateDaoSupport&nbsp;implements&nbsp;IUserDAO{<br/><br/>public&nbsp;User&nbsp;getByName(String&nbsp;name,String&nbsp;password){<br/>Object[]&nbsp;args=new&nbsp;Object[]{name,password};<br/>int&nbsp;i=getHibernateTemplate().find(&#34;from&nbsp;User&nbsp;i&nbsp;wh&#101;re&nbsp;i.username=?&nbsp;and&nbsp;i.userpassword=?&#34;,args).size();<br/>System.out.println(&#34;与该username相同的元素个数是：&#34;+i);<br/>if&nbsp;(i!=0)<br/>return&nbsp;(User)&nbsp;getHibernateTemplate().find(&#34;from&nbsp;User&nbsp;i&nbsp;wh&#101;re&nbsp;i.username=?&nbsp;and&nbsp;i.userpassword=?&#34;,args).get(0);<br/>else{<br/>User&nbsp;user=new&nbsp;User();<br/>user=null;<br/>return&nbsp;user;<br/>}<br/>}<br/><br/>}<br/>-----------------------------------------------------<br/>在Action中调用：User&nbsp;user=userDAO.getByName(username,password);<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.is21.cn/default.asp?id=16</link>
			<title><![CDATA[用DAO模式操作数据库(未运行)]]></title>
			<author>lianxiangpanjin@163.com(admin)</author>
			<category><![CDATA[hiberate]]></category>
			<pubDate>Sun,12 Aug 2007 23:43:22 +0800</pubDate>
			<guid>http://www.is21.cn/default.asp?id=16</guid>	
		<description><![CDATA[DAO（Data&nbsp;Access&nbsp;Object，数据访问对象），是Java编程中的一种经典模式，正被广泛应用，也是J2EE架构中持久层框架的基础知识，基于分层次式的软件架构来实现对数据库的访问操作。<br/><br/>　　DAO模式的主要思想就是从抽象数据源获取与操纵数据的方法。抽象数据的含义就是编写应用程序的程序员不必关心数据库的物理位置，是何种数据库，只须使用封装数据库中表示记录的数据对象即可。<br/>图中BusinessObject业务对象，是使用DAO模式的客户端；DataTransferObject数据传输对象，在应用程序不同层次之间传输对象，在一个分布式应用程序中，通常可以提高整体的性能；DataAccessObject数据输入/输出对象封装了对数据源的一些基本的操作；DataSource指的是数据源。也可以从图中看出，DAO模式分离了业务逻辑和数据逻辑，使得编写的软件具有良好的层次式体系结构。<br/><br/>　　DAO模式中对于数据库的访问，可以使用任意的Java数据访问方式，如JDBC&nbsp;API、EJB,&nbsp;JDO/Hibernate以及任何其他的ORM（对象关系映射工具）。<br/><br/>　　【实例66】&nbsp;&nbsp;用DAO模式操作数据库<br/><br/>　　下面是一个相对复杂的应用实例，一方面理解DAO模式操作数据库的分层式软件开发思想，另一方面结合第7章中用.properties作数据库连接配置文件的方法，并用JavaBean来实现对配置文件中属性值的读取。<br/><br/>　　本例不再使用ROOT（Tomcat默认的Web应用），而使用一个新的Web应用——dao。建立一个应用最简单的方法就是在Tomcat&nbsp;5.5的安装目录下的webapps子文件夹中创建一个文件夹，命名为“dao”，文件夹结构如图8-12所示。<br/><br/>　从上图可以看出，类的组织层次上共有3个包，DAO.connDB包中存放与数据库连接相关的类；DAO.table包中存放封装表的类；DAO.tableOP包中存放对表操作的类；数据库连接的配置文件dbconn.properties位于classes目录中。类之间的调用关系如下：<br/><br/>所有代码如下：<br/>dbconn.properties文件存放连接数据库的配置参数，内容如下：<br/>　　dbconn.properties<br/>　　#SQL&nbsp;Server<br/>　　driverName=com.microsoft.jdbc.sqlserver.SQLServerDriver　　connString=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=testDatabase<br/>　　userName=sa<br/>　　password=6599996<br/>　　DAO.connDB.readPropertie类用来读取.properties文件中的配置，其源代码如下：<br/>　　readProperties.java<br/>　　package&nbsp;DAO.connDB;<br/>　　import&nbsp;java.io.InputStream;<br/>　　import&nbsp;java.util.Properties;<br/>　　//读.properties文件属性类<br/>　　public&nbsp;class&nbsp;readProperties&nbsp;{<br/>&nbsp;String&nbsp;propertyFileName=null;//.properties文件名称<br/>&nbsp;public&nbsp;String&nbsp;getPropertyFileName()&nbsp;{<br/>&nbsp;&nbsp;return&nbsp;propertyFileName;<br/>&nbsp;}<br/>&nbsp;public&nbsp;void&nbsp;setPropertyFileName(String&nbsp;propertyFileName)&nbsp;{<br/>&nbsp;&nbsp;this.propertyFileName&nbsp;=&nbsp;propertyFileName;<br/>&nbsp;}<br/>&nbsp;public&nbsp;String&nbsp;getPropertyFromFile(String&nbsp;refName)<br/>&nbsp;{//从.properties文件中得到refName属性的值<br/>&nbsp;&nbsp;if(this.getPropertyFileName()==null)&nbsp;return&nbsp;null;<br/>&nbsp;&nbsp;else{<br/>&nbsp;&nbsp;&nbsp;try{<br/>&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;fin&nbsp;=&nbsp;getClass().getResourceAsStream(this.&nbsp;get&nbsp;Property&nbsp;FileName());<br/>&nbsp;&nbsp;&nbsp;&nbsp;Properties&nbsp;props&nbsp;=&nbsp;new&nbsp;Properties();<br/>&nbsp;&nbsp;&nbsp;&nbsp;props.load(fin);<br/>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(String)props.getProperty(refName);<br/>&nbsp;&nbsp;&nbsp;}catch(Exception&nbsp;e){<br/>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;<br/>&nbsp;&nbsp;&nbsp;　　}<br/>&nbsp;&nbsp;　　}<br/>&nbsp;　　}<br/>　　}　<br/><br/>　　DAO.connDB.conndb封装了对数据库的连接，通过DAO.connDB.readProperties类读取连接参数，其源代码如下：<br/>　　conndb.java<br/>　　package&nbsp;DAO.connDB;<br/>　　import&nbsp;java.sql.Connection;<br/>　　import&nbsp;java.sql.DriverManager;<br/>　　//生成数据库连接对象类<br/>　　public&nbsp;class&nbsp;connDB&nbsp;{<br/>&nbsp;String&nbsp;driverName=null;//数据库驱动名<br/>&nbsp;String&nbsp;connString=null;//连接字符串<br/>&nbsp;String&nbsp;userName=null;//用户名<br/>&nbsp;String&nbsp;password=null;//密码<br/>&nbsp;public&nbsp;connDB()&nbsp;{//在构造函数中初始化数据库连接参数<br/>&nbsp;&nbsp;readProperties&nbsp;readDBProperties=new&nbsp;readProperties();<br/>&nbsp;&nbsp;readDBProperties.setPropertyFileName(&#34;/dbconn.properties&#34;);<br/>&nbsp;&nbsp;　　driverName=readDBProperties.getPropertyFromFile(&#34;driverName&#34;);<br/>&nbsp;&nbsp;　　connString=readDBProperties.getPropertyFromFile(&#34;connString&#34;);<br/>&nbsp;&nbsp;userName=readDBProperties.getPropertyFromFile(&#34;userName&#34;);<br/>&nbsp;&nbsp;password=readDBProperties.getPropertyFromFile(&#34;password&#34;);<br/>&nbsp;}<br/>&nbsp;public&nbsp;Connection&nbsp;getDBConn()<br/>&nbsp;{//得到数据库连接对象<br/>&nbsp;&nbsp;if(driverName==null||connString==null||userName==null)&nbsp;return&nbsp;null;<br/>&nbsp;&nbsp;else{&nbsp;<br/>&nbsp;&nbsp;&nbsp;try{<br/>&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;connDBObject=null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Class.forName(driverName);<br/>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;　　DriverManager.getConnection(connString,&nbsp;userName,&nbsp;password);<br/>&nbsp;&nbsp;&nbsp;}catch(Exception&nbsp;e){<br/>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;<br/>&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;}<br/>&nbsp;}<br/>&nbsp;public&nbsp;String&nbsp;getConnString()&nbsp;{<br/>&nbsp;&nbsp;return&nbsp;connString;<br/>&nbsp;}<br/>&nbsp;public&nbsp;String&nbsp;getDriverName()&nbsp;{<br/>&nbsp;&nbsp;return&nbsp;driverName;<br/>&nbsp;}<br/>&nbsp;public&nbsp;String&nbsp;getPassword()&nbsp;{<br/>&nbsp;&nbsp;return&nbsp;password;<br/>&nbsp;}<br/>&nbsp;public&nbsp;String&nbsp;getUserName()&nbsp;{<br/>&nbsp;&nbsp;return&nbsp;userName;<br/>&nbsp;}<br/>　　}<br/>　　DAO.table.userRecord类封装了数据库中的userTable表记录，源代码如下：<br/>　　UserRecord.java<br/>　　package&nbsp;DAO.table;<br/>　　import&nbsp;java.sql.Date;<br/>　　//封闭数据库userTable表记录的类<br/>　　public&nbsp;class&nbsp;userRecord&nbsp;{<br/>&nbsp;long&nbsp;userId;//用户ID<br/>&nbsp;String&nbsp;userName;//用户名<br/>&nbsp;String&nbsp;userPassword;//用户密码<br/>&nbsp;String&nbsp;userTrueName;//用户真实姓名<br/>&nbsp;int&nbsp;userAge;//用户年龄<br/>&nbsp;String&nbsp;userSex;//用户性别<br/>&nbsp;String&nbsp;userAddress;//用户地址<br/>&nbsp;String&nbsp;userTelephone;//用户电话号码<br/>&nbsp;Date&nbsp;addTime;&nbsp;//增加用户的时间<br/>&nbsp;public&nbsp;long&nbsp;getUserId()&nbsp;{<br/>&nbsp;&nbsp;return&nbsp;userId;<br/>&nbsp;}<br/>&nbsp;public&nbsp;void&nbsp;setUserId(long&nbsp;userId)&nbsp;{<br/>&nbsp;&nbsp;this.userId&nbsp;=&nbsp;userId;<br/>&nbsp;}<br/>&nbsp;public&nbsp;String&nbsp;getUserName()&nbsp;{<br/>&nbsp;&nbsp;return&nbsp;userName;<br/>&nbsp;}<br/>&nbsp;public&nbsp;void&nbsp;setUserName(String&nbsp;userName)&nbsp;{<br/>&nbsp;&nbsp;this.userName&nbsp;=&nbsp;userName;<br/>&nbsp;}<br/>&nbsp;public&nbsp;String&nbsp;getUserPassword()&nbsp;{<br/>&nbsp;&nbsp;return&nbsp;userPassword;<br/>&nbsp;}<br/>&nbsp;public&nbsp;void&nbsp;setUserPassword(String&nbsp;userPassword)&nbsp;{<br/>&nbsp;&nbsp;this.userPassword&nbsp;=&nbsp;userPassword;<br/>&nbsp;}<br/>&nbsp;public&nbsp;String&nbsp;getUserSex()&nbsp;{<br/>&nbsp;&nbsp;return&nbsp;userSex;<br/>&nbsp;}<br/>&nbsp;public&nbsp;void&nbsp;setUserSex(String&nbsp;userSex)&nbsp;{<br/>&nbsp;&nbsp;this.userSex&nbsp;=&nbsp;userSex;<br/>&nbsp;}<br/>&nbsp;public&nbsp;String&nbsp;getUserTelephone()&nbsp;{<br/>&nbsp;&nbsp;return&nbsp;userTelephone;<br/>&nbsp;}<br/>&nbsp;public&nbsp;void&nbsp;setUserTelephone(String&nbsp;userTelephone)&nbsp;{<br/>&nbsp;&nbsp;this.userTelephone&nbsp;=&nbsp;userTelephone;<br/>&nbsp;}<br/>&nbsp;public&nbsp;String&nbsp;getUserTrueName()&nbsp;{<br/>&nbsp;&nbsp;return&nbsp;userTrueName;<br/>&nbsp;}<br/>&nbsp;public&nbsp;void&nbsp;setUserTrueName(String&nbsp;userTrueName)&nbsp;{<br/>&nbsp;&nbsp;this.userTrueName&nbsp;=&nbsp;userTrueName;<br/>&nbsp;}<br/>&nbsp;public&nbsp;Date&nbsp;getAddTime()&nbsp;{<br/>&nbsp;&nbsp;return&nbsp;addTime;<br/>&nbsp;}<br/>&nbsp;public&nbsp;void&nbsp;setAddTime(Date&nbsp;addTime)&nbsp;{<br/>&nbsp;&nbsp;this.addTime&nbsp;=&nbsp;addTime;<br/>&nbsp;}<br/>&nbsp;public&nbsp;String&nbsp;getUserAddress()&nbsp;{<br/>&nbsp;&nbsp;return&nbsp;userAddress;<br/>&nbsp;}<br/>&nbsp;public&nbsp;void&nbsp;setUserAddress(String&nbsp;userAddress)&nbsp;{<br/>&nbsp;&nbsp;this.userAddress&nbsp;=&nbsp;userAddress;<br/>&nbsp;}<br/>&nbsp;public&nbsp;int&nbsp;getUserAge()&nbsp;{<br/>&nbsp;&nbsp;return&nbsp;userAge;<br/>&nbsp;}<br/>&nbsp;public&nbsp;void&nbsp;setUserAge(int&nbsp;userAge)&nbsp;{<br/>&nbsp;&nbsp;this.userAge&nbsp;=&nbsp;userAge;<br/>&nbsp;}<br/>　　}<br/><br/>　　从上面的代码可以看出，针对数据库中的userTable表的字段都一个userRecord类的属性相对应，并有getXxxx()和setXxxx()方法，如果使用了Eclipse或JBuilder这样的可视化开发环境，书写了类的属性后，相应的&nbsp;getXxxx()和setXxxx()方法都可以用功能菜单快速自动生成。&nbsp;<br/><br/>DAO.tableOP.uerDAO类中编写对userTable表的操作，为简便起见，这里只编写了根据用户名查找用户的方法，实际应用中可以根据需要增加方法。其源代码如下：<br/>　　UserDAO.java<br/>　　package&nbsp;DAO.tableOP;<br/>　　import&nbsp;java.sql.Connection;<br/>　　import&nbsp;java.sql.ResultSet;<br/>　　import&nbsp;java.sql.Statement;<br/>　　import&nbsp;java.util.Hashtable;<br/>　　import&nbsp;DAO.table.userRecord;<br/>　　import&nbsp;DAO.connDB.connDB;<br/>　　//userTable表DAO操作类<br/>　　public&nbsp;class&nbsp;userDAO&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;　　Connection&nbsp;conn=null;<br/>&nbsp;　　public&nbsp;userDAO()&nbsp;{//在构造函数中初始化数据库连接<br/>&nbsp;　　&nbsp;&nbsp;&nbsp;&nbsp;conn=(new&nbsp;connDB()).getDBConn();<br/>&nbsp;　　}<br/>&nbsp;　　public&nbsp;Hashtable&nbsp;getUsersByUserName(String&nbsp;userName)<br/>&nbsp;　　{//根据用户名查找用户，支持模糊查询，输入参数为JSP页面输入的查询姓名，<br/>&nbsp;　　&nbsp;//返回用户记录对象集的Hashtable(哈希表)<br/>&nbsp;　&nbsp;　　Hashtable&nbsp;usersHashTable=new&nbsp;Hashtable();<br/>&nbsp;&nbsp;　　String&nbsp;sqlString=null;<br/>&nbsp;&nbsp;　　//构造SQL语句<br/>&nbsp;&nbsp;　　if(userName==null||userName.length()==0)<br/>&nbsp;&nbsp;　　&nbsp;　　sqlString=&#34;sel&#101;ct&nbsp;*&nbsp;from&nbsp;userTable&#34;;<br/>&nbsp;&nbsp;　　else<br/>　　　&nbsp;&nbsp;&nbsp;　　sqlString=&#34;sel&#101;ct&nbsp;*&nbsp;from&nbsp;userTable&nbsp;wh&#101;re&nbsp;user_true_name&nbsp;like&nbsp;&#39;%&#34;+userName+&#34;%&#39;&#34;;<br/>&nbsp;&nbsp;if(conn!=null){<br/>&nbsp;&nbsp;&nbsp;Statement&nbsp;SQLQueryObject=null;<br/>&nbsp;&nbsp;&nbsp;ResultSet&nbsp;RecordSet=null;<br/>&nbsp;&nbsp;&nbsp;try{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//查询出数据<br/>&nbsp;　　SQLQueryObject=conn.cr&#101;ateStatement(ResultSet.TYPE_SCROLL_SENSITIVE,&nbsp;ResultSet.CONCUR_READ_ONLY);<br/>&nbsp;&nbsp;&nbsp;&nbsp;　　RecordSet=SQLQueryObject.executeQuery(sqlString);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//循环地把数据放入Hashtable<br/>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i=0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;userRecord&nbsp;user=new&nbsp;userRecord();<br/>&nbsp;&nbsp;&nbsp;&nbsp;while(RecordSet.next()){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　user.setUserId(RecordSet.getLong(&#34;user_id&#34;));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　user.setUserName(RecordSet.getString(&#34;user_name&#34;));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setUserPassword(RecordSet.getString(&#34;user_password&#34;));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　user.setUserSex(RecordSet.getString(&#34;user_sex&#34;));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　user.setUserTelephone(RecordSet.getString(&#34;user_telephone&#34;));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　user.setUserTrueName(RecordSet.getString(&#34;user_true_name&#34;));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　user.setUserAge(RecordSet.getInt(&#34;user_age&#34;));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　user.setUserAddress(RecordSet.getString(&#34;user_address&#34;));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　user.setAddTime(RecordSet.getDate(&#34;add_time&#34;));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;usersHashTable.put(&#34;user&#34;+i,user);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user=new&nbsp;userRecord();<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;}catch(Exception&nbsp;e){<br/>&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br/>&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;return&nbsp;usersHashTable;<br/>&nbsp;　　}<br/>　　}<br/><br/>　　在该程序中，把查询出的用户信息放入userRecord类的对象user中，然后再放入hashTable。在user对象中需要用new关键字再新生成一个，这是因为hashTable在内存中作了映射，如果不新生成一个user对象，在while循环中，设置user属性等于是更改了原user对象的属性，放入hashTable中的对象仍然指向此对象，会使得hashTable中的对象内容相同，因此每在hashTable中放入一个user对象后，需要用user=new&nbsp;userRecord()语句来新生成一个user对象。&nbsp;<br/><br/>　应用层通过调用userDAO类完成所需的操作。这里的应用层是一个JSP页面，其源代码如下：<br/>　　userDAOExample.jsp<br/>　　&lt;%@&nbsp;page&nbsp;contentType=&#34;text/html;charset=GB2312&#34;&nbsp;%&gt;<br/>　　&lt;%@&nbsp;　　pageimport=&#34;java.sql.*,DAO.tableOP.*,DAO.table.*,java.util.Hashtable&#34;&nbsp;　　%&gt;<br/>　　&lt;%!<br/>　　public&nbsp;String&nbsp;codeToString(String&nbsp;str)<br/>　　{//处理中文字符串的函数<br/>&nbsp;&nbsp;　　String&nbsp;s=str;<br/>&nbsp;&nbsp;　　try{<br/>&nbsp;&nbsp;&nbsp;&nbsp;　　byte&nbsp;tempB[]=s.getBytes(&#34;ISO-8859-1&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;　　s=new&nbsp;String(tempB);<br/>&nbsp;&nbsp;&nbsp;　　&nbsp;return&nbsp;s;<br/>&nbsp;&nbsp;&nbsp;　　}catch(Exception&nbsp;e)<br/>&nbsp;&nbsp;　　&nbsp;{return&nbsp;s;<br/>&nbsp;　　&nbsp;&nbsp;}&nbsp;&nbsp;<br/>　　}<br/>　　%&gt;<br/>　　&lt;%//根据条件查询出数据,放入Hashtable对象中<br/>　　&nbsp;&nbsp;String&nbsp;username=&nbsp;codeToString(request.getParameter(&#34;username&#34;));<br/>　　&nbsp;&nbsp;userDAO&nbsp;userDAOObject=new&nbsp;userDAO();<br/>　　&nbsp;&nbsp;Hashtable&nbsp;users=userDAOObject.getUsersByUserName(username);<br/>　　%&gt;<br/>　　&lt;HTML&gt;<br/>　　&lt;BODY&gt;<br/>　　&lt;Table&nbsp;Border&gt;<br/>　　&lt;form&nbsp;action=userDAOExample.jsp&nbsp;method=post&gt;<br/>　　&lt;TR&gt;<br/>　　&nbsp;&lt;td&gt;查询姓名&lt;/td&gt;<br/>　　&nbsp;&nbsp;&lt;td&nbsp;colspan=7&gt;&lt;input&nbsp;type=text&nbsp;name=username&gt;&lt;input&nbsp;type=submit&nbsp;value=提交&gt;&lt;/td&gt;<br/>　　&lt;/tr&gt;<br/>　　&lt;/form&gt;<br/>　　&lt;TR&gt;<br/>　　&nbsp;&lt;td&nbsp;colspan=8&nbsp;align=center&gt;用户数据(共&lt;%%&gt;条记录)&lt;/td&gt;<br/>　　&lt;/tr&gt;<br/>　　&lt;TR&gt;<br/>&nbsp;&nbsp;　　&lt;Td&nbsp;width=100&nbsp;&gt;用户ID号&lt;/td&gt;<br/>&nbsp;&nbsp;　　&lt;Td&nbsp;width=50&nbsp;&gt;用户名&lt;/td&gt;<br/>&nbsp;&nbsp;　　&lt;Td&nbsp;width=100&gt;用户真实姓名&lt;/td&gt;<br/>&nbsp;&nbsp;　　&lt;Td&nbsp;width=50&gt;年龄&lt;/td&gt;<br/>&nbsp;&nbsp;　　&lt;Td&nbsp;width=50&gt;性别&lt;/td&gt;<br/>&nbsp;&nbsp;　　&lt;Td&nbsp;width=100&gt;联系地址&lt;/td&gt;<br/>&nbsp;　　&nbsp;&lt;Td&nbsp;width=100&gt;联系电话&lt;/td&gt;<br/>&nbsp;　　&nbsp;&lt;Td&nbsp;width=100&gt;添加时间&lt;/td&gt;<br/>　　&lt;/TR&gt;<br/>　　&lt;%//输出查询出的数据<br/>　　if(users!=null)<br/>&nbsp;　　{<br/>&nbsp;&nbsp;&nbsp;&nbsp;　　&nbsp;for(int&nbsp;i=0;i&lt;users.size();i++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;　　&nbsp;{<br/>　　%&gt;<br/>　　&lt;TR&gt;<br/>&nbsp;&nbsp;　　&nbsp;&nbsp;&lt;TD&gt;&lt;%=((userRecord)users.get(&#34;user&#34;+i)).getUserId()%&gt;&lt;/TD&gt;<br/>&nbsp;　　&nbsp;&nbsp;&nbsp;&lt;TD&gt;&lt;%=((userRecord)users.get(&#34;user&#34;+i)).getUserName()%&gt;&lt;/TD&gt;<br/>　　&nbsp;&nbsp;&nbsp;&nbsp;&lt;TD&gt;&lt;%=((userRecord)users.get(&#34;user&#34;+i)).getUserTrueName()%&gt;&lt;/TD&gt;<br/>　　&nbsp;&nbsp;&nbsp;&nbsp;&lt;TD&gt;&lt;%=((userRecord)users.get(&#34;user&#34;+i)).getUserAge()%&gt;&lt;/TD&gt;<br/>　　&nbsp;&nbsp;&nbsp;&nbsp;&lt;TD&gt;&lt;%=((userRecord)users.get(&#34;user&#34;+i)).getUserSex()%&gt;&lt;/TD&gt;<br/>　　&nbsp;&nbsp;&nbsp;&nbsp;&lt;TD&gt;&lt;%=((userRecord)users.get(&#34;user&#34;+i)).getUserAddress()%&gt;&lt;/TD&gt;<br/>　　&nbsp;&nbsp;&nbsp;&nbsp;&lt;TD&gt;&lt;%=((userRecord)users.get(&#34;user&#34;+i)).getUserTelephone()%&gt;&lt;/TD&gt;<br/>　&nbsp;&nbsp;&nbsp;&nbsp;&lt;TD&gt;&lt;%=((userRecord)users.get(&#34;user&#34;+i)).getAddTime()%&gt;&lt;/TD&gt;<br/>　　&lt;/TR&gt;<br/>　　&lt;%<br/>　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>　　&nbsp;}<br/>　　%&gt;<br/>　　&lt;/Table&gt;<br/>　　&lt;/BODY&gt;<br/>　　&lt;/HTML&gt;<br/><br/>　　从上述代码中可以发现，在JSP页同中的Java代码已经很少，只是接收提交要查找的用户名后，用userDAO类的方法来得到查询结果hashTable，再用for循环来输出此hashTable中的内容。该程序的运行结果（第一次打开页面查询出所有的用户的用户信息）如图8-14所示：<br/><br/><br/><br/><img src="http://www.is21.cn/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.is21.cn/attachments/month_0708/y2007812234318.rar" target="_blank">点击下载此文件</a><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.is21.cn/default.asp?id=14</link>
			<title><![CDATA[DAO模型(未能运行)]]></title>
			<author>lianxiangpanjin@163.com(admin)</author>
			<category><![CDATA[hiberate]]></category>
			<pubDate>Sun,12 Aug 2007 10:58:44 +0800</pubDate>
			<guid>http://www.is21.cn/default.asp?id=14</guid>	
		<description><![CDATA[DAO设计模式<br/>1:&nbsp;为什么使用DAO?<br/>&nbsp;&nbsp;&nbsp;&nbsp;a:&nbsp;在涉及数据库操作，以前一般使用jdbc，使用这种方法我们会发现代码和html标签同时使用，维护很困难。<br/>&nbsp;&nbsp;&nbsp;&nbsp;b：jsp文件中不应该出现任何sql包，jsp文件侧重于显示界面的。<br/>&nbsp;&nbsp;&nbsp;&nbsp;c：所有的数据库操作建议使用prepareStatement。好处重在避免sql注入漏洞。<br/><br/>2：DAO是J2EE中的数据层操作。<br/><br/>3：数据库创建脚本<br/>--删除表<br/>Dro&#112;&nbsp;TABLE&nbsp;person;<br/><br/>--创建表<br/>Cr&#101;ate&nbsp;TABLE&nbsp;person<br/>(<br/>&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;varchar(20)&nbsp;not&nbsp;null&nbsp;primary&nbsp;key,<br/>&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;varchar(20)&nbsp;not&nbsp;null,<br/>&nbsp;&nbsp;&nbsp;&nbsp;password&nbsp;varchar(20)&nbsp;not&nbsp;null,<br/>&nbsp;&nbsp;&nbsp;&nbsp;age&nbsp;varchar(20)&nbsp;not&nbsp;null,<br/>&nbsp;&nbsp;&nbsp;&nbsp;email&nbsp;varchar(30)&nbsp;not&nbsp;null<br/>);<br/>--事务提交<br/>commit;<br/><br/><br/>4：如果在数据库修改后，我们怎么样才能做到前台页面不需要太多的改变？<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们必须规定出对PERSON中的全部操作。比如增删查改。<br/>按照以上要求，制定出操作那张表的标准，之后只要针对不同的数据库实现这些标准就可以了。&nbsp;在java中我们可以通过接口来实现----》DAO规定的就是这些接口。<br/><br/>package&nbsp;com.nnu.djx.dao;<br/>import&nbsp;com.nnu.djx.vo.*;<br/>import&nbsp;java.util.*;<br/><br/>//规定了在此项目中操作person表的全部方法<br/>public&nbsp;interface&nbsp;PersonDao&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;*//**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;插入对象<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;ins&#101;rt(Person&nbsp;person)throws&nbsp;Exception;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;*//**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;更新对象<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;up&#100;ate(Person&nbsp;person)throws&nbsp;Exception;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;*//**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;删除某一对象<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;id<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;del&#101;te(String&nbsp;id)throws&nbsp;Exception;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;*//**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;按照ID查询<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;id<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Person&nbsp;queryById(String&nbsp;id)throws&nbsp;Exception;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;*//**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;查询全部结果<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;List&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;queryAll()throws&nbsp;Exception;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;*//**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;模糊查询<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;code<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;List&nbsp;queryByLike(String&nbsp;code)throws&nbsp;Exception;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>}<br/><br/>5：在DAO中操作的是对象和数据库之间的关系。<br/>&nbsp;&nbsp;&nbsp;&nbsp;不过此时的对象是（VO,POLO,TO）(值对象，最简单对象，传输对象)<br/>&nbsp;&nbsp;&nbsp;&nbsp;即是只包括getter，setter方法的类。<br/>通过VO操作DAO<br/>Vo中的字段和表中一一对应。<br/>package&nbsp;com.nnu.djx.vo;<br/><br/>public&nbsp;class&nbsp;Person&nbsp;...{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;id;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;name;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;password;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;int&nbsp;age;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;email;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//生成getter，setter方法。<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;getAge()&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;age;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setAge(int&nbsp;age)&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.age&nbsp;=&nbsp;age;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getEmail()&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;email;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setEmail(String&nbsp;email)&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.email&nbsp;=&nbsp;email;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getId()&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;id;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setId(String&nbsp;id)&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.id&nbsp;=&nbsp;id;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getName()&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;name;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setName(String&nbsp;name)&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.name&nbsp;=&nbsp;name;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getPassword()&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;password;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setPassword(String&nbsp;password)&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.password&nbsp;=&nbsp;password;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/><br/><br/>6：&nbsp;对于定义好的接口，需要给出具体实现。对数据库表的一切具体操作。<br/>可以定义一个数据库链接类，只负责连接。<br/><br/>package&nbsp;com.nnu.djx.dao.impl;<br/><br/>import&nbsp;java.util.List;<br/>import&nbsp;com.nnu.djx.dao.*;<br/>import&nbsp;com.nnu.djx.vo.Person;<br/><br/>public&nbsp;class&nbsp;PersonDaoImpl&nbsp;implements&nbsp;PersonDao&nbsp;&nbsp;...{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;del&#101;te(String&nbsp;id)&nbsp;throws&nbsp;Exception&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;TODO&nbsp;自动生成方法存根<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;ins&#101;rt(Person&nbsp;person)&nbsp;throws&nbsp;Exception&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;TODO&nbsp;自动生成方法存根<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;List&nbsp;queryAll()&nbsp;throws&nbsp;Exception&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;TODO&nbsp;自动生成方法存根<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Person&nbsp;queryById(String&nbsp;id)&nbsp;throws&nbsp;Exception&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;TODO&nbsp;自动生成方法存根<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;List&nbsp;queryByLike(String&nbsp;code)&nbsp;throws&nbsp;Exception&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;TODO&nbsp;自动生成方法存根<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;up&#100;ate(Person&nbsp;person)&nbsp;throws&nbsp;Exception&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;TODO&nbsp;自动生成方法存根<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;PersonDaoImpl()&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;TODO&nbsp;自动生成构造函数存根<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/><br/><br/><br/><br/><br/><br/>具体的数据库连接类如下：<br/>package&nbsp;com.nnu.djx.dbc;<br/>import&nbsp;java.sql.*;<br/>public&nbsp;class&nbsp;DataBaseConnection&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;final&nbsp;String&nbsp;DBDRIVER&nbsp;=&#34;oracle.jdbc.driver.OracleDriver&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;final&nbsp;String&nbsp;DBURL&nbsp;=&#34;jdbc:oracle:thin:@localhost:1521:ora9djx&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;final&nbsp;String&nbsp;DBUSER&nbsp;=&#34;system&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;final&nbsp;String&nbsp;DBPWD&nbsp;=&#34;system&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;conn&nbsp;=&nbsp;null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;pstmt&nbsp;=&nbsp;null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;rst&nbsp;=&nbsp;null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;DataBaseConnection()...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class.forName(DBDRIVER);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.conn&nbsp;=&nbsp;DriverManager.getConnection(DBURL,DBUSER,DBPWD);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch(Exception&nbsp;e)...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;//取得数据库链接<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Connection&nbsp;getConnection()...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.conn;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;closeConnection()...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.conn.close();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(SQLException&nbsp;e)&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;TODO&nbsp;自动生成&nbsp;catch&nbsp;块<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>}<br/>然后对于上面的具体实现。用prepareStatement实现。。<br/><br/><br/>5：再设计一个jsp页面用来操作数据库，检验前面的代码是否正确。<br/>&lt;%@page&nbsp;contentType=&#34;text/html;charset=GB2312&#34;%&gt;<br/>&lt;%@page&nbsp;import=&#34;com.nnu.djx.dao.*,com.nnu.djx.vo.*,com.nnu.djx.dao.impl.*,java.util.*,com.nnu.djx.factory.*&#34;%&gt;<br/><br/>&lt;%<br/>&nbsp;&nbsp;&nbsp;&nbsp;//进行插入操作<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**//*<br/>&nbsp;&nbsp;&nbsp;&nbsp;Person&nbsp;person&nbsp;=&nbsp;new&nbsp;Person();<br/>&nbsp;&nbsp;&nbsp;&nbsp;person.setId(&#34;001&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;person.setName(&#34;why&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;person.setPassword(&#34;123&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;person.setAge(12);<br/>&nbsp;&nbsp;&nbsp;&nbsp;person.setEmail(&#34;123j@163.com&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PersonDao&nbsp;persondao&nbsp;=&nbsp;new&nbsp;PersonDaoImpl();<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//PersonDaoFactory.getPersonDaoInstance().queryAll();<br/>&nbsp;&nbsp;&nbsp;&nbsp;//删除一个用户<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;try...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//persondao.ins&#101;rt(person);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//persondao.del&#101;te(&#34;001&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//persondao.up&#100;ate(person);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//全部查询<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**//*<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list&nbsp;=&nbsp;persondao.queryAll();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&nbsp;iterator&nbsp;=&nbsp;list.iterator();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(iterator.hasNext())<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Person&nbsp;person&nbsp;=&nbsp;(Person)iterator.next();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print(person.getName());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//模糊查询<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list&nbsp;=&nbsp;persondao.queryByLike(&#34;hy&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&nbsp;iterator&nbsp;=&nbsp;list.iterator();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(iterator.hasNext())<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Person&nbsp;person&nbsp;=&nbsp;(Person)iterator.next();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print(person.getName());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}catch(Exception&nbsp;e)...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>%&gt;<br/><br/>DAO使用后，我们发现前天的代码明显减少，而后台比如类都增多了。<br/>同时可以发现这样的一个问题<br/>PersonDao&nbsp;persondao&nbsp;=&nbsp;new&nbsp;PersonDaoImpl();<br/>操作时必须知道子类。<br/>如果有一天我们改变了数据库（DB2）修改就不方便了。<br/>应该考虑如何是前台代码不关后台的变化。。<br/>此时可以考虑工厂模式:<br/>&nbsp;&nbsp;&nbsp;&nbsp;新建一个类工厂类PersonDaoFactory<br/>package&nbsp;com.nnu.djx.factory;<br/><br/>import&nbsp;com.nnu.djx.dao.PersonDao;<br/>import&nbsp;com.nnu.djx.dao.impl.PersonDaoImpl;<br/><br/>public&nbsp;class&nbsp;PersonDaoFactory&nbsp;...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;PersonDao&nbsp;getPersonDaoInstance()...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;PersonDaoImpl();<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/><br/>以后调用的时候就可以用<br/>PersonDaoFactory.getPersonDaoInstance().queryAll();<br/>而不具体涉及到类。。。<br/>后序：<br/>程序经过验证完全正确，可以作为以后数据库学习的模板。。<br/><br/><br/><img src="http://www.is21.cn/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.is21.cn/attachments/month_0708/i2007812112323.rar" target="_blank">点击下载此文件</a><br/>]]></description>
		</item>
		
</channel>
</rss>