cascade表示¾U§è”æ“作
CascadeType.MERGE¾U§è”æ›´æ–°åQšè‹¥items属性修改了那么order对象ä¿å˜æ—¶åŒæ—¶ä¿®æ”¹items里的对象。对应EntityManagerçš„mergeæ–ÒŽ(gu¨©)³•
CascadeType.PERSIST¾U§è”åˆäh–°åQšèŽ·å–orderå¯¹è±¡é‡Œä¹ŸåŒæ—¶ä¹Ÿé‡æ–°èŽ·å–æœ€æ–°çš„items时的对象。对应EntityManagerçš„refresh(object)æ–ÒŽ(gu¨©)³•有效。å³ä¼?x¨¬)釿–°æŸ¥è¯¢æ•°æ®åº“里的最新数æ?nbsp;
CascadeType.REFRESH¾U§è”ä¿å˜åQšå¯¹order对象ä¿å˜æ—¶ä¹Ÿå¯¹items里的对象也会(x¨¬)ä¿å˜ã€‚对应EntityManagerçš„presistæ–ÒŽ(gu¨©)³•
CascadeType.REMOVE¾U§è”åˆ é™¤åQšå¯¹orderå¯¹è±¡åˆ é™¤ä¹Ÿå¯¹items里的对象也会(x¨¬)åˆ é™¤ã€‚å¯¹åº”EntityManagerçš„removeæ–ÒŽ(gu¨©)³•
CascadeType.PERSISTåªæœ‰A¾cÀL–°å¢žæ—¶åQŒä¼š(x¨¬)¾U§è”B对象新增。若B对象在数æ®åº“å˜ï¼ˆè·Ÿæ–°åQ‰åœ¨åˆ™æŠ›å¼‚常åQˆè®©Bå˜äØ“(f¨´)æŒä¹…æ€ï¼‰CascadeType.MERGE指A¾cÀL–°å¢žæˆ–者å˜åŒ–,ä¼?x¨¬)çñ”è”B对象åQˆæ–°å¢žæˆ–者å˜åŒ–)
CascadeType.REMOVEåªæœ‰A¾cÕdˆ 除时åQŒä¼š(x¨¬)¾U§è”åˆ é™¤B¾c»ï¼›
CascadeType.ALLåŒ…å«æ‰€æœ‰ï¼›
CascadeType.REFRESH没用˜q‡ã€?
¾lég¸ŠåQšå¤§å¤šæ•°æƒ…况用CascadeType.MERGEž®Þpƒ½è¾‘Öˆ°¾U§è”è·Ÿæ–°åˆä¸æŠ¥é”™åQŒç”¨CascadeType.ALLæ—¶è¦æ–Ÿé…Œä¸‹CascadeType.REMOVE
@Fetch:
å®šä¹‰äº†åŠ è½½å…³è”å…³¾pÈš„获喽{–ç•¥. FetchMode å¯ä»¥æ˜?
SELECT (在需è¦åŠ è½½å…³è”的时候触å‘selectæ“作), SUBSELECT(åªå¯¹é›†åˆæœ‰æ•ˆ,ä½¿ç”¨äº†åæŸ¥è¯¢½{–ç•¥,详情å‚考Hibernateå‚考文æ¡?
JOIN (åœ¨åŠ è½½ä¸»å®žä½“(owner entity)的时候ä‹É用SQL JOINæ¥åŠ è½½å…³è”å…³¾p?.
JOIN ž®†è¦†å†™ä“Q何åšg˜qŸå±žæ€?(通过 JOIN½{–ç•¥åŠ è²çš„å…³è”å°†ä¸å†å…ähœ‰å»¶è¿Ÿæ€?.
å®žä½“åŠ è²å®Œæˆå?/span>åQŒç«‹å›_Š è½½å…¶å…Œ™”的数æ®ã€?/span>
2.å»¶è¿ŸåŠ è²lazy loading
实体相关è”的数æ®åœ?span style="color: rgb(255, 0, 0);">½W¬ä¸€‹Æ¡è®¿é—?/span>时冘q›è¡Œè¯Õd–ã€?
3.é¢„å…ˆåŠ è² eager loading
与immediately loading¾cÖM¼¼åQŒä½†å®žä½“和相兌™”çš„æ•°æ®æ˜¯é€šè¿‡ä¸€æ¡sqlåŒæ—¶è¯Õd–ã€?br />4.扚w‡åŠ è² batch loading
åQ?br />
dom是解æžxml的底层接å£ä¹‹ä¸€(å¦ä¸€¿U是sax)
而jdomå’Œdom4j则是åŸÞZºŽåº•层api的更高çñ”ž®è£…
dom是通用的,而jdomå’Œdom4j则是é¢å‘javaè¯è¨€çš?nbsp;
DOM 是用与åã^å°å’Œè¯è¨€æ— 关的方å¼è¡¨½C?XML 文档的官æ–?W3C æ ‡å‡†ã€‚DOM 是以层次¾l“æž„¾l„织的节ç‚ÒŽ(gu¨©)ˆ–ä¿¡æ¯ç‰‡æ–的集åˆã€‚这个层‹Æ¡ç»“æž„å…许开å‘äh员在æ ?w¨¨i)ä¸å¯ÀL‰¾ç‰¹å®šä¿¡æ¯ã€‚分æžè¯¥¾l“构通常需è¦åŠ è½½æ•´ä¸ªæ–‡æ¡£å’Œæž„é€ å±‚‹Æ¡ç»“æž„ï¼Œç„¶åŽæ‰èƒ½åšä“Q何工作。由于它是基于信æ¯å±‚‹Æ¡çš„åQŒå› è€?DOM 被认为是åŸÞZºŽæ ?w¨¨i)或åŸÞZºŽå¯¹è±¡çš„。DOM 以åŠ(qi¨¢ng)òq¿ä¹‰çš„åŸºäºŽæ ‘(w¨¨i)的处ç†å…·æœ‰å‡ 个优ç‚V€‚首先,ç”׃ºŽæ ?w¨¨i)在内å˜ä¸æ˜¯æŒä¹…çš„ï¼Œå› æ¤å¯ä»¥ä¿®æ”¹å®ƒä»¥ä¾¿åº”用程åºèƒ½å¯Ò?gu¨©)•°æ®å’Œ¾l“构作出更改。它˜q˜å¯ä»¥åœ¨ä»ÖM½•时候在æ ?w¨¨i)ä¸ä¸Šä¸‹å¯ÆDˆªåQŒè€Œä¸æ˜¯åƒ SAX é‚£æ ·æ˜¯ä¸€‹Æ¡æ€§çš„处ç†ã€‚DOM 使用èµäh¥ä¹Ÿè¦½Ž€å•得多ã€?/span>
XML的四¿Uè§£æžå™¨(dom,sax,jdom,dom4j)原ç†å?qi¨¢ng)性能比较(转自zsq)
1ã€DOM
DOM 是用与åã^å°å’Œè¯è¨€æ— 关的方å¼è¡¨½C?XML 文档的官æ–?W3C æ ‡å‡†ã€‚DOM 是以层次¾l“æž„¾l„织的节ç‚ÒŽ(gu¨©)ˆ–ä¿¡æ¯ç‰‡æ–的集åˆã€‚这个层‹Æ¡ç»“æž„å…许开å‘äh员在æ ?w¨¨i)ä¸å¯ÀL‰¾ç‰¹å®šä¿¡æ¯ã€‚分æžè¯¥¾l“构通常需è¦åŠ è½½æ•´ä¸ªæ–‡æ¡£å’Œæž„é€ å±‚‹Æ¡ç»“æž„ï¼Œç„¶åŽæ‰èƒ½åšä“Q何工作。由于它是基于信æ¯å±‚‹Æ¡çš„åQŒå› è€?DOM 被认为是åŸÞZºŽæ ?w¨¨i)或åŸÞZºŽå¯¹è±¡çš„。DOM 以åŠ(qi¨¢ng)òq¿ä¹‰çš„åŸºäºŽæ ‘(w¨¨i)的处ç†å…·æœ‰å‡ 个优ç‚V€?br /> 首先åQŒç”±äºŽæ ‘(w¨¨i)在内å˜ä¸æ˜¯æŒä¹…çš„åQŒå› æ¤å¯ä»¥ä¿®æ”¹å®ƒä»¥ä¾¿åº”用½E‹åºèƒ½å¯¹æ•°æ®å’Œç»“构作出更æ”V€‚它˜q˜å¯ä»¥åœ¨ä»ÖM½•时候在æ ?w¨¨i)ä¸ä¸Šä¸‹å¯ÆDˆªåQŒè€Œä¸æ˜¯åƒ SAX é‚£æ ·æ˜¯ä¸€‹Æ¡æ€§çš„处ç†ã€‚DOM 使用èµäh¥ä¹Ÿè¦½Ž€å•得多ã€?br /> å¦ä¸€æ–šw¢åQŒå¯¹äºŽç‰¹åˆ«å¤§çš„æ–‡æ¡£ï¼Œè§£æžå’ŒåŠ è½½æ•´ä¸ªæ–‡æ¡£å¯èƒ½å¾ˆæ…¢ä¸”很耗资æºï¼Œå› æ¤ä½¿ç”¨å…¶ä»–手段æ¥å¤„ç†è¿™æ ïL(f¨¥ng)š„æ•°æ®ä¼?x¨¬)更好。这些基于事件的模型åQŒæ¯”å¦?SAXã€?
2ã€SAX
˜q™ç§å¤„ç†çš„优炚wžå¸¸ç±»ä¼égºŽ‹¹åª’体的优点。分æžèƒ½å¤Ÿç«‹å›_¼€å§‹ï¼Œè€Œä¸æ˜¯ç‰å¾…所有的数æ®è¢«å¤„ç†ã€‚而且åQŒç”±äºŽåº”用程åºåªæ˜¯åœ¨è¯Õd–æ•°æ®æ—¶æ£€æŸ¥æ•°æ®ï¼Œå› æ¤ä¸éœ€è¦å°†æ•°æ®å˜å‚¨åœ¨å†…å˜ä¸ã€‚这对于大型文档æ¥è¯´æ˜¯ä¸ªå·¨å¤§çš„优ç‚V€‚事实上åQŒåº”用程åºç”šè‡³ä¸å¿…è§£æžæ•´ä¸ªæ–‡æ¡£ï¼›å®ƒå¯ä»¥åœ¨æŸä¸ªæ¡äšg得到满èƒöæ—¶åœæ¢è§£æžã€‚一般æ¥è¯ß_(d¨¢)¼ŒSAX ˜q˜æ¯”它的替代è€?DOM 快许多ã€?br />3ã€é€‰æ‹© DOM ˜q˜æ˜¯é€‰æ‹© SAX åQ?/strong>
对于需è¦è‡ªå·Þq¼–å†™ä»£ç æ¥å¤„ç† XML 文档的开å‘äh员æ¥è¯ß_(d¨¢)¼Œé€‰æ‹© DOM ˜q˜æ˜¯ SAX è§£æžæ¨¡åž‹æ˜¯ä¸€ä¸ªéžå¸”R‡è¦çš„设计决ç–ã€?nbsp;
DOM 采用建立æ ?w¨¨i)åÅž¾l“构的方å¼è®¿é—?XML 文档åQŒè€?SAX 采用的事件模型ã€?nbsp;
DOM è§£æžå™¨æŠŠ XML 文档转化ä¸ÞZ¸€ä¸ªåŒ…å«å…¶å†…å®¹çš„æ ‘(w¨¨i)åQŒåƈå¯ä»¥å¯ÒŽ(gu¨©) ‘(w¨¨i)˜q›è¡Œé历。用 DOM è§£æžæ¨¡åž‹çš„优ç‚ÒŽ(gu¨©)˜¯¾~–程å®ÒŽ(gu¨©)˜“åQŒå¼€å‘äh员åªéœ€è¦è°ƒç”¨å¾æ ?w¨¨i)的指ä×o(h¨´)åQŒç„¶åŽåˆ©ç”¨navigation APIs讉K—®æ‰€éœ€çš„æ ‘(w¨¨i)节点æ¥å®Œæˆä“Q务。å¯ä»¥å¾ˆå®ÒŽ(gu¨©)˜“çš„æ·»åŠ å’Œä¿®æ”¹æ ?w¨¨i)ä¸çš„å…ƒç´ ã€‚ç„¶è€Œç”±äºŽä‹Éç”?DOM è§£æžå™¨çš„æ—¶å€™éœ€è¦å¤„ç†æ•´ä¸?XML 文档åQŒæ‰€ä»¥å¯¹æ€§èƒ½å’Œå†…å˜çš„è¦æ±‚比较高,ž®¤å…¶æ˜¯é‡åˆ°å¾ˆå¤§çš„ XML æ–‡äšg的时候。由于它的é历能力,DOM è§£æžå™¨å¸¸ç”¨äºŽ XML 文档需è¦é¢‘¾J的改å˜çš„æœåŠ¡ä¸ã€?br /> SAX è§£æžå™¨é‡‡ç”¨äº†åŸÞZºŽäº‹äšgçš„æ¨¡åž‹ï¼Œå®ƒåœ¨è§£æž XML 文档的时候å¯ä»¥è§¦å‘一¾pÕdˆ—的事ä»Óž¼Œå½“å‘现给定的tag的时候,它å¯ä»¥æ¿€‹zÖM¸€ä¸ªå›žè°ƒæ–¹æ³•ï¼Œå‘Šè¯‰è¯¥æ–¹æ³•åˆ¶å®šçš„æ ‡ç¾å·²ç»æ‰‘Öˆ°ã€‚SAX 对内å˜çš„è¦æ±‚通常ä¼?x¨¬)比较低åQŒå› 为它让开å‘äh员自己æ¥å†›_®šæ‰€è¦å¤„ç†çš„tag。特别是当开å‘äh员åªéœ€è¦å¤„ç†æ–‡æ¡£ä¸æ‰€åŒ…å«çš„éƒ¨åˆ†æ•°æ®æ—¶åQŒSAX ˜q™ç§æ‰©å±•能力得到了更好的体现。但ç”?SAX è§£æžå™¨çš„æ—¶å€™ç¼–ç 工作会(x¨¬)比较困难åQŒè€Œä¸”å¾ˆéš¾åŒæ—¶è®‰K—®åŒä¸€ä¸ªæ–‡æ¡£ä¸çš„多处ä¸åŒæ•°æ®ã€?br />4ã€JDOM
JDOM的目的是æˆäØ“(f¨´) Java 特定文档模型åQŒå®ƒ½Ž€åŒ–与 XML çš„äº¤äº’åÆˆä¸”æ¯”ä½¿ç”¨ DOM 实现更快。由于是½W¬ä¸€ä¸?Java 特定模型åQŒJDOM 一直得到大力推òq¿å’Œä¿ƒè¿›ã€‚æ£åœ¨è€ƒè™‘通过“Java 规范è¯äh±‚ JSR-102”ž®†å®ƒæœ€¾lˆç”¨ä½?#8220;Java æ ‡å‡†æ‰©å±•”。从 2000 òq´åˆž®±å·²¾l开始了 JDOM å¼€å‘ã€?br /> JDOM ä¸?DOM ä¸»è¦æœ‰ä¸¤æ–šw¢ä¸åŒã€‚首先,JDOM ä»…ä‹É用具体类而ä¸ä½¿ç”¨æŽ¥å£ã€‚这在æŸäº›æ–¹é¢ç®€åŒ–了 APIåQŒä½†æ˜¯ä¹Ÿé™åˆ¶äº†çµ‹zÀL€§ã€‚第二,API 大é‡ä½¿ç”¨äº?Collections ¾c»ï¼Œ½Ž€åŒ–了那些已ç»ç†Ÿæ?zh¨¨n)‰˜q™äº›¾cÈš„ Java å¼€å‘者的使用ã€?br /> JDOM 文档声明其目的是“使用 20%åQˆæˆ–æ›´å°‘åQ‰çš„¾_‘ÖŠ›è§£å†³ 80%åQˆæˆ–更多åQ‰Java/XML 问题”åQˆæ ¹æ®å¦ä¹?f¨¤n)曲¾U¿å‡å®šäØ“(f¨´) 20%åQ‰ã€‚JDOM 对于大多æ•?Java/XML 应用½E‹åºæ¥è¯´å½“然是有用的åQŒåƈ且大多数开å‘者å‘çŽ?API æ¯?DOM å®ÒŽ(gu¨©)˜“ç†è§£å¾—多。JDOM ˜q˜åŒ…括对½E‹åºè¡ŒäØ“(f¨´)的相当广泛检查以防æ¢ç”¨æˆ·åšä“Q何在 XML 䏿— æ„义的事。然而,它ä»éœ€è¦æ?zh¨¨n)¨å……分ç†è§?XML 以便åšä¸€äº›è¶…出基本的工作åQˆæˆ–者甚至ç†è§£æŸäº›æƒ…况下的错误)。这也许是比å¦ä¹ (f¨¤n) DOM æˆ?JDOM 接å£éƒ½æ›´æœ‰æ„义的工作ã€?br /> JDOM 自èínä¸åŒ…å«è§£æžå™¨ã€‚它通常使用 SAX2 è§£æžå™¨æ¥è§£æžå’ŒéªŒè¯è¾“å…?XML 文档åQˆå°½½Ž¡å®ƒ˜q˜å¯ä»¥å°†ä»¥å‰æž„é€ çš„ DOM è¡¨ç¤ºä½œäØ“(f¨´)输入åQ‰ã€‚它包å«ä¸€äº›è{æ¢å™¨ä»¥å°† JDOM 表示输出æˆ?SAX2 事äšg‹¹ã€DOM 模型æˆ?XML 文本文档。JDOM 是在 Apache 许å¯è¯å˜ä½“下å‘布的开放æºç ã€?br />5ã€DOM4J
虽然 DOM4J 代表了完全独立的开å‘结果,但最åˆï¼Œå®ƒæ˜¯ JDOM 的一¿U智能分支。它åˆåƈ了许多超出基æœ?XML 文档表示的功能,包括集æˆçš?XPath 支æŒã€XML Schema 支æŒä»¥åŠ(qi¨¢ng)用于大文档或‹¹åŒ–文档的基于事件的处ç†ã€‚它˜q˜æä¾›äº†æž„徿–‡æ¡£è¡¨ç¤ºçš„选项åQŒå®ƒé€šè¿‡ DOM4J API å’Œæ ‡å‡?DOM 接å£å…ähœ‰òq¶è¡Œè®‰K—®åŠŸèƒ½ã€‚ä»Ž 2000 下åŠòq´å¼€å§‹ï¼Œå®ƒå°±ä¸€ç›´å¤„于开å‘之ä¸ã€?br /> ä¸ºæ”¯æŒæ‰€æœ‰è¿™äº›åŠŸèƒ½ï¼ŒDOM4J 使用接å£å’ŒæŠ½è±¡åŸºæœ¬ç±»æ–ÒŽ(gu¨©)³•。DOM4J 大é‡ä½¿ç”¨äº?API ä¸çš„ Collections ¾c»ï¼Œä½†æ˜¯åœ¨è®¸å¤šæƒ…况下åQŒå®ƒ˜q˜æä¾›ä¸€äº›æ›¿ä»£æ–¹æ³•以å…è®¸æ›´å¥½çš„æ€§èƒ½æˆ–æ›´ç›´æŽ¥çš„ç¼–ç æ–¹æ³•。直接好处是åQŒè™½ç„?DOM4J ä»˜å‡ºäº†æ›´å¤æ‚çš?API çš„ä»£ä»øP¼Œä½†æ˜¯å®ƒæä¾›äº†æ¯?JDOM 大得多的ç‰|´»æ€§ã€?br /> åœ¨æ·»åŠ çµ‹zÀL€§ã€XPath 集æˆå’Œå¯¹å¤§æ–‡æ¡£å¤„ç†çš„ç›®æ ‡æ—Óž¼ŒDOM4J çš„ç›®æ ‡ä¸Ž JDOM 是一æ ïL(f¨¥ng)š„åQšé’ˆå¯?Java å¼€å‘者的易用性和直观æ“作。它˜q˜è‡´åŠ›äºŽæˆäØ“(f¨´)æ¯?JDOM 更完整的解决æ–ÒŽ(gu¨©)¡ˆåQŒå®žçŽ°åœ¨æœ¬è´¨ä¸Šå¤„ç†æ‰€æœ?Java/XML é—®é¢˜çš„ç›®æ ‡ã€‚åœ¨å®Œæˆè¯¥ç›®æ ‡æ—¶åQŒå®ƒæ¯?JDOM æ›´å°‘å¼ø™°ƒé˜²æ¢ä¸æ£¼‹®çš„应用½E‹åºè¡ŒäØ“(f¨´)ã€?br /> DOM4J 是一个éžå¸”Ržå¸æ€¼˜¿U€çš„Java XML APIåQŒå…·æœ‰æ€§èƒ½ä¼˜å¼‚ã€åŠŸèƒ½å¼ºå¤§å’Œæžç«¯æ˜“ç”¨ä½¿ç”¨çš„ç‰¹ç‚¹ï¼ŒåŒæ—¶å®ƒä¹Ÿæ˜¯ä¸€ä¸ªå¼€æ”¾æºä»£ç çš„èÊYä»¶ã€‚å¦‚ä»Šä½ å¯ä»¥çœ‹åˆ°‘Šæ¥‘Šå¤šçš?Java 软äšg都在使用 DOM4J æ¥è¯»å†?XMLåQŒç‰¹åˆ«å€¼å¾—一æçš„æ˜¯è¿ž Sun çš?JAXM 也在ç”?DOM4Jã€?br />6ã€æ€»è¿°
JDOM å’?DOM 在性能‹¹‹è¯•时表çŽîC¸ä½»I¼Œåœ¨æµ‹è¯?10M æ–‡æ¡£æ—¶å†…å˜æº¢å‡ºã€‚在ž®æ–‡æ¡£æƒ…况下˜q˜å€¼å¾—考虑使用 DOM å’?JDOM。虽ç„?JDOM 的开å‘者已¾l说明他们期望在æ£å¼å‘行版å‰ä¸“注性能问题åQŒä½†æ˜¯ä»Žæ€§èƒ½è§‚点æ¥çœ‹åQŒå®ƒ¼‹®å®žæ²¡æœ‰å€¼å¾—推è之处。å¦å¤–,DOM 仿˜¯ä¸€ä¸ªéžå¸¸å¥½çš„选择。DOM 实现òq¿æ³›åº”用于多¿Uç¼–½E‹è¯a€ã€‚它˜q˜æ˜¯è®¸å¤šå…¶å®ƒä¸?XML ç›¸å…³çš„æ ‡å‡†çš„åŸºç¡€åQŒå› 为它æ£å¼èŽ·å¾— W3C 推èåQˆä¸ŽåŸÞZºŽéžæ ‡å‡†çš„ Java 模型相对åQ‰ï¼Œæ‰€ä»¥åœ¨æŸäº›¾cÕdž‹çš„项目ä¸å¯èƒ½ä¹Ÿéœ€è¦å®ƒåQˆå¦‚åœ?javascript ä¸ä‹Éç”?DOMåQ‰ã€?br /> SAX表现较好åQŒè¿™è¦ä¾èµ–äºŽå®ƒç‰¹å®šçš„è§£æžæ–¹å¼ã€‚一ä¸?SAX ‹‚€(g¨¨)‹¹‹å³ž®†åˆ°æ¥çš„XML‹¹ï¼Œä½†åƈ没有载入到内å˜ï¼ˆå½“然当XML‹¹è¢«è¯Õd…¥æ—Óž¼Œä¼?x¨¬)有部分文档暂时éšè—在内å˜ä¸åQ‰ã€?br /> æ— ç–‘åQŒDOM4J是最好的åQŒç›®å‰è®¸å¤šå¼€æºé¡¹ç›®ä¸å¤§é‡é‡‡ç”¨ DOM4JåQŒä¾‹å¦‚大å鼎鼎的 Hibernate 也用 DOM4J æ¥è¯»å?XML é…置文äšg。如果ä¸è€ƒè™‘å¯ç§»æ¤æ€§ï¼Œé‚£å°±é‡‡ç”¨DOM4Jå§ï¼
ALTER TABLE "public"."base_contract"
ADD COLUMN "userid" int8 DEFAULT 0 NOT NULL;
ALTER TABLE "public"."base_user"
ADD COLUMN "telphone" varchar(20) DEFAULT ''::character varying NOT NULL;
INSERT INTO "base_role" VALUES ('21', '代ç†å•?, 'åªèƒ½æŸ¥çœ‹å¯¹å±žäºŽè‡ªå·Þqš„æ‰€æœ‰åˆå?);
update base_contract a set userid=(SELECT b.userid from base_user b where a.username=b.username LIMIT 1)
delete from base_menu;
BEGIN;
INSERT INTO "base_menu" VALUES ('1', 'infoMenu', null, '公用èœå•', null, null, null, null, 'Y', '0');
INSERT INTO "base_menu" VALUES ('2', 'ediUser', 'infoMenu', '修改个äh资料', 'Note', 'ediUser.jsp', 'top', '2', 'N', '0');
COMMIT;
三ã€å®‰è£…jdkòq¶ä¸”é…ç½®resin
下è²jdk1.7.0åQŒåƈ且解压到/usr/java/ä¸?¾l“果昄¡¤ºä¸?/usr/java/jdk1.7.0
cd /usr/src/ && tar xzf resin-pro-4.0.23.tar.gz &&cd resin-pro-4.0.23 &&./configure –with-java-home=/usr/java/jdk1.7.0 &&make &&make install å›_¯åQ?br />安装完åŽresin的日志目录在 /var/log/resin/ä¸?br />å¯åЍresin命ä×o(h¨´)如下 /etc/init.d/resin start å›_¯åQŒç„¶åŽè®¿é—®http://ip:8080
å››ã€nginxæ•´åˆresin的方å¼è·Ÿnginxæ•´åˆtomcatä¸€æ øP¼Œå†è¿™é‡Œå°±ä¸é‡å¤äº†åQ?br />æä¾›æˆ‘上一½‹‡æ–‡ç« 地å€:http://chinaapp.sinaapp.com/?p=1922
五ã€resiné…置优化:
以下是我的酾|®æ–‡ä»?è´´å‡ºä¸€éƒ¨åˆ†ä¿®æ”¹çš„ï¼Œå…¶ä»–çš„ä¿æŒä¸å˜ï¼Œåœ¨å›žå¤ä¸‹é¢ï¼
二:(x¨¬)switch
<#switch value>
<#case refValue1>...<#break>
<#case refValue2>...<#break>...
<#case refValueN>...<#break>
<#default>...</#switch>
三:(x¨¬)liståQŒbreak
<#list sequence as item>
...
</#list>
两个ç‰ÒŽ(gu¨©)®Šçš„åó@环å˜é‡ï¼š(x¨¬)
item_index: 当å‰å˜é‡çš„烦引倹{€?br />item_has_next: 是å¦å˜åœ¨ä¸‹ä¸€ä¸ªå¯¹è±¡ã€?/p>
å¯ä»¥ç”?lt;#break/>指ä×o(h¨´)¼›Õd¼€loop循环ã€?/p>
四:(x¨¬)include指ä×o(h¨´)
<#include filename>或�br /><#include filenameoptions>
filename: 表达å¼è{æ¢äØ“(f¨´)å—符ä¸?br />options: encoding=encoding, parse=parse encoding: 表达å¼è{æ¢äØ“(f¨´)å—符ä¸?br />parse: 表达å¼è{æ¢äØ“(f¨´)逻辑å€û|¼Œæ˜¯å¦ä½œäØ“(f¨´)ftlæ–‡äšgè§£æžã€?br /><#include "/common/navbar.html" parse=false encoding="Shift_JIS">
<#include "*/footer.ftl">表示当å‰ç›®å½•下以å?qi¨¢ng)所有父目录下的文äšgã€‚å¦‚æžœå½“å‰æ¨¡ç‰ˆåœ¨/foo/bar/template.ftl åQŒé‚£ä¹ˆæŸ¥æ‰¾footer.ftl的顺åºäØ“(f¨´)åQ?foo/bar/footer.ftl
/foo/footer.ftl/footer.ftl˜q™ç§æ–¹å¼è®²å…许设计者将通用的模版放在父文äšg多w‡Œé¢ã€?br />也å¯ä»¥åªæŒ‡å®šéƒ¨åˆ†è·¯å¾„åQ?lt;#include "*/commons/footer.ftl">
五:(x¨¬)import指ä×o(h¨´)<#import path as hash>
å…:(x¨¬)noparse
<#noparse>
...
</#noparse>
七:(x¨¬)compress
<#compress>
...
</#compress>
八:(x¨¬)escapeåQŒnoescape
<#escape identifier as expression>
...
<#noescape>...</#noescape>
...
</#escape>
escape指ä×o(h¨´)body区的ftlçš„interpolations都会(x¨¬)è¢«è‡ªåŠ¨åŠ ä¸Šescape表达å¼ã€‚但是ä¸ä¼?x¨¬)åª?ji¨£ng)å“å—½W¦ä¸²å†…çš„interpolations。而且也åªä¼?x¨¬)åª?ji¨£ng)å“到body内出现的interpolationsåQŒæ¯”如ä¸ä¼?x¨¬)åª?ji¨£ng)å“到includeçš„ftlçš„interpolationsã€?br /><#escape x as x?html>
First name: ${firstName}
Last name: ${lastName}
Maiden name: ${maidenName}</#escape>
½{‰åŒäºŽï¼š(x¨¬)
First name: ${firstName?html}
Last name: ${lastName?html}
Maiden name: ${maidenName?html}
escape指ä×o(h¨´)åœ¨è§£æžæ¨¡ç‰ˆæ—¶èµ·ä½œç”¨ï¼Œè€Œä¸æ˜¯è¿è¡Œæ—¶èµ·ä½œç”¨ã€?/p>
escape指ä×o(h¨´)˜q˜èƒ½åµŒå¥—使用åQŒå¾l§æ‰¿çˆ¶çš„escape规则ã€?/p>
<#escape x as x?html>
Customer Name: ${customerName}
Items to ship:
<#escape x as itemCodeToNameMap[x]>
${itemCode1}
${itemCode2}
${itemCode3}
${itemCode4}
</#escape></#escape>
½{‰åŒäºŽï¼š(x¨¬)Customer Name: ${customerName?html}
Items to ship:
${itemCodeToNameMap[itemCode1]?html}
${itemCodeToNameMap[itemCode2]?html}
${itemCodeToNameMap[itemCode3]?html}
${itemCodeToNameMap[itemCode4]?html}
ä¹?ji¨¦)ï¼?x¨¬)assign指ä×o(h¨´)
<#assign name=value>or<#assign name1=value1name2=value2... nameN=valueN>or<#assign same as above... in namespacehash>or<#assign name> capture this</#assign>or<#assign name in namespacehash> capture this</#assign>åˆ›å¾æˆ–者替æ¢ä¸€ä¸ªå·²¾lå˜åœ¨çš„å˜é‡åQŒåªèƒ½ä½œç”¨äºŽ™å¶å±‚å˜é‡ã€‚ä¸å¥½çš„åšæ³•åQ?lt;#assign x>Hello ${user}!</#assign>更改为:(x¨¬)<#assign x="Hello ${user}!">
å:(x¨¬)global指ä×o(h¨´)
<#global name=value>
or
<#global name1=value1name2=value2... nameN=valueN>or<#global name>
capture this
</#global>
å一åQšlocal指ä×o(h¨´)
<#local name=value>
or
<#local name1=value1name2=value2... nameN=valueN>or<#local name>
capture this
</#local>åªèƒ½ç”¨äºŽmacro的定义bodyä¸ã€?/p>
å二åQšsetting指ä×o(h¨´)åQ?/p>
<#setting name=value>
nameçš„å–倯DŒƒå›ß_(d¨¢)¼š(x¨¬)
localåQšnumber_formatåQ?br />boolean_format:¾~ºçœå€égØ“(f¨´)"true,false"
date_format, time_format, datetime_format
time_zoneåQšurl_escaping_charset
classic_compatible
å三åQšç”¨æˆ¯‚‡ªå®šä¹‰æŒ‡ä×o(h¨´)
<@macro_or_transfparam1=val1param2=val2...paramN=valN/><@macro_or_transfparam1=val1param2=val2...paramN=valN ; lv1, lv2, ..., lvN/><@macro_or_transf...> ...</@macro_or_transf><@macro_or_transf...> ...</@><@macro_or_transfval1, val2, ..., valN/>
åå››åQšmacro,nested,return
<#macro nameparam1param2... paramN>
...
<#nested loopvar1, loopvar2, ..., loopvarN>
...
<#return>
...
</#macro>
å五åQšfunction, return
<#function nameparam1param2... paramN>
... <#return returnValue>
...
</#function>
<#function avg x y>
<#return (x + y) / 2>
</#function>
${avg(10, 20)}
åå…åQšflush
<#flush>
å七åQšstop
<#stop>
or
<#stop reason>å–æ¶ˆå¤„ç†æ¨¡ç‰ˆã€?/p>
åå…«åQšftl指ä×o(h¨´)
<#ftl param1=value1param2=value2...paramN=valueN>
ftl指ä×o(h¨´)必须攑֜¨ftlæ–‡äšg的最上é¢ã€?/p>
傿•°èŒƒå›´åQ?br />encodingåQ?br />strip_whitespace
strip_text
strict_syntax
åä¹(ji¨¦)åQšt, lt, rt
二ååQšattempt, recover
<#attempt>
attempt block<#recover>
recover block
</#attempt>
<#attempt>
Optional content: ${thisMayFails}
<#recover>
Ops! The optional content is not available.
</#attempt>