??xml version="1.0" encoding="utf-8" standalone="yes"?>免费网站免费进入在线,福利视频在线播放,美女精品自拍一二三四http://www.aygfsteel.com/supersalor/category/40956.htmljava struts1、struts2 spring hibernate freemarker ajax fckeditor Mysql MSSQL ORACLE DB2 Websphere jboss zh-cnFri, 25 Jan 2013 02:33:13 GMTFri, 25 Jan 2013 02:33:13 GMT60memcached and Redishttp://www.aygfsteel.com/supersalor/articles/394702.html李峰李峰Thu, 24 Jan 2013 06:44:00 GMThttp://www.aygfsteel.com/supersalor/articles/394702.htmlhttp://www.aygfsteel.com/supersalor/comments/394702.htmlhttp://www.aygfsteel.com/supersalor/articles/394702.html#Feedback0http://www.aygfsteel.com/supersalor/comments/commentRss/394702.htmlhttp://www.aygfsteel.com/supersalor/services/trackbacks/394702.html
memcached好的博文Q?/span>

http://www.cnblogs.com/luluping/archive/2009/01/14/1375456.html memcached深度分析

 Redis使用场景Q?/p>

1. Redis使用最x(chng)式是全部数据in-memory?/p>

2. Redis更多场景是作为Memcached的替代者来使用?/p>

3. 当需要除key/value之外的更多数据类型支持时Q用Redis更合适?/p>

4. 当存储的数据不能被剔除时Q用Redis更合适?/p>

 

Redis好的博文Q?/p>

1.http://www.searchtb.com/2011/05/redis-storage.htmlQ来自淘宝搜索技术博?/p>

2. 来自InfoQ    

http://www.infoq.com/cn/articles/tq-why-choose-redis  Z么用redis

 http://www.infoq.com/cn/articles/tq-redis-memory-usage-optimization-storage redis内存?sh)用优化和存?/p>

http://www.infoq.com/cn/articles/tq-redis-copy-build-scalable-cluster redis复制与可扩展集群搭徏



李峰 2013-01-24 14:44 发表评论
]]>
Debug 提示【Tomcat??http://www.aygfsteel.com/supersalor/articles/300272.html李峰李峰Thu, 29 Oct 2009 14:15:00 GMThttp://www.aygfsteel.com/supersalor/articles/300272.htmlhttp://www.aygfsteel.com/supersalor/comments/300272.htmlhttp://www.aygfsteel.com/supersalor/articles/300272.html#Feedback0http://www.aygfsteel.com/supersalor/comments/commentRss/300272.htmlhttp://www.aygfsteel.com/supersalor/services/trackbacks/300272.htmljava.lang.NoClassDefFoundError:net/sf/cglib/proxy/CallbackFilter (tng) ?~少cglib-2.1_3.jar

java.lang.NoClassDefFoundError:javax/transaction/TransactionManager (tng) ?~少jta.jar

java.lang.NoClassDefFoundError: freemarker/template/Configuration (tng) ?~少freemarker.jar

java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException (tng) ?~少aspectjrt.jar;aspectjweaver.jar

java.lang.NoClassDefFoundError: org/dom4j/DocumentException (tng) ?~少dom4j-1.6.1.jar

java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUploadException (tng) ?~少commons-fileupload-1.2.jar

java.lang.NoClassDefFoundError: org/apache/velocity/context/Context (tng) ?~少velocity-1.4.jar;velocity-dep-1.4.jar;velocity-tools-1.1.jar

l箋(hu)整理…?/font>



