<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    MDA/MDD/TDD/DDD/DDDDDDD
    posts - 536, comments - 111, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    我最近在開發一個使用Spring MVC的Web程序時遇到了一個奇怪的問題:自己寫的Spring AOP切面對Controller中的方法切點不起作用。

    后來我查了一下,Spring對自己的MVC(Controller)有特殊的攔截方法,需要在URLHandlerMapping中配置 Interceptor實現,它可以對請求進行攔截。因此直接用Spring AOP切面攔截Controller中的任何方法都是不起作用的。(具體的實現過程我不是很清楚,但是很多文章和貼子表達的意思是這樣的)

    后來,我做了一個實驗。通過IOC將一個業務對象注入Controller中,然后將AOP配置成作用于該業務對象的方法上,結果還是不起作用。 我幾乎試驗了所有的Spring AOP和AspectJ的實現和配置方法,都不起作用。后來我用同樣的類方法和同樣的配置方式,寫了一個脫離了Spring MVC的測試程序,一切正常,切面能夠起到作用。

    如果說Spring AOP對Spring MVC的Controller的方法不起作用,難道對注入到Controller的類方法也不起作用嗎???我想得到一個準確的答案,謝謝?。?! (bryantd)

    我對Spring的MVC并不是很熟,不過剛才仔細看了一下源碼,我覺得應該之所以Spring的AOP沒有對Controller應用成功的原因 是:Spring MVC在啟動的時候會根據處理器策略加載handler映射到一個map中,這個時候因為配置的原因它從容器中取到的對象是原生對象,而不是我們代理的對 象;所以不管我們的Controller做了什么操作都不會經過我們的代理,這樣AOP就失去了作用;獲取handler的方法應該是 DefaultListableBeanFactory的getBeanNamesForType方法;這是我自己在查看源碼后總結出來的,如果有什么不 對的地方大家討論下? (layer555)

    轉自http://www.javaeye.com/problems/20363

    posted @ 2010-01-27 23:53 leekiang 閱讀(3334) | 評論 (1)編輯 收藏

    1,List轉數組
    ??? List list = new ArrayList();
    ??? ??? list.add("1");
    ??? ??? list.add("2");
    ??? ??? int size = list.size();
    ??? ??? String[] arr = (String[]) list.toArray(new String[size]);
    ???? 必須帶參數new String[size],否則會報造型異常

    2, 數組轉List
    ??? String[] arr = new String[] {"1", "2"};
    ??? List list = Arrays.asList(arr);

    3,? Arrays.binarySearch(Object[] arr,Object key)
    ??? public static int binarySearch(int[]?a,int?key)使用二進制搜索算法來搜索指定的 int 型數組,以獲得指定的值。必須在進行此調用之前對數組進行排序(通過上面的 sort 方法)。如果沒有對數組進行排序,則結果是不明確的。如果數組包含多個帶有指定值的元素,則無法保證找到的是哪一個。
    ??? 也就是說必須先執行Arrays.sort,再執行Arrays.binarySearch

    4, commons-lang的ArrayUtils
    ?? 1)ArrayUtils.contains()方法可以判定數組是否存在指完元素.比Arrays.binarySearch好用(見上文)
    ???? 當然有兩個比較實用的方法ArrayUtils.lastIndexOf()和ArrayUtils.indexOf()
    ?? 3)使用ArrayUtils.reverse(arr)方法可以反轉一個數組
    ?? 4)使用ArrayUtils.toObject(arr)和ArrayUtils.toPrimitive(arr)兩個方法,
    ???? 即可互相轉換基本類型數組和對象數組
    ?? 5)ArrayUtils.toString()方法可以輸入數組內容,此方法接受任意一個數組
    ???? 作為參數并輸出其內容,輸出時所有元素位于大括號,中間逗號隔開。
    ???? 如new String[] { "1","2","3","fd","3g"}會輸出為字符串"{1,2,3,fd,3g}"
    ?? 6)// 判斷數組是否為空(null和length=0的時候都為空)
    ????????ArrayUtils.isEmpty(new?int[0]);//?true
    ????????ArrayUtils.isEmpty(new?Object[]?{?null?});//?false
    ?? 7)
    // 合并兩個數組
    ????????ArrayUtils.addAll(new?int[]?{?1,?3,?5?},?new?int[]?{?2,?4?});//?{1,3,5,2,4}
    ?? 8)// 刪除數組中某個對象(從正序開始搜索,刪除第一個) 注意只刪除一個
    ????????ArrayUtils.removeElement(new?int[]?{?1,?3,?5?},?3);//?{1,5}




    posted @ 2010-01-14 18:43 leekiang 閱讀(809) | 評論 (0)編輯 收藏

    JEP
    http://www.singularsys.com/jep/
    https://sourceforge.net/projects/jep/
    http://rabbit8.bokee.com/3936531.html
    http://suneca.com/article.asp?id=28

    http://www.javaeye.com/topic/58422里辦法多

    關于jexl
    1,jexl1.1計算分母為0的表達式時,竟然算出來的值為0,被某人說沒有邏輯https://issues.apache.org/jira/browse/JEXL-45
    2,jexl2解決了這個問題,但jexl2依賴jdk5
    https://issues.apache.org/jira/browse/JEXL-58
    handles ArithmeticException (divide by zero)
    division by zero ignored only if JexlEngine.isSilent()
    JexlEngine?jexl?=?new?JexlEngine();
    jexl.setCache(
    512);//有何用
    jexl.setLenient(false);//什么意思
    jexl.setSilent(false);

    String?calculate?
    =?"(G1?+?G2)/2";
    Expression?e?
    =jexl.createExpression(calculate);
    //?populate?the?context
    JexlContext?context?=?new?MapContext();
    context.set(
    "G1",?"3");
    context.set(
    "G2",?"5");
    Object?res?
    =?e.evaluate(context);//silent為false時evaluate方法會拋異常,為true不拋異常但res為null

    ??? ??? ???
    另外,利用oracle計算,如果分母為0會報ORA-01476: divisor is equal to zero

    posted @ 2010-01-06 00:44 leekiang 閱讀(1116) | 評論 (0)編輯 收藏

    resultSetType 的可選值有: ResultSet.TYPE_FORWARD_ONLY 、ResultSet.TYPE_SCROLL_INSENSITIVE 、ResultSet.TYPE_SCROLL_SENSITIVE
    1)
    TYPE_FORWARD_ONLY是默認值, 僅支持結果集forward ,不支持滾動,也不是 SENSITIVE的
    2)
    ResultSet.TYPE_SCROLL_INSENSITIVE,
    支持結果集backforward ,last ,first 等操作,對其它session對數據庫中數據做出的更改是不敏感的
    原因:JDBC對數據庫進行數據查詢executeQuery時,數據庫會創建查詢結果的cache和cursor,如下面sql:
    ??? select name,id from foo
    ??? 用jdbc執行上面的sql語句時,數據庫會把foo表所有記錄的name和id字段緩存到cache中,之后cache和真正的數據庫數據文件沒有任何聯系了,foo表發生的改變在查詢完成后不會自動同步到cache上去,因此TYPE_SCROLL_INSENSITIVE對選擇數據做出的更改是不敏 感,不可見。
    3)ResultSet.TYPE_SCROLL_SENSITIVE
    支持結果集backforward ,lastfirst 等操作,對其它session對數據庫中數據做出的更改是敏感的,即其他session 修改了數據庫中的數據,會反映到本結果集中
    上面的select name,id from foo語句用TYPE_SCROLL_SENSITIVE的Statement來執行,會轉化成以下的sql語句:
    ??? select rowid from foo
    ??? 數據庫這時候是把foo表所有記錄的rowid緩存到cache中,用戶代碼在fetch記錄時,再繼續做以下查詢:
    ??? select name,id from foo where rowid=?
    ??? 因此這時候發生的查詢是實時從真正的數據庫數據文件中取,因此對期間發生的數據更改是可見的,敏感的。但是這種可見性僅限于update操作,而 insert和delete同樣是不可見的。因為如果查詢發生在insert之前,insert生成的rowid并不會反應在cache中的rowid結果集上。在一個記錄的rowid已經緩存到cache中,這時候被刪除了,但一般數據庫的刪除是標記刪除,也就是說rowid對應那行記錄并沒有真正從數 據庫文件中抹去,一般是可以再次取到記錄的。

    結論:是否SENSITIVE與fetchsize沒有什么關系。是否SENSITIVE是告訴數據庫如何作查詢的緩存。fetchsize是客戶端jdbc的設置。

    另外oracle的
    fetchsize默認為10,
    stmt.setFetchSize(0)時stmt.getFetchSize()=1
    0
    stmt.setFetchSize(1)時stmt.getFetchSize()=1

    另外如果查詢的sql復雜時,我發現就算設為
    ResultSet.TYPE_SCROLL_SENSITIVE也不起作用,如
    select t.*? from test t left join testp p on t.pid=p.id where p.title like '%國%',在運行中修改title的值,發現仍然可以取到。是否可以理解為SENSITIVE只對查詢的主表起作用。

    摘自:
    http://www.javaeye.com/topic/128636
    http://www.javaeye.com/topic/560109
    http://www.javaeye.com/topic/418604

    posted @ 2010-01-03 23:57 leekiang 閱讀(976) | 評論 (0)編輯 收藏

    1,
    Hibernate動態模型(dynamic models) 一對多映射的實現
    http://scnjl.blogbus.com/logs/35361929.html

    2,
    hibernate shards

    3,
    http://www.javaeye.com/topic/142404

    4,
    http://www.infoq.com/cn/articles/hibernate-custom-fields

    posted @ 2010-01-03 17:31 leekiang 閱讀(308) | 評論 (0)編輯 收藏

    轉自http://davidwang.javaeye.com/blog/83952(此文思路相當清晰,值得一看)

    http://jakarta.apache.org/turbine/

    Turbine是一個提供了完善權限控制的堅實框架(Fulcrum子項目是其基石)。Turbine的個人用戶不多,但不少公司用戶選擇 Turbine作為框架,開發一些嚴肅的應用(我并沒有說,用其它框架開發的應用就不嚴肅^_^)。Portal開源項目JetSpeed建立在 Turbine上。

    Turbine用RunData來傳遞輸入輸出數據。如同Maverick的ControllerContext,RunData是整個 Turbine框架的數據交換中心。除了request, response等基本信息,RunData直接包括了User/ACL等權限控制相關的屬性和方法,另外還包括Action Name和Target Template Name等定位屬性。

    Module是Turbine里面除了RunData之外的又一個核心類,是Turbine框架的基本構件,Action是 Module,Screen也是Module。Turbine提供了LoginUser和LogoutUser兩個Action作為整個系統的出入口。而 其余流量的權限控制則由類似于Servlet Filter機制的Pipeline控制。

    Turbine Pipeline的編程模型和Servlet Filter一模一樣:Turbine Pipeline的Valve就相當于Servlet Filter,而ValveContext則相當于Filter Chain。還有更相近的例子,Tomcat源代碼里面也有Valve和ValueContext兩個類,不僅編程模型一樣,而且名字也一樣。



    權限控制貫穿于Turbine框架的始終。要用好Turbine,首先要通曉子項目Fulcrum 的Security部分的權限實現模型。

    Fulcrum Security的權限實體包括四個-- User, Group, Role, Permission。

    實體之間包含{Role,Permission}和{ Group, User, Role}兩組關系。

    {Role,Permission}是多對多的關系,一個Role可以具有各種Permission;{ Group, User, Role}之間是多對多的關系,一個Group可包含多個User,并可以給User分配不同的Role。

    權限模型的實現同樣采用Peer模式,Entity -> EntityPeer, Entity -> ManagerPeer。

    Entity和EntityManger代表抽象的模型概念,而EntityPeer和ManagerPeer代表具體的實現。

    用戶可以根據模型,提供不同的實現,比如,用內存結構中實現,用數據表結構實現,與Windows NT權限驗證機制結合,與OSWorkflow的權限控制模型結合,等等。其中,用數據表結構實現,又可以選擇用Torque實現,或者用 Hibernate實現。(Torque是Turbine的O/R Mapping子項目)
    例如,Falcrum.property配置文件包含如下Security相關選項:

    # -------------------------------------------------------------------

    # S E C U R I T Y S E R V I C E

    # -------------------------------------------------------------------

    services.SecurityService.user.class=org.apache.fulcrum.security.impl.db.entity.TurbineUser

    services.SecurityService.user.manager=org.apache.fulcrum.security.impl.db.DBUserManager

    services.SecurityService.secure.passwords.algorithm=SHA

    # -------------------------------------------------------------------

    # D A T A B A S E S E R V I C E

    # -------------------------------------------------------------------

    services.DatabaseService.database.newapp.driver=org.gjt.mm.mysql.Driver

    services.DatabaseService.database.newapp.url=jdbc:mysql://127.0.0.1/newapp

    services.DatabaseService.database.newapp.username=turbine

    services.DatabaseService.database.newapp.password=turbine



    這說明,權限控制實現由數據庫提供,需要根據權限模型創建如下數據表:

    TURBINE_USER,TURBINE_ROLE,TURBINE_GROUP,

    TURBINE_PERMISSION,TURBINE_ROLE_PERMISSION,

    TURBINE_USER_GROUP_ROLE

    Turbine表單處理中的中文:http://dev.csdn.net/article/70476.shtm

    使用turbine的項目:
    1)http://www.campware.org的Cream CRM
    2)http://scarab.tigris.org/
    3)Ohioedge 是采用B/S架構的開源的客戶管理系統。基于Jetspeed/Turbine技術
    ? http://www.ohioedge.com/

    參考資料:
    http://turbine.apache.org/fulcrum/fulcrum-osworkflow-example
    http://www.itpub.net/thread-306279-1-1.html
    http://dev.csdn.net/article/19/19994.shtm

    posted @ 2009-12-29 04:46 leekiang 閱讀(718) | 評論 (0)編輯 收藏

    1,關于statement,resultset和connection的問題

    statement,resultset屬于弱refrence,即如果statement關掉,resultset就會被自動釋構,弱 refrence的做法不保險,所以JDBC3.0開始明確規定了如果connection被關,所有statement都應該關,不過這取決于使用的數 據庫驅動。
    應該DBMS 執行操作后,顯式的關閉statement ,因為在connection關閉前,JDBC statement仍舊處于打開狀態,當返回resultset后,關閉statement是必要的,尤其在遇到異常的時候。
    如果不使用connection pool可以直接關閉connection,不考慮statement的關閉,使用連接池的時候,務必關閉statement,否則你的連接馬上被用光,使用statement pooling除外。

    http://www.w3china.org/blog/more.asp?name=hongrui&id=10283



    2,Software caused connection abort: socket write error

    最終找到了原因:sql寫錯了,寫成了where name='?'

    有人說原因:
    oracle數據庫連接與連接池之間沖突導至.
    oracle database把空閑一段時間的連接關閉了,而應用服務器連接池卻認為該邊接還是可用的,再次訪問時還是使用該連接,導致出現連接異常。
    方法,當然是改數據庫配置了.

    spring對oracle的clob和StoredProcedure 的處理

    經過幾天的夜戰,終于知道使用spring對oracle的存儲過程操作,程序死掉的真正原因,一旦執行存儲過程沒有任何返回值,因為 “Statement.getUpdateCount() returns 1 instead of -1”,是oracle的驅動的bug,10.1.0.2的驅動就不行,聽說10.1.0.3就沒有問題,但是10.1.0.3的jdbc驅動不能下載。大家可以使用weblogic8.1SP3帶的10.1.0.2或weblogic9beta的10.1.0.2,可以解決這個問題。不知道開發 oracle jdbc的程序員是什末人,沒畢業的大學生,還是拖欠了工資的程序員,開發水平遠不如開源數據庫的jdbc驅動的人呢,再次建議oracle驅動最好是自己命名,把文件名加上版本信息,要不會死人的。

    http://72.5.124.102/thread.jspa?messageID=1424984

    http://group.gimoo.net/review/44109

    http://azi.javaeye.com/blog/182146

    http://hi.baidu.com/happyidea/blog/item/c84b313de75add0abba16779.html



    3,Random Connection Closed Exceptions

    These can occur when one request gets a db connection from the connection pool and closes it twice.

    見http://tomcat.apache.org/tomcat-4.1-doc/jndi-datasource-examples-howto.html

    posted @ 2009-12-25 02:31 leekiang 閱讀(411) | 評論 (0)編輯 收藏

    事務直接配到DAO上
    <bean id="transactionManager"
    ?? ??? ?class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    ?? ??? ?<property name="dataSource" ref="dataSource" />
    ?? ?</bean>

    ?? ?<bean id="baseTxProxy"
    ?? ??? ?class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
    ?? ??? ?lazy-init="true" abstract="true">
    ?? ??? ?<property name="transactionManager">
    ?? ??? ??? ?<ref bean="transactionManager" />
    ?? ??? ?</property>
    ?? ??? ?<property name="transactionAttributes">
    ?? ??? ??? ?<props>
    ?? ??? ??? ??? ?<prop key="update*">PROPAGATION_REQUIRED</prop>
    ?? ??? ??? ?</props>
    ?? ??? ?</property>
    ?? ?</bean>

    ?? ?<bean id="studentDaoProxy" parent="baseTxProxy">
    ?? ??? ?<property name="target">
    ?? ??? ??? ?<ref bean="studentDao" />
    ?? ??? ?</property>
    ?? ?</bean>

    ?? ?<bean id="studentDao" class="com.dao.StudentDaoImpl">
    ?? ??? ?<property name="dataSource" ref="dataSource" />
    ?? ?</bean>
    ?? ?
    ?? ?StudentDao st = (StudentDao) context.getBean("studentDaoProxy");
    ?? ?
    ?? ?兩個bean也可以合并為
    ?? ?<bean id="studentDao" parent="baseTxProxy">
    ?? ??? ?<property name="target">
    ?? ??? ??? ?<bean class="com.dao.StudentDaoImpl">
    ?? ??? ??? ??? ?<property name="dataSource" ref="dataSource" />
    ?? ??? ??? ??? ?<property name="kpiDao" ref="kpiDao" />
    ?? ??? ??? ?</bean>
    ?? ??? ?</property>
    ?? ?</bean>
    ?? ?StudentDao st = (StudentDao) context.getBean("studentDao");
    ?? ?上述這種方式必須使用接口,為什么。
    ?? ?
    ?? ?
    ?? ?第二種同樣必須用接口。配置起來比第一種麻煩
    ?? ??? ?<bean id="transactionManager"
    ?? ??? ?class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    ?? ??? ?<property name="dataSource" ref="dataSource" />
    ?? ?</bean>

    ?? ?<bean id="transactionInterceptor"
    ?? ??? ?class="org.springframework.transaction.interceptor.TransactionInterceptor">
    ?? ??? ?<property name="transactionManager" ref="transactionManager" />
    ?? ??? ?<property name="transactionAttributes">
    ?? ??? ??? ?<props>
    ?? ??? ??? ??? ?<prop key="update*">PROPAGATION_REQUIRED</prop>
    ?? ??? ??? ?</props>
    ?? ??? ?</property>
    ?? ?</bean>
    ?? ?<bean id="studentDaoProxy"
    ?? ??? ?class="org.springframework.aop.framework.ProxyFactoryBean">
    ?? ??? ?<property name="target" ref="studentDao" />
    ?? ??? ?<property name="interceptorNames">
    ?? ??? ??? ?<list>
    ?? ??? ??? ??? ?<value>transactionInterceptor</value>
    ?? ??? ??? ?</list>
    ?? ??? ?</property>
    ?? ?</bean>
    ?? ?
    ?? ?<bean id="studentDao" class="com.dao.StudentDaoImpl">
    ?? ??? ?<property name="dataSource" ref="dataSource" />
    ?? ?</bean>
    ?? ?ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
    ?? ?StudentDao st = (StudentDao) context.getBean("studentDaoProxy");
    ?? ?
    ?? ?如果使用的都是接口,那么就不需要用cglib-nodep-2.1_3.jar
    ?? ?如果service調dao沒有用到接口,那么必須用cglib-nodep-2.1_3.jar


    事務策略: 了解事務陷阱 http://www.ibm.com/developerworks/cn/java/j-ts1.html 事務策略: 高并發策略 http://www.ibm.com/developerworks/cn/java/j-ts5/index.html 這是一個系列.

    http://beet.sourceforge.net
    Beet records user behavior and performance data for your Spring-based Java application.? It can thus help you to analyze usage patterns and research production performance issues.

    posted @ 2009-12-24 22:04 leekiang 閱讀(296) | 評論 (0)編輯 收藏

    SQL標準允許基于一個帶參數列表的表達式進行查詢。一個典型的例子可能像這樣:"select * from T_ACTOR where id in (1, 2, 3)"。 不過這種參數列表的方式并不能直接被JDBC標準所支持 - 因為并不存在這種聲明一個列表參數作為占位符的方式。 你不得不為此寫多個占位符來表示多個參數,或者當你知道占位符的數量時,你可以動態構建SQL字符串。 NamedParameterJdbcTemplate和SimpleJdbcTemplate中所提供的命名參數的特性,采用的是后面一種做法。 當你傳入參數時,你需要傳入一個java.util.List類型,支持基本類型。而這個list將會在SQL執行時替換占位符并傳入參數。
    在使用IN語句時,當你傳入大批量的值時要小心,JDBC標準并不確保超過100個元素在IN語句中。 有不少數據庫可以超出這個值的限制,但是不同的數據庫會有不同的數量限制,比如Oracle的限制數量是1000個。
    除了基本類型之外,你還可以創建一個java.util.List的對象數組,這可以讓你支持在IN表達式中編寫多重表達式,例如"select * from T_ACTOR where (id, last_name) in ((1, 'Johnson'), (2, 'Harrop'))". 當然,這樣做的前提是數據庫底層的語法支持。

    http://www.javaeye.com/problems/6124
    select count(*) num from lottery_term where term_issuenum in (?) and term_lotteryid = ?
    改成getJdbcTemplate().queryForInt(sql,new Object[]{new String[]{"2008326","2008325","2008324"},103});
    List list=new ArrayList();
    list.add("****");
    getJdbcTemplate().queryForInt(sql,new Object[]{list,103});

    select count(*) from info_document where category_id in (:category_id_list);
    Map<String,Object> parm = new HashMap<String,Object>();
    parm.put("category_id_list", idList);


    ? public List getAllStu() {

    ?????? 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和update方法之間的區別,update方法返回的是受影響的記錄數目的 一個計數,并且如果傳入參數的話,使用的是java.sql.PreparedStatement,而execute方法總是使用 java.sql.Statement,不接受參數,而且他不返回受影響記錄的計數,更適合于創建和丟棄表的語句,而update方法更適合于插入,更新 和刪除操作,這也是我們在使用時需要注意的。



    Connection conn=DataSourceUtils.getConnection(getJdbcTempldate().getDataSource());

    conn=getJdbcTemplate().getNativeJdbcExtractor().getNativeConnection(conn);

    OracleConnection oconn=(OracleConnection)conn;

    通過DataSourceUtils獲取當前線程綁定的數據連接,為了使用線程上下文相關的事務,這樣寫是正確的寫法,如果直接從DataSource獲取連接,得到的是和當前線程上下文無關的新的數據庫連接實例。

    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時,提供了更好的支持。

    -----------------------

    上面這句話如何理解?


    后在http://javazoo.bokee.com/viewdiary.15850865.html找到原因了

    今天在調試程序的時候,在后臺業務邏輯類中利用JdbcTemplate進行數據同步操作時,發現當
    執行jdbcTemplate.update(帶?的SQL語句,new Object[]{tmp.getName( ),tmp.getNo( ),tmp.getSpeciality( ),tmp.getMounterofficer( ),tmp.getDesigner( ),tmp.getProductivity( ),tmp.getState( ))
    這種操作時,如果后面參數中有值為null時,后臺會報異常,細想下也是,如果是null,那就要執行jdbc的setNull(Spring底層還是用JDBC做的)方法了,但是setNull方法要知道具體的數據庫字段的類型.如setNull(1,Types.VARCHAR).而在上面的方法沒有體現.
    終于體會到update方法中第三個參數new int[]的作用了.!
    spring還是很偉大的.


    如果字段名和屬性名是嚴格對應的,那么就可以不用自己寫RowMapper了,使用BeanPropertyRowMapper:

    getJdbcTemplate().query(sql,?new?BeanPropertyRowMapper(User.class));??

    類的屬性字段名稱要數據庫中的字段名稱一樣或者數據庫字段名為s_id類的名稱為SId,
    如果你沒有遵守這個規范則可以在select語句后面給數據庫字段名取別名


    //綁定參數時,日期類型的寫法,未經過驗證

    ??? 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的AbstractRoutingDataSource,可以多態切換數據庫?


    事務抽象層http://blog.csdn.net/congqian1120/archive/2008/01/16/2046311.aspx




    http://www.oracle.com/technology/global/cn/pub/articles/marx_spring.html

    posted @ 2009-12-23 17:29 leekiang 閱讀(804) | 評論 (0)編輯 收藏

    jdk1.4下使用spring2.5時報上述這個錯誤,把xerces-2.6.2.jar放進去就好了。奇怪的是spring自帶的jar包里沒有xerces.jar
    jfreechart里的gnujaxp.jar
    cewolf里的crimson-1.1.3.jar
    j2ee自帶的xml-apis.jar
    xercesImpl.jar
    這些jar與Your JAXP provider有何關系

    posted @ 2009-12-21 10:41 leekiang 閱讀(2830) | 評論 (0)編輯 收藏

    僅列出標題
    共54頁: First 上一頁 18 19 20 21 22 23 24 25 26 下一頁 Last 
    主站蜘蛛池模板: 国产aⅴ无码专区亚洲av| 免费成人在线电影| 亚洲男女性高爱潮网站| 亚洲第一区在线观看| 免费a级毛片无码a∨蜜芽试看| 久久久精品午夜免费不卡| 一级做性色a爰片久久毛片免费| 亚洲狠狠久久综合一区77777| 日韩免费一区二区三区| 国产黄在线观看免费观看不卡| 亚洲免费观看视频| 最近高清中文字幕无吗免费看| 很黄很污的网站免费| a级毛片免费网站| 日韩一级片免费观看| 国产亚洲精品国产福利在线观看| 亚洲中文字幕乱码一区| 亚洲国产精品张柏芝在线观看| 国产一级理论免费版| 午夜免费福利网站| 人妻视频一区二区三区免费| 亚洲国产精品免费观看| 国产成人精品免费视| 日本高清在线免费| 成人免费大片免费观看网站| 99久久久国产精品免费无卡顿| 最近中文字幕国语免费完整 | 成年男女免费视频网站| 国产在线a免费观看| 性xxxxx免费视频播放| 在线观看特色大片免费视频| 91免费精品国自产拍在线不卡| 青青在线久青草免费观看| 曰曰鲁夜夜免费播放视频| 一二三四免费观看在线视频中文版| 中文字幕无码成人免费视频| 女人18特级一级毛片免费视频| 日本成人免费在线| 伊在人亚洲香蕉精品区麻豆| 亚洲中文字幕无码一区二区三区| 午夜网站免费版在线观看|