聽聽聽聽聽聽 String sql="select s_id as sid,s_name as sname,s_sex as ssex,s_brith as sbrith from stu";
聽聽聽聽聽聽 List list=this.getJdbcTemplate().query(sql,new BeanPropertyRowMapper(Stu.class));
聽聽聽聽聽聽 return list;
聽聽聽 }
鍏充簬execute鍜寀pdate鏂規硶涔嬮棿鐨勫尯鍒紝update鏂規硶榪斿洖鐨勬槸鍙楀獎鍝嶇殑璁板綍鏁扮洰鐨?涓涓鏁幫紝騫朵笖濡傛灉浼犲叆鍙傛暟鐨勮瘽錛屼嬌鐢ㄧ殑鏄痡ava.sql.PreparedStatement,鑰宔xecute鏂規硶鎬繪槸浣跨敤 java.sql.Statement,涓嶆帴鍙楀弬鏁幫紝鑰屼笖浠栦笉榪斿洖鍙楀獎鍝嶈褰曠殑璁℃暟錛屾洿閫傚悎浜庡垱寤哄拰涓㈠純琛ㄧ殑璇彞錛岃寀pdate鏂規硶鏇撮傚悎浜庢彃鍏ワ紝鏇存柊 鍜屽垹闄ゆ搷浣滐紝榪欎篃鏄垜浠湪浣跨敤鏃墮渶瑕佹敞鎰忕殑銆?/span>
Connection conn=DataSourceUtils.getConnection(getJdbcTempldate().getDataSource());
conn=getJdbcTemplate().getNativeJdbcExtractor().getNativeConnection(conn);
OracleConnection oconn=(OracleConnection)conn;
閫氳繃DataSourceUtils鑾峰彇褰撳墠綰跨▼緇戝畾鐨勬暟鎹繛鎺ワ紝涓轟簡浣跨敤綰跨▼涓婁笅鏂囩浉鍏崇殑浜嬪姟錛岃繖鏍峰啓鏄紜殑鍐欐硶錛屽鏋滅洿鎺ヤ粠DataSource鑾峰彇榪炴帴錛屽緱鍒扮殑鏄拰褰撳墠綰跨▼涓婁笅鏂囨棤鍏崇殑鏂扮殑鏁版嵁搴撹繛鎺ュ疄渚嬨?/span>
http://www.javaeye.com/topic/49932?page=2
http://www.javaeye.com/problems/15846
http://www.javaeye.com/topic/87034
http://www.javaeye.com/topic/508799
http://ttitfly.javaeye.com/blog/151560
jdbcTemplate鐨勬柟寮忛噷濡傛灉甯︿笂int[] argTypes鏄劇ず鎸囧畾姣忎釜鍗犱綅絎︽墍瀵瑰簲鐨勫瓧孌墊暟鎹被鍨嬶紝鍙互淇濊瘉綾誨瀷瀹夊叏錛屽綋鍙傛暟鍊間負null鏃訛紝鎻愪緵浜嗘洿濂界殑鏀寔銆?/p>
-----------------------
涓婇潰榪欏彞璇濆浣曠悊瑙o紵
鍚庡湪http://javazoo.bokee.com/viewdiary.15850865.html鎵懼埌鍘熷洜浜?/p>
浠婂ぉ鍦ㄨ皟璇曠▼搴忕殑鏃跺?鍦ㄥ悗鍙頒笟鍔¢昏緫綾諱腑鍒╃敤JdbcTemplate榪涜鏁版嵁鍚屾鎿嶄綔鏃?鍙戠幇褰?br />鎵цjdbcTemplate.update(甯?鐨凷QL璇彞,new Object[]{tmp.getName( ),tmp.getNo( ),tmp.getSpeciality( ),tmp.getMounterofficer( ),tmp.getDesigner( ),tmp.getProductivity( ),tmp.getState( ))
榪欑鎿嶄綔鏃?濡傛灉鍚庨潰鍙傛暟涓湁鍊間負null鏃?鍚庡彴浼氭姤寮傚父,緇嗘兂涓嬩篃鏄?濡傛灉鏄痭ull,閭e氨瑕佹墽琛宩dbc鐨剆etNull(Spring搴曞眰榪樻槸鐢↗DBC鍋氱殑)鏂規硶浜?浣嗘槸setNull鏂規硶瑕佺煡閬撳叿浣撶殑鏁版嵁搴撳瓧孌電殑綾誨瀷.濡俿etNull(1,Types.VARCHAR).鑰屽湪涓婇潰鐨勬柟娉曟病鏈変綋鐜?
緇堜簬浣撲細鍒皍pdate鏂規硶涓涓変釜鍙傛暟new int[]鐨勪綔鐢ㄤ簡.!
spring榪樻槸寰堜紵澶х殑.
濡傛灉瀛楁鍚嶅拰灞炴у悕鏄弗鏍煎搴旂殑錛岄偅涔堝氨鍙互涓嶇敤鑷繁鍐橰owMapper浜嗭紝浣跨敤BeanPropertyRowMapper:
getJdbcTemplate().query(sql,聽new聽BeanPropertyRowMapper(User.class));聽聽
綾葷殑灞炴у瓧孌靛悕縐拌鏁版嵁搴撲腑鐨勫瓧孌靛悕縐頒竴鏍鋒垨鑰呮暟鎹簱瀛楁鍚嶄負s_id綾葷殑鍚嶇О涓篠Id,
濡傛灉浣犳病鏈夐伒瀹堣繖涓鑼冨垯鍙互鍦╯elect璇彞鍚庨潰緇欐暟鎹簱瀛楁鍚嶅彇鍒悕
//緇戝畾鍙傛暟鏃訛紝鏃ユ湡綾誨瀷鐨勫啓娉?鏈粡榪囬獙璇?br />
聽聽聽 public void updStu(Stu stu) {
String sql = "update stu set s_name=?,s_sex=?,s_brith=? where s_id=?";
Object[] obj = new Object[] { stu.getSname(), stu.getSsex(),new java.sql.Date(stu.getSbrith().getTime()), stu.getSid() };
聽聽聽聽聽 getJdbcTemplate().update(sql, obj, new int[] { Types.VARCHAR, Types.VARCHAR,Types.DATE, Types.INTEGER });
聽聽聽 }
ConnectionCallback鐨勭敤娉曪紝浣跨敤瀹岃鎵嬪姩鍏抽棴榪炴帴鍚楋紵
spring鐨凙bstractRoutingDataSource錛屽彲浠ュ鎬佸垏鎹㈡暟鎹簱?
浜嬪姟鎶借薄灞俬ttp://blog.csdn.net/congqian1120/archive/2008/01/16/2046311.aspx
public interface ConnectionCallback
Generic callback interface for code that operates on a JDBC Connection. Allows to execute any number of operations on a single Connection, using any type and number of Statements.
This is particularly useful for delegating to existing data access code
that expects a Connection to work on and throws SQLException. For newly
written code, it is strongly recommended to use JdbcTemplate's more specific
operations, for example a query
or updat
variant.
ObjectdoInConnection(Connection聽con)
throws SQLException,
DataAccessException
JdbcTemplate.execute
with an active JDBC
Connection. Does not need to care about activating or closing the
Connection, or handling transactions.
If called without a thread-bound JDBC transaction (initiated by DataSourceTransactionManager), the code will simply get executed on the JDBC connection with its transactional semantics. If JdbcTemplate is configured to use a JTA-aware DataSource, the JDBC Connection and thus the callback code will be transactional if a JTA transaction is active.
Allows for returning a result object created within the callback, i.e.
a domain object or a collection of domain objects. Note that there's special
support for single step actions: see JdbcTemplate.queryForObject
etc. A thrown RuntimeException is treated as application exception:
it gets propagated to the caller of the template.
con
- active JDBC Connection
null
if none
SQLException
- if thrown by a JDBC method, to be auto-converted
to a DataAccessException by a SQLExceptionTranslator
DataAccessException
- in case of custom exceptionsJdbcTemplate.queryForObject(String, Class)
,
JdbcTemplate.queryForRowSet(String)
榪欓噷鏈変釜publish鎺ュ彛瀹規槗瀵艱嚧琚鐢ㄧ殑鍗遍櫓錛孌AO鎺ュ彛濡傛灉鏄鍩熸ā鍨嬫彁鍑虹殑璇鋒眰瀹炵幇錛岄偅涔堣繖涓璁″氨浼氬緢鍐掗闄╋紝鍥犱負濡傛灉涓鏃︿綘鐨凞AO鎺?
鍙ublish浜嗭紝浣犲氨瑕佸啋鐫鍒殑姝e湪鍐檇omain
model鐨勫紑鍙戜漢鍛樹細鑰﹀悎浜庝綘鐨勬帴鍙o紝涓鏃︿綘鐨勬帴鍙ublish浜嗭紝鏀瑰姩灝遍潪甯稿洶闅句簡錛岃屼笖濡傛灉涓鏃﹀彂鐜板洜涓洪渶姹傚垎鏋愪笉澶熷鑷寸殑DAO鎺ュ彛閫昏緫鏈夐棶
棰橈紝閭d箞榪欎釜灝嗘槸闈炲父鐥涜嫤鐨勯噸鏋?淇敼榪囩▼銆?
鎵浠ュ叧閿湪浜庤鍚堢悊鐨勫叧鑱斾唬鏇垮鏉傜殑鏌ヨ銆?/p>
璇村埌鎺ュ彛錛岄『渚胯璇村婊″ぉ椋炵殑interface鐨勫弽鎰燂紝鎴戜互鍓嶅氨鏄偅鏍鋒弧澶╅鐨勶紝鍏堝湪鎰熻椋炵殑澶珮浜嗐?/p>
鎺ュ彛鍏跺疄灝辯瓑鍚屼簬浠g爜闅愯棌錛岃鍙ヤ笉濂藉惉鐨勮瘽灝辨槸浠g爜縐佹湁鍖栥?鎴戝彂甯冧竴涓帴鍙o紝鍔犱笂涓浜涙瘮杈冩竻鏅扮殑璇存槑銆?
璋冪敤鐫涓鑸兘浼氬彧鐪嬫帴鍙h鏄庢劅瑙夊悎閫傚氨鐩存帴IOC榪涙潵鐢ㄤ簡錛屼箙鑰屼箙涔嬪氨鏈夊彲鑳借璇敤鎺ュ彛鐨勫嵄闄┿?
濡傛灉娌℃湁鎺ュ彛錛屼緷璧栦唬鐮佸氨鏄枃妗g殑鍜岀浉浜掑彲浠ヤ慨鏀圭殑鍘熷垯錛岄偅涔堝ぇ瀹墮兘鍙互鐩村叆瀵規柟鐨勬浣擄紝鐪嬩竴涓嬪鏂逛唬鐮佺殑鍏蜂綋瀹炵幇閫昏緫錛屾湁闂鍙互鐩存帴鎻愬嚭鏉ユ帰璁紝榪欐牱
灝卞噺灝戜簡紼嬪簭椋庨櫓錛岃屼笖涔熺渷鍘諱簡鏉ユ潵鍥炲洖鍙嶅弽澶嶅淇敼interface 鍜屽疄鐜扮殑楹葷儲銆?
鎺ュ彛灝卞鍚屾槸涓涓洊瀛愶紝鐩栦綇浜嗗緢澶氫笢瑗匡紝鐒惰屽湪浠g爜鏋佸害鍏變韓鍜屼簰鏀圭殑鐜涓紝榪樻槸灝戠敤涓哄銆?/p>鎴戠殑瑙傜偣鏄竴涓噸瑕佺殑鎺ュ彛閮藉簲璇ユ彁渚涗竴涓娊璞$被鏉ュ疄鐜板熀鏈殑楠ㄦ灦!榪欐牱褰撲綘鐨勬帴鍙f敼鍔ㄦ椂鍙獎鍝嶄綘鐨勬娊璞$被銆傝屽瀹炵幇鎺ュ彛鐨勭戶鎵挎娊璞$被鐨勫瓙綾繪病鏈夊獎鍝嶃?
鍏跺疄鎺ュ彛鍙槸瀹氫箟mixin(娣峰悎綾誨瀷)鐨勭悊鎯抽夋嫨(java涓帴鍙f墠鍏佽澶氱戶鎵?錛?
渚嬪錛氫竴涓暀緇冩湰韜篃鏄悆鍛樸傞偅涔堟垜浠彲浠ュ畾涔変竴涓猰ixin鎺ュ彛錛岀粍鍚堜竴浜涙柊鐨勬柟娉曡瀹炵幇榪欎釜mixin鐨勬娊璞$被涓嶄粎鍏鋒湁Train鍜孭lay鐨勮亴璐o紝
榪樻湁緇勫悎浜х敓鐨勭壒鎬с?br />涓涓己鐐癸細涓嶆敮鎸佸垎甯冨紡閮ㄧ講銆傛棤娉曟妸涓涓猙ean緇檉ail over鎴栬卹e-deploy銆?
瀹為檯涓婏紝鎵鏈夎交閲忕駭ioc瀹瑰櫒鐪熺敤璧鋒潵閮芥病浠涔堢敤澶勶紝鍥犱負瀹冧滑閮芥棤娉曞簲浠樺垎甯冨紡鐨勯渶姹傘傦紙jboss mc鐨勪綔鑰呰窡鎴戣鐨勶級
鍛靛懙錛熻皝鏈夊垎甯冨紡鐨勯渶姹傦紵
spring涓嶆槸鏀寔闆嗙兢浜嗗悧錛熷垎甯冨紡灝辯敤涓嶇潃浜嗗惂
鏈変竴涓敹璐圭殑T瀛楀ご鐨勬柟妗堣兘甯姪spring瀹炵幇鍒嗗竷寮忓惂錛屾病鏈夊厤璐圭殑瀹炵幇鏄尯楹葷儲鐨勩?/p>
鎴戜滑鐨勫仛娉曟槸鍦?鍙皌omcat鏈嶅姟鍣ㄥ墠闈㈡斁涓鍙板洓灞備氦鎹㈡満涔嬬被鐨勭‖浠訛紝榪欐牱錛岀浉鍚岀殑ip鏉ヨ闂椂浼氳鎸囨淳鍒板悓涓鍙皌omcat,鍥犳涓嶉渶瑕乭ttp session鍏變韓錛屼篃鑳借揪鍒扮被浼肩殑鍒嗗竷寮忔晥鏋滐紝榪樿妭綰︿簡session鍏變韓鐨勬秷鑰椼?/p>
涓鐩磋寰梚nterface灝辨槸C++閲岀殑.h 澶存枃浠訛紝濂戒笉瀹規槗java閲屼笉闇瑕?h,鑴變簡鑻︽搗錛岀幇鍦ㄥぇ瀹跺張浜夊厛鎭愬悗鍐嶅叆鐏潙銆?
鍏跺疄濡傛灉鎶奿nterface鐢ㄤ簬鍔ㄦ乸roxy, cglib宸茬粡鎻愪緵浜嗚В鍐蟲柟妗堬紝spring鐨凮AOP,嫻嬭瘯鏃剁殑easyMock,閮芥湁cglib瀹炵幇錛屾ц兘姣斿熀浜巌nterface proxy鐨勬洿楂樹竴鐐圭偣銆?/p>
濡傛灉鏄唬鐮佽璁℃柟闈㈢殑錛屼竴瀹氳鐪嬫竻妤氬疄闄呮儏鍐靛啀鍐沖畾鏄惁鎶借薄interface銆傛垜瑙夊緱interface鍦ㄤ唬鐮佽璁℃柟闈㈡渶涓昏鐨勫簲鐢ㄥ叾瀹炴槸澶氶噸緇ф壙鍚у拰firebody璇寸殑鐩栧瓙鍔熻兘鍚с?/p>
鎵浠pringside閲屽彧鏈夊嚑涓敤鍒板閲嶇戶鎵垮拰webservice鐩栧瓙鐨勬椂鍊欐墠鐢ㄤ簡interface. 姣斿dao, appfuse絳塻ample涓轟簡婕旂ず澶氱dao鏂規鎵嶇敤interface闃匡紝鎴戜滑娌′簨鍙堜笉浼氭崲orm鏂規鐨勶紝蹇欐椿榪欎釜鎺ュ彛娌℃剰涔夊憖銆?/p>