李峰 2009-10-29 22:15 发表评论
]]>
freemarker中空值的多种处理Ҏ(gu)http://www.aygfsteel.com/supersalor/articles/290715.html李峰李峰Tue, 11 Aug 2009 12:59:00 GMThttp://www.aygfsteel.com/supersalor/articles/290715.htmlhttp://www.aygfsteel.com/supersalor/comments/290715.htmlhttp://www.aygfsteel.com/supersalor/articles/290715.html#Feedback0http://www.aygfsteel.com/supersalor/comments/commentRss/290715.htmlhttp://www.aygfsteel.com/supersalor/services/trackbacks/290715.html1.按照freemarker的规范,老老实实的判断是否有空|有空值怎么处理。这在某U时候是有用的?br />格式Q?{empty!"EmptyValue of fbysss"}
比如gؓ(f)I时Q你可以l出一个友好的说明Q但是很多的变量都要q么说明Q未免太ȝ(ch)?jin)?

2.<#escape x as x!""></#escape>可以Ҏ(gu)有的变量q行I值处理,q里是全部替换ؓ(f)I字W串。当然也可以替换为其它字W串?
如果其中某些变量不需要这U替换,可以加入<#noescape></#noescape>标签?

3.属性配|方法:(x)
配置classic_compatible=true可以满一般需要。默认情况变量ؓ(f)null则替换ؓ(f)I字W串Q如果需要自定义Q写?{empty!"EmptyValue of fbysss"}的Ş式即?

a.通过Configuration讄。Configuration cfg = new Configuration(); cfg.setClassicCompatible(true);//讄属?

b.通过Eviroment讄?
 (tng) (tng) Environment env = template.createProcessingEnvironment(root, out);
 (tng) (tng) env.setClassicCompatible(true);

c.通过ftl讄Q在ftl前加?lt;!--#setting classic_compatible=true-->;

d.通过Spring配置文g讄
<bean id="freemarkerConfig"
 (tng) (tng) (tng) class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
 (tng) <property name="freemarkerSettings">
 (tng) (tng) (tng) <props>
 (tng) (tng) (tng) (tng) (tng) <prop key="classic_compatible">true</prop>
 (tng) (tng) (tng) </props>
 (tng) </property>
</bean>

e.class目录下添加freemarker.properties文gQ加入classic_compatible=true
(需要struts2或spring)



