锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
a) 閰嶅悎浣跨敤org.springframework.transaction.interceptor.TransactionInterceptor鍜宱rg.springframework.orm.hibernate.HibernateTransactionManager錛屼笅闈㈡槸spring reference鐨勪緥瀛?
浠g爜: |
<beans> ... <bean id="myTransactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="mySessionFactory"/> </property> </bean> <bean id="myTransactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager"> <ref bean="myTransactionManager"/> </property> <property name="transactionAttributeSource"> <value> product.ProductService.increasePrice*=PROPAGATION_REQUIRED product.ProductService.someOtherBusinessMethod=PROPAGATION_MANDATORY </value> </property> </bean> <bean id="myProductServiceTarget" class="product.ProductServiceImpl"> <property name="productDao"> <ref bean="myProductDao"/> </property> </bean> <bean id="myProductService" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>product.ProductService</value> </property> <property name="target"> <ref local="myProductServiceTarget<"/> </property> <property name="interceptorNames"> <list> <value>myTransactionInterceptor</value> </list> </property> </bean> </beans> |
寮曠敤: |
This interceptor binds a new Hibernate Session to the thread before a method call, closing and removing it afterwards in case of any method outcome. If there already was a pre-bound Session (e.g. from HibernateTransactionManager, or from a surrounding Hibernate-intercepted method), the interceptor simply takes part in it. |
浠g爜: |
<beans> ... <bean id="myTransactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="mySessionFactory"/> </property> </bean> <bean id="myProductServiceTarget" class="product.ProductServiceImpl"> <property name="productDao"> <ref bean="myProductDao"/> </property> </bean> <bean id="myProductService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="myTransactionManager"/> </property> <property name="target"> <ref bean="myProductServiceTarget"/> </property> <property name="transactionAttributes"> <props> <prop key="increasePrice*">PROPAGATION_REQUIRED</prop> <prop key="someOtherBusinessMethod">PROPAGATION_MANDATORY</prop> </props> </property> </bean> </beans> |
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=396860
Criteria Query 閫氳繃闈㈠悜瀵硅薄鍖栫殑璁捐錛屽皢鏁版嵁鏌ヨ鏉′歡灝佽涓轟竴涓璞°傜畝鍗曟潵
聽璁詫紝Criteria Query鍙互鐪嬩綔鏄紶緇?/span>SQL鐨勫璞″寲琛ㄧず錛屽錛?span lang="EN-US">
聽Criteria criteria = session.createCriteria(User.class);
聽criteria.add(Expression.eq("name","Erica"));
聽criteria.add(Expression.eq("sex",new Integer(1)));
聽榪欓噷鐨?/span>criteria 瀹炰緥瀹為檯涓婃槸SQL 鈥?/span>Select * from t_user where
聽name=鈥?/span>Erica鈥?and sex=
聽浠ヨ瀵?/span>Hibernate鍦ㄨ繍琛屾湡鐢熸垚鐨?/span>SQL璇彞錛夈?span lang="EN-US">
聽Hibernate 鍦ㄨ繍琛屾湡浼氭牴鎹?/span>Criteria 涓寚瀹氱殑鏌ヨ鏉′歡錛堜篃灝辨槸涓婇潰浠g爜涓氳繃
聽criteria.add鏂規硶娣誨姞鐨勬煡璇㈣〃杈懼紡錛夌敓鎴愮浉搴旂殑SQL璇彞銆?span lang="EN-US">
聽榪欑鏂瑰紡鐨勭壒鐐規槸姣旇緝絎﹀悎Java 紼嬪簭鍛樼殑緙栫爜涔犳儻錛屽茍涓斿叿澶囨竻鏅扮殑鍙鎬с傛鍥?span lang="EN-US">
聽涓烘錛屼笉灝?/span>ORM瀹炵幇涓兘鎻愪緵浜嗙被浼肩殑瀹炵幇鏈哄埗錛堝Apache OJB錛夈?span lang="EN-US">
聽瀵逛簬Hibernate鐨勫垵瀛﹁咃紝鐗瑰埆鏄SQL浜嗚В鏈夐檺鐨勭▼搴忓憳鑰岃█錛?/span>Criteria Query
聽鏃犵枒鏄笂鎵嬬殑鏋佷匠閫斿緞錛岀浉瀵?/span>HQL錛?/span>Criteria Query鎻愪緵浜嗘洿鏄撲簬鐞嗚В鐨勬煡璇㈡墜孌碉紝鍊?span lang="EN-US">
聽鍔?/span>IDE鐨?/span>Coding Assist鏈哄埗錛?/span>Criteria鐨勪嬌鐢ㄥ嚑涔庝笉鐢ㄥお澶氱殑瀛︿範銆?span lang="EN-US">
聽Criteria 鏌ヨ琛ㄨ揪寮?span lang="EN-US">
聽Criteria 鏈韓鍙槸涓涓煡璇㈠鍣紝鍏蜂綋鐨勬煡璇㈡潯浠墮渶瑕侀氳繃Criteria.add
聽鏂規硶娣誨姞鍒?/span>Criteria瀹炰緥涓?span lang="EN-US">
聽濡傚墠渚嬫墍紺猴紝Expression 瀵硅薄鍏蜂綋鎻忚堪浜嗘煡璇㈡潯浠躲傞拡瀵?/span>SQL 璇硶錛?span lang="EN-US">
聽Expression鎻愪緵浜嗗搴旂殑鏌ヨ闄愬畾鏈哄埗錛屽寘鎷細
聽鏂規硶 鎻忚堪
聽Expression.eq 瀵瑰簲SQL鈥?/span>field = value鈥濊〃杈懼紡銆?span lang="EN-US">
聽濡?/span>Expression.eq("name","Erica")
聽Expression.allEq 鍙傛暟涓轟竴涓?/span>Map瀵硅薄錛屽叾涓寘鍚簡澶氫釜灞炴э紞鍊煎
聽搴斿叧緋匯傜浉褰撲簬澶氫釜Expression.eq鍏崇郴鐨勫彔鍔犮?span lang="EN-US">
聽Expression.gt 瀵瑰簲SQL涓殑 鈥渇ield > value 鈥?琛ㄨ揪寮?span lang="EN-US">
聽Expression.ge 瀵瑰簲SQL涓殑 鈥渇ield >= value鈥?琛ㄨ揪寮?span lang="EN-US">
聽Expression.lt 瀵瑰簲SQL涓殑 鈥渇ield < value鈥?琛ㄨ揪寮?span lang="EN-US">
聽Expression.le 瀵瑰簲SQL涓殑 鈥渇ield <= value鈥?琛ㄨ揪寮?span lang="EN-US">
聽Expression.between 瀵瑰簲SQL涓殑 鈥渂etween鈥?琛ㄨ揪寮?span lang="EN-US">
聽濡備笅闈㈢殑琛ㄨ揪寮忚〃紺哄勾榫勶紙age錛変綅浜?/span>13鍒?/span>50鍖?/span>闂村唴銆?span lang="EN-US">
聽Expression.between("age",new
聽Integer(13),new Integer(50));
聽琛ㄨ揪寮?span lang="EN-US">
聽Expression.in 瀵瑰簲SQL涓殑 鈥漟ield in 鈥︹?琛ㄨ揪寮?span lang="EN-US">
聽Expression.eqProperty 鐢ㄤ簬姣旇緝涓や釜灞炴т箣闂寸殑鍊鹼紝瀵瑰簲SQL涓殑鈥?/span>field = field鈥濄?span lang="EN-US">
聽濡傦細
聽Expression.eqProperty(
聽"TUser.groupID",
聽"TGroup.id"
聽);
聽Expression.gtProperty 鐢ㄤ簬姣旇緝涓や釜灞炴т箣闂寸殑鍊鹼紝瀵瑰簲SQL涓殑鈥?/span>field > field鈥濄?span lang="EN-US">
聽Expression.geProperty 鐢ㄤ簬姣旇緝涓や釜灞炴т箣闂寸殑鍊鹼紝瀵瑰簲SQL涓殑鈥?/span>field >= field鈥濄?span lang="EN-US">
聽Expression.ltProperty 鐢ㄤ簬姣旇緝涓や釜灞炴т箣闂寸殑鍊鹼紝瀵瑰簲SQL涓殑鈥?/span>field < field鈥濄?span lang="EN-US">
聽Expression.leProperty 鐢ㄤ簬姣旇緝涓や釜灞炴т箣闂寸殑鍊鹼紝瀵瑰簲SQL涓殑鈥?/span>field <= field鈥濄?span lang="EN-US">
聽Expression.and and鍏崇郴緇勫悎銆?span lang="EN-US">
聽濡傦細
聽Expression.and(
聽Expression.eq("name","Erica"),
聽Expression.eq(
聽"sex",
聽new Integer(1)
聽)
聽);
聽Expression.or or鍏崇郴緇勫悎銆?span lang="EN-US">
聽濡傦細
聽Expression.or(
聽Expression.eq("name","Erica"),
聽Expression.eq("name","Emma")
聽);
聽Expression.sql 浣滀負琛ュ厖錛屾湰鏂規硶鎻愪緵浜嗗師鐢?/span>SQL璇硶鐨勬敮鎸併傛垜
聽浠彲浠ラ氳繃榪欎釜鏂規硶鐩存帴閫氳繃SQL璇彞闄愬畾鏌ヨ鏉′歡銆?span lang="EN-US">
聽涓嬮潰鐨勪唬鐮佽繑鍥炴墍鏈夊悕縐頒互鈥?/span>Erica鈥濊搗濮嬬殑璁板綍錛?span lang="EN-US">
聽Expression.sql(
聽鈥?/span>lower({alias}.name) like lower(?)鈥?/span>,
聽"Erica%",
聽Hibernate.STRING
聽);
聽鍏朵腑鐨勨?/span>{alias}鈥濆皢鐢?/span>Hibernate鍦ㄨ繍琛屾湡浣?span lang="EN-US">
聽鐢ㄥ綋鍓嶅叧鑱旂殑POJO鍒悕鏇挎崲銆?span lang="EN-US">
聽娉ㄦ剰Expression 鍚勬柟娉曚腑鐨勫睘鎬у悕鍙傛暟錛堝Express.eq涓殑絎竴涓弬鏁幫級錛岃繖閲?span lang="EN-US">
聽鎵璋撳睘鎬у悕鏄?/span>POJO涓搴斿疄闄呭簱琛ㄥ瓧孌電殑灞炴у悕錛堝ぇ灝忓啓鏁忔劅錛夛紝鑰岄潪搴撹〃涓殑瀹?span lang="EN-US">
聽闄呭瓧孌靛悕縐般?span lang="EN-US">
聽Criteria 楂樼駭鐗規?span lang="EN-US">
聽闄愬畾榪斿洖鐨勮褰曡寖鍥?span lang="EN-US">
聽閫氳繃criteria. setFirstResult/setMaxResults 鏂規硶鍙互闄愬埗涓嬈℃煡璇㈣繑鍥?span lang="EN-US">
聽鐨勮褰曡寖鍥?/span>:
聽Criteria criteria = session.createCriteria(TUser.class);
聽//闄愬畾鏌ヨ榪斿洖媯绱㈢粨鏋滀腑錛屼粠絎竴鐧炬潯緇撴灉寮濮嬬殑20鏉¤褰?span lang="EN-US">
聽criteria.setFirstResult(100);
聽criteria.setMaxResults(20);
聽瀵規煡璇㈢粨鏋滆繘琛屾帓搴?span lang="EN-US">
聽//鏌ヨ鎵鏈?/span>groupId=2鐨勮褰?span lang="EN-US">
聽//騫跺垎鍒寜鐓у鍚?/span>(欏哄簭)鍜?/span>groupId錛堥嗗簭錛夋帓搴?span lang="EN-US">
聽Criteria criteria = session.createCriteria(TUser.class);
聽criteria.add(Expression.eq("groupId",new Integer(2)));
聽criteria.addOrder(Order.asc("name"));
聽criteria.addOrder(Order.desc("groupId"));
聽
聽Criteria浣滀負涓縐嶅璞″寲鐨勬煡璇㈠皝瑁呮ā寮忥紝涓嶈繃鐢變簬Hibernate鍦ㄥ疄鐜拌繃紼嬩腑灝嗙簿鍔?span lang="EN-US">
聽鏇村姞闆嗕腑鍦?/span>HQL鏌ヨ璇█涓婏紝鍥犳Criteria鐨勫姛鑳藉疄鐜拌繕娌″仛鍒板敖鍠勫敖緹庯紙榪欑偣涓婏紝OJB
聽鐨?/span>Criteria 瀹炵幇鍊掓槸鍊煎緱鍊熼壌錛夛紝鍥犳錛屽湪瀹為檯寮鍙戜腑錛屽緩璁繕鏄噰鐢?/span>Hibernate 瀹?span lang="EN-US">
聽鏂規帹鑽愮殑鏌ヨ灝佽妯″紡錛?/span>HQL銆?/span>聽