李峰 2009-08-11 20:59 发表评论
]]>
各种数据库驱?/title><link>http://www.aygfsteel.com/supersalor/articles/290711.html</link><dc:creator>李峰</dc:creator><author>李峰</author><pubDate>Tue, 11 Aug 2009 12:50:00 GMT</pubDate><guid>http://www.aygfsteel.com/supersalor/articles/290711.html</guid><wfw:comment>http://www.aygfsteel.com/supersalor/comments/290711.html</wfw:comment><comments>http://www.aygfsteel.com/supersalor/articles/290711.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/supersalor/comments/commentRss/290711.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/supersalor/services/trackbacks/290711.html</trackback:ping><description><![CDATA[各种数据库驱?br /> (tng) <br />-------------------------------oracle--------------------------------<br />  驱动Qoracle.jdbc.driver.OracleDriver<br />  URLQjdbc:oracle:thin:@<machine_name><:port>:dbname<br />  注:(x)machine_nameQ数据库所在的机器的名Uͼ<br />   portQ端口号Q默认是1521<br />   <br />  -------------------------------mysql--------------------------------<br />  驱动Qorg.gjt.mm.mysql.Driver<br />  URLQjdbc:mysql://<machine_name><:port>/dbname<br />  注:(x)machine_nameQ数据库所在的机器的名Uͼ<br />   portQ端口号Q默?306<br />   <br />  ----------------------------pointbase---------------------------------<br />  驱动Qcom.pointbase.jdbc.jdbcUniversalDriver<br />  URLQjdbc:pointbase:server://<machine_name><:port>/dbname<br />  注:(x)machine_nameQ数据库所在的机器的名Uͼ<br />   portQ端口号Q默认是9092<br />   <br />  ---------------------------SQL Server---------------------------------<br />  驱动Qcom.microsoft.jdbc.sqlserver.SQLServerDriver<br />  URLQjdbc:microsoft:sqlserver://<machine_name><:port>;DatabaseName=<dbname><br />  注:(x)machine_nameQ数据库所在的机器的名Uͼ<br />   portQ端口号Q默认是1433<br />  --------------------------DB2---------------------------------------------<br />  驱动Qcom.ibm.db2.jdbc.app.DB2Driver<br />  URLQjdbc:db2://<machine_name><:port>/d driver="COM.ibm.db2.jdbc.app.DB2Driver"bname<br />  注:(x)machine_nameQ数据库所在的机器的名Uͼ<br />   portQ端口号Q默认是5000<img src ="http://www.aygfsteel.com/supersalor/aggbug/290711.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/supersalor/" target="_blank">李峰</a> 2009-08-11 20:50 <a href="http://www.aygfsteel.com/supersalor/articles/290711.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>选择ibatis和hibernate的区?/title><link>http://www.aygfsteel.com/supersalor/articles/288807.html</link><dc:creator>李峰</dc:creator><author>李峰</author><pubDate>Tue, 28 Jul 2009 13:35:00 GMT</pubDate><guid>http://www.aygfsteel.com/supersalor/articles/288807.html</guid><wfw:comment>http://www.aygfsteel.com/supersalor/comments/288807.html</wfw:comment><comments>http://www.aygfsteel.com/supersalor/articles/288807.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/supersalor/comments/commentRss/288807.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/supersalor/services/trackbacks/288807.html</trackback:ping><description><![CDATA[ <div style="LAYOUT-GRID: 15.6pt none" class="Section0"> <p style="TEXT-ALIGN: left; LINE-HEIGHT: 18pt; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 3.75pt" class="p0"> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">目中关于持久层的选择Q我主要有两U选择Qhibernate与ibatisQ各有个的好Q现在ȝ如下Q?br /><font color="#ff1493">Hibernate?/font></span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">Hibernate是一个开放源代码的对象关pL框Ӟ它对JDBCq行?jin)非常轻量的对象封装,使得JavaE序员可以随?j)所Ʋ的使用对象~程思维来操U|据库。Hibernate可以应用在Q何用JDBC的场合,既可以在Java的客L(fng)E序使用Q也可以在Servlet/JSP的Web应用中用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMPQ完成数据持久化的重仅R?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">一、基本功?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">Hibernate作ؓ(f)数据持久化的中间Ӟ以让数据库在业务逻辑层开发中d眠。它通过可扩展标记语aQXMLQ实C(jin)cd数据表之间的映射QɽE序员在业务逻辑的开发中面向数据库而改为面向对象开发。整个目开发分工更加明,提高?sh)(jin)程序开发的效率?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">configuration对象Q?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">Configuration (tng)c负责管理Hibernate (tng)的配|信息。Hibernate (tng)q行旉?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">获取一些底层实现的基本信息Q其中几个关键属性包括:(x)</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">1Q?tng)数据库URL</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">2Q?tng)数据库用?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">3Q?tng)数据库用户密?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">4Q?tng)数据库JDBC驱动c?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">5Q数据库dialectQ用于对特定数据库提供支持,其中包含?jin)针对特定数据库?gu)的实现Q如Hibernate数据cd到特定数据库数据cd的映等?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">以上信息一般情况下由hibernate.cfg.xml或者hibernate.properties文g来配|,实现与不同数据库的连接?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">Session对象Q?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">Session是持久层操作的基Q相当于JDBC中的Connection:</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">实例通过SessionFactory实例构徏:</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">Configuration (tng)config (tng)= (tng)new (tng)Configuration().configure();</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">SessionFactory (tng)sessionFactory (tng)= (tng)config.buildSessionFactory();</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">Session (tng)session (tng)= (tng)sessionFactory.openSession();</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">之后我们可以调用Session所提供的save、find、flush{方法完成持久层操作。因此Session对象也封装了(jin)所有对数据库的操作来实现HibernateҎ(gu)据库的操U功能,如:(x)</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">Save()Ҏ(gu)实现增加和保存;</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">Delete()Ҏ(gu)实现数据的删除;</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">Update()Ҏ(gu)实现数据更新和修改;</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">Find()Ҏ(gu)实现数据的检索;</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">Hibernate?x)根据不同的操作自动生成相应的SQL语句Q从而实C(jin)E序员对PO对象的操作{化ؓ(f)Ҏ(gu)据库关系表的操作?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">二、用步?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">1Q编写Hibernate配置文g</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng)Hibernate配置文g有两U,分别是hibernate.cfg.xml文g和hibernate.properties,推荐使用hibernate.cfg.xml?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">2QPO和映文?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">使用middlegen和hibernate-extensions从数据库导出PO的映文Ӟq在hibernate.cfg.xml当中声明?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">3Q编写DAO</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng)Ҏ(gu)一张关p表~写一个DAOQ提供一l增、删、改、查Ҏ(gu)供业务逻辑Ҏ(gu)据库操作使用?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?> <o:p> </o:p> </span> </p> <p style="TEXT-ALIGN: left; LINE-HEIGHT: 18pt; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 3.75pt" class="p0"> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <o:p> </o:p> </span> </p> <p style="TEXT-ALIGN: left; LINE-HEIGHT: 18pt; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 3.75pt" class="p0"> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <font color="#ff1493">Ibatis?/font> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">相对Hibernate和Apache (tng)OJB (tng){?一站式"ORM解决Ҏ(gu)而言Qibatis (tng)是一U?半自动化"的ORM实现。所?半自?Q可能理解上有点生ӆ。纵观目前主的ORMQ无论Hibernate (tng)q是Apache (tng)OJBQ都Ҏ(gu)据库l构提供?jin)较为完整的装Q提供了(jin)从POJO (tng)到数据库表的全套映射机制。程序员往往只需定义好了(jin)POJO (tng)到数据库表的映射关系Q即可通过Hibernate或者OJB (tng)提供的方法完成持久层操作。程序员甚至不需要对SQL (tng)的熟l掌握,Hibernate/OJB (tng)?x)根据制定的存储逻辑Q自动生成对应的SQL (tng)q调用JDBC (tng)接口加以执行?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">Ibatis最直接的好处就是不但ؓ(f)E序员提供了(jin)对象与关pL据库之间的映,同时提供操作Ҏ(gu)与SQL间的直接影射Q设计者可以直接ؓ(f)一个方法指定一条SQL语句Q从而取得更加准的数据Q同时ؓ(f)优化查询、连接查询提供了(jin)方便?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">一、基本功?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">作ؓ(f)又一个轻量的ORM中间Ӟibatis除了(jin)提供?jin)对数据库基本的增、删、改、查外还提供?jin)连接管理,~存支持Q线E支持,Q分布式Q事物管理等一套教为完整的数据库管理功能?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">SqlMapClient对象是ibatis持久层操作的基础Q相当于hibernate中的sessionQ提供对SQL映射的方法?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">insert()Ҏ(gu)实现Ҏ(gu)入SQL语句的映;</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">delete()Ҏ(gu)实现对删除SQL语句的映;</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">update()Ҏ(gu)实现Ҏ(gu)新SQL语句的媄(jing);</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">queryForList()、queryForMap()、queryForObject()、queryForPaginatedList(){方法提供了(jin)一l查询SQL语句的媄(jing);</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">二、用步?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">1Qibatis (tng)SQL (tng)Map (tng)配置文g</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng)文g中对所用数据库的连接做?jin)基本配|,包括数据库驱动类型、用户名、密码,以及(qing)q接池的相关理数据?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">2QPO和映文?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng)和hibernate一PPO作ؓ(f)数据库关p表的媄(jing),也需要响应的映射配置文gQ可以手写,也可以借助hibernate的相兛_L(fng)成POQ不?x)?jing)响PO在ibatis中的使用。与hibernate不同的是Qibatis的映文件中没有对PO中每个属性做响应的描qͼ而是指定?jin)一pd与PO有关的SQL相关操作Q也体现?jin)ibatis良好的灵zL与可扩展性?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">3Q编写DAO</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng)在DAO中,可以使用SqlMapClient提供的方法来对应的指定对PO操作的SQL语句Q从而业务逻辑层的开发仍然是面向对象的操作?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <o:p> </o:p> </span> </p> <p style="TEXT-ALIGN: left; LINE-HEIGHT: 18pt; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 3.75pt" class="p0"> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <o:p> </o:p> </span> </p> <p style="TEXT-ALIGN: left; LINE-HEIGHT: 18pt; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 3.75pt" class="p0"> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">选择Hibernateq是iBATIS都有它的道理Q?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">Hibernate的特点:(x)</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">Hibernate功能强大Q数据库无关性好QO/R映射能力强,如果你对Hibernate相当_N,而且对Hibernateq行?jin)适当的封装,那么你的目整个持久层代码会(x)相当单,需要写的代码很,开发速度很快Q非常爽。以数据库字D一一对应映射得到的PO和Hibernteq种对象化映得到的PO是截然不同的Q本质区别在于这UPO是扁q_的,不像Hibernate映射的PO是可以表辄体的对象l承Q聚合等{关pȝQ这会(x)直接影响C的整个Y件系l的设计思\。HibernateҎ(gu)据库l构提供?jin)较为完整的装QHibernate的O/R (tng)Mapping实现?jin)POJO (tng)和数据库表之间的映射Q以?qing)SQL (tng)的自动生成和执行。程序员往往只需定义好了(jin)POJO (tng)到数据库表的映射关系Q即可通过Hibernate (tng)提供的方法完成持久层操作。程序员甚至不需要对SQL (tng)的熟l掌握, (tng)Hibernate/OJB (tng)?x)根据制定的存储逻辑Q自动生成对应的SQL (tng)q调用JDBC (tng)接口加以执行。Hibernate的缺点就是学?fn)门槛不低,要精通门槛更高,而且怎么设计O/R映射Q在性能和对象模型之间如何权衡取得^衡,以及(qing)怎样用好Hibernate斚w需要你的经验和能力都很强才行,但是Hibernate现在已经是主O/R (tng)Mapping框架Q从文档的丰富性,产品的完善性,版本的开发速度都要ZiBATIS?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">iBATIS的特点:(x)</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">iBATIS入门单,卛_即用Q提供了(jin)数据库查询的自动对象l定功能Q而且延箋(hu)?jin)很好的SQL使用l验Q对于没有那么高的对象模型要求的目来说Q相当完。iBATIS的缺点就是框架还是比较简陋,功能有~失Q虽然简化了(jin)数据l定代码Q但是整个底层数据库查询实际q是要自己写的,工作量也比较大,而且不太Ҏ(gu)适应快速数据库修改。当pȝ属于二次开?无法Ҏ(gu)据库l构做到控制和修?那iBATIS的灵zL将比Hibernate更适合。系l数据处理量巨大Q性能要求极ؓ(f)苛刻Q这往往意味着我们必须通过l过高度优化的SQL语句Q或存储q程Q才能达到系l性能设计指标。在q种情况下iBATIS?x)有更好的可控性和表现?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">对于实际的开发进行的比较Q?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">1Q?tng)iBATIS需要手写sql语句Q也可以生成一部分QHibernate则基本上可以自动生成Q偶?dng)?x)写一些Hql。同L(fng)需?iBATIS的工作量比?tng)Hibernate要大很多。类似的Q如果涉?qing)到数据库字D늚修改QHibernate修改的地方很,而iBATIS要把那些sql (tng)mapping的地方一一修改?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">2. (tng)iBatis (tng)可以q行l粒度的优化</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">比如说我有一个表Q这个表有几个或者几十个字段Q我需要更新其中的一个字D,iBatis (tng)很简单,执行一个sql (tng)UPDATE (tng)TABLE_A (tng)SET (tng)column_1=#column_1# (tng)WHERE (tng)id=#id# (tng)但是用?tng)Hibernate (tng)的话比较麻?ch)?jin),~省的情况下 (tng)hibernate (tng)?x)更新所有字Dc(din)?tng)当然我记得?tng)hibernate (tng)有一个选项可以控制只保存(sh)改过的字D,但是我不太确定这个功能的负面效果?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">例如Q我需要列Z个表的部分内容,用?tng)iBatis (tng)的时候,q里面的好处是可以少从数据库d多数据,节省量SELECT (tng)I(yng)D, (tng)NAME (tng)FROM (tng)TABLE_WITH_A_LOT_OF_COLUMN (tng)WHERE (tng)...一般情况下Hibernate (tng)?x)把所有的字段都选出来。比如说有一个上面表?个字D,其中有一两个比较大的字段Qvarchar(255)/text。上面的场景中我Z么要把他们也选出来呢Q用hibernate (tng)的话Q你又不能把q两个不需要的字段讄为lazy (tng)loadQ因有很多地斚w要一ơ把整个 (tng)domain (tng)object (tng)加蝲出来。这个时候就能显现出ibatis (tng)的好处了(jin)。如果我需要更C条记录(一个对象)(j)Q如果用?tng)hibernateQ需要现把对象?tng)select (tng)出来Q然后再做?tng)update。这Ҏ(gu)据库来说是两条sql。而iBatis只需要一条update的sql可以了(jin)。减一ơ与数据库的交互Q对于性能的提升是非常重要?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">3. (tng)开发方面:(x)</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">开发效率上Q我觉得两者应该差不多。可l护性方面,我觉得?tng)iBatis (tng)更好一些。因为?tng)iBatis (tng)的?tng)sql (tng)都保存到单独的文件中。而?tng)Hibernate (tng)在有些情况下可能?x)在?tng)java (tng)代码中保sql/hql。相对Hibernate“O/R”而言QiBATIS (tng)是一U“Sql (tng)Mapping”的ORM实现。而iBATIS (tng)的着力点Q则在于POJO (tng)与SQL之间的映关pR也是_(d)iBATISq不?x)?f)E序员在q行期自动生成SQL (tng)执行。具体的SQL (tng)需要程序员~写Q然后通过映射配置文gQ将SQL所需的参敎ͼ以及(qing)q回的结果字D|到指定POJO。用iBATIS (tng)提供的ORM机制Q对业务逻辑实现人员而言Q面对的是纯_的Java对象Q这一层与通过Hibernate (tng)实现ORM (tng)而言基本一_(d)而对于具体的数据操作QHibernate?x)自动生成SQL (tng)语句Q而iBATIS (tng)则要求开发者编写具体的SQL (tng)语句。相对Hibernate而言QiBATIS (tng)以SQL开发的工作量和数据库移植性上的让步,为系l设计提供了(jin)更大的自q间?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">4. (tng)q行效率</span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <br /> </span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">在不考虑 (tng)cache (tng)的情况下QiBatis (tng)应该?x)比hibernate (tng)快一些或者很多?/span> <span style="FONT-FAMILY: '?hu)?; COLOR: rgb(42,42,42); FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <o:p> </o:p> </span> </p> <p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class="p0"> <span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'"> <o:p> </o:p> </span> </p> </div> <!--EndFragment--> <img src ="http://www.aygfsteel.com/supersalor/aggbug/288807.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/supersalor/" target="_blank">李峰</a> 2009-07-28 21:35 <a href="http://www.aygfsteel.com/supersalor/articles/288807.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">Ϸ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">״</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">пѷ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ȷɽ</a>| <a href="http://" target="_blank">̩</a>| <a href="http://" target="_blank">ʯʨ</a>| <a href="http://" target="_blank">ԭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">«</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">¡</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ڶ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">⽭</a>| <a href="http://" target="_blank">¡</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>