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

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

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

    J2EE劍俠行

    直覺我的J2EE應(yīng)用生涯,打造我心中的一把利劍。

    常用鏈接

    統(tǒng)計(jì)

    技術(shù)鏈接

    最新評(píng)論

    2006年5月8日 #

    找到一個(gè)好用的UML建模工具-argouml

     很不錯(cuò)的一個(gè)UML建模工具-argouml
         argouml下載地址
         我一眼就看上他的原因是:生成的用例和包圖可能直接生成JAVA代碼,而且準(zhǔn)備無誤,這正是我要找的。
         我想:以后使用一些框架的話,可能由PD生成一些實(shí)體,然后Hibernate生成pojo等,加入到argouml,然后根據(jù)一個(gè)框架的特性生成一些包 和類.就等于詳細(xì)設(shè)計(jì)了吧.應(yīng)該來說是比詳細(xì)設(shè)計(jì)還實(shí)用的東西.總比哪些WORD文檔好吧.還有讓人看不懂的概要設(shè)計(jì).
        我想從技術(shù)出發(fā),這個(gè)是一條比較適用的路子.下班了.我明天將會(huì)匯報(bào)一下我使用的情況和一些范例.
        反過來又想像.這好象是一個(gè)組合的腳手架.好象ROR的零星操作步驟.應(yīng)該學(xué)習(xí).ROR畢竟是一個(gè)新生事物,JAVAEYE的推廣也需要一個(gè)時(shí)間.如果像我這樣的打工,混口飯吃的人還是專心的研究J2EE好一點(diǎn).否則明天就沒有飯吃了.

        呵呵.我的文章可被JAVAEYE收回到水貼里了,可能自己的能力不如人吧,好好學(xué)習(xí),天天向上,如果看客有什么好的工具和軟件生產(chǎn)思路,可以共同交流。

    posted @ 2007-06-20 13:29 @家軍 閱讀(1845) | 評(píng)論 (1)編輯 收藏

    ROR:習(xí)慣約定優(yōu)于配置(學(xué)習(xí)ROR的第一天)

    今天學(xué)習(xí)了一下ROR,有一些學(xué)習(xí)經(jīng)驗(yàn)東西要與大家分享。
    給ROR加一個(gè)座右銘--------狹窄心腸的日本產(chǎn)物。
    首先,不要一個(gè)一個(gè)的下載Ruby,Rails,建議使用一鍵安裝,下載地址如下:
    InstantRails-1.3-win
    版本說明:ruby 1.8.4 (2005-12-24) [i386-mswin32]
    其次,下載一個(gè)目前為止比較好的一個(gè)ROR的實(shí)踐工具:RadRails
    下載地址:radrails-0.7.1-win32
    接下來,設(shè)置一下Radrails的環(huán)境
    1)、Windows/perferences/Ruby/Installed Inteperters/ ->add ruby所在路徑:比如D:\InstantRails\ruby\bin\ruby.exe
    2)、Windows/perferences/Rails/Configuration ->Rails path:比如D:\InstantRails\ruby\bin\rails
    ->Rake path:比如D:\InstantRails\ruby\bin\rake 絕不是bat/cmd
    ->mogrel path:比如D:\InstantRails\ruby\bin\mongrel_rails絕不是bat/cmd

    有了如上的配置后,就只需要和在JAVA當(dāng)中ANT一樣使用。(成功用過APPFUSE的人就不用害怕了)

    看看日本人寫的第一步:
    1),在RadRails中創(chuàng)建一個(gè)Rails Project,怎么樣會(huì)出來一堆的東東。
    2),進(jìn)入DOS命令吧,后面的工序都是這樣的,好象買了海爾的洗衣機(jī),第一次是送貨、第二次是用戶回訪,第三次是.....
    進(jìn)入到你的項(xiàng)目處,運(yùn)行ruby script\generate controller MyTest,
    則得到的服務(wù)如下:
    exists app/controllers/
    exists app/helpers/
    create app/views/my_test
    exists test/functional/
    create app/controllers/my_test_controller.rb
    create test/functional/my_test_controller_test.rb
    create app/helpers/my_test_helper.rb
    修改一下my_test_controller.rb

    代碼
    ?????? class ?MyTestController? < ?ApplicationController
    ??????def?index
    ????????render_text?
    " Hello?world!! "
    ??????end?
    ??????end

    在瀏覽器里輸入:http://127.0.0.1:3000/my_test/
    會(huì)出現(xiàn) Hello world!!字樣,
    不過有意思的是你可以輸入:http://127.0.0.1:3000/My_test/
    http://127.0.0.1:3000/My_Test/
    http://127.0.0.1:3000/my_Test/
    都可以得到這個(gè)值,可能沒有JAVA哪樣嚴(yán)格吧。
    3)、還有對(duì)數(shù)據(jù)庫的操作,要配置一個(gè)database.yml(好象Log4j的東東)
    4)、創(chuàng)建數(shù)據(jù)庫表的時(shí)候只能夠使用復(fù)數(shù)起名,比如User就不行,只能夠起Users
    下面只要執(zhí)行幾個(gè)命令就可以使用增刪改查了。
    如下是我的操作,下班了,就不多寫了,例子能夠說明一切問題:
    代碼
    ?1?E:\RORProject\demo>ruby?script/generate?model?user
    ?2?
    ?3???????exists??app/models/
    ?4?
    ?5???????exists??test/unit/
    ?6?
    ?7???????exists??test/fixtures/
    ?8?
    ?9???????create??app/models/user.rb
    10?
    11???????create??test/unit/user_test.rb
    12?
    13???????create??test/fixtures/users.yml
    14?
    15???????exists??db/migrate
    16?
    17???????create??db/migrate/001_create_users.rb
    18?
    19?E:\RORProject\demo>ruby?script/generate?controller?user
    20?exists?app/controllers/
    21?exists?app/helpers/
    22?create?app/views/user
    23?exists?test/functional/
    24?create?app/controllers/user_controller.rb
    25?create?test/functional/user_controller_test.rb
    26?create?app/helpers/user_helper.rb
    27?

    修改user_controller.rb如下:
    代碼
    1????class?UserController?<?ApplicationController
    2????????scaffold:user
    3????end

    最后你的瀏覽器當(dāng)中輸入:http://127.0.0.1:3000/user/list,就包括了對(duì)數(shù)據(jù)庫表的四個(gè)操作.當(dāng)然你也可以自己定義四個(gè)操作的任意一種.
    最后總結(jié):
    ROR可能是敏捷開發(fā)的一個(gè)好實(shí)踐,但是我覺得他完成復(fù)雜應(yīng)用進(jìn)不會(huì)有大做為,而至于這一點(diǎn)還需要再做探究。不過現(xiàn)階段最好的需求就是能夠給用戶快速的寫出一個(gè)不完整的DEMO,這一點(diǎn)為以后打單取得主動(dòng)。

    posted @ 2006-09-29 11:47 @家軍 閱讀(1995) | 評(píng)論 (1)編輯 收藏

    三個(gè)JAVA文件完成你的MVC應(yīng)用

         摘要: 只需要你三個(gè)JAVA類和兩個(gè)配置文件,就可以完成你的MVC應(yīng)用,我們就做一個(gè)示例吧。本文以一個(gè)登錄為例。第一個(gè)JAVA文件Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->/**======================================...  閱讀全文

    posted @ 2006-09-29 11:43 @家軍 閱讀(1899) | 評(píng)論 (3)編輯 收藏

    struts標(biāo)簽,請(qǐng)你走開(系列一)

    在項(xiàng)目開發(fā)的很多時(shí)候,用戶需要更友好,更容易理解的操作界面,而為了能夠達(dá)到這種表現(xiàn)界面,struts標(biāo)簽顯得力不從心,本人經(jīng)過幾個(gè)項(xiàng)目的開發(fā)當(dāng)中 逐漸的擯棄了struts標(biāo)簽,而由JSTL來做為JSP頁面的表達(dá)者。
    struts標(biāo)簽之死穴一 不支持嵌套
    看看這種常見的需求吧。一個(gè)用戶隸屬于一個(gè)職能部門,比如
    項(xiàng)目要求 職能部門有五個(gè)(亂寫的)
    1、企劃部
    2、網(wǎng)絡(luò)集成部
    3、行政部
    4、營銷部
    5、產(chǎn)品部
    項(xiàng)目要求 一共有二個(gè)員工
    1、張三 隸屬于行政部
    2、李四 隸屬于營銷部
    而你想把張三和李四都列表出來,顯示為如下:
    姓名 部門名稱
    張三 行政部
    李四 營銷部
    而且還需要用戶的列表鏈接到修改頁面當(dāng)中(假如只修改部門)應(yīng)該如何做呢。
    在使用struts標(biāo)簽是很難做到的,除非你非常不在意內(nèi)存的使用(亂寫技術(shù)性代碼)
    看看JSTL是如何做的吧。
    從STRUTS的ACTION當(dāng)中加載兩個(gè)對(duì)象

    List?GetAllDept? = ?UserDAO.GetAllDept(); // 取得所有部門

    List?GetALLUser?
    = ?UserDAO.GetAllUser(); // 取得所有用戶

    request.setAttribute(
    " View_Dept " ,?GetAllDept);

    request.setAttribute(
    " View_User " ,?GetALLUser);
    在頁面當(dāng)中加入對(duì)JSTL的引用
    <%@?taglib?uri="http://java.sun.com/jsp/jstl/core"?prefix="c"%>

    然后寫代碼如下:
    <table>

    <tr>

    <td?align="center">

    <a?href="User.do?method=EditUser&UserId=<c:out?value='${View_User.UserId}'/>">

    <c:out?value="${View_User.UserName}"?/>?</a>

    </td>

    <td?align="center">

    <c:forEach?items="${View_Dept}"?var="View_Dept">

    <c:if?test="${View_User.Dept.DeptId==View_Dept.DeptId}">

    <c:out?value="${View_Dept.DeptName}"?/>

    </c:if>????????????????????????????

    </c:forEach>

    </td>

    </tr>

    </table>

    其中View_User.Dept.DeptId表示USER表與DEPT表的一個(gè)關(guān)系(外鍵)
    你就可以看到所顯示的列表了。

    還有如果在修改用戶時(shí),則也與上面的差不多,首先在ACTION當(dāng)中加入:

    String?ModifyUserId?=?request.getParameter("GroupUserId");

    if?(ModifyUserId?==?null?&&?ModifyUserId.equals(""))?{

    //這是出錯(cuò)處理

    request.setAttribute(
    "UserMsg",?"User.ValidateUser");

    return?mapping.findForward("Fail");

    }

    DynaValidatorForm?UserActionForm?
    =?(DynaValidatorForm)?form;

    User?user?
    =?UserDAO.GetUser(ModifyUserId);????????

    List?GetAllDept?
    =?UserDAO.GetAllDept();//取得所有部門

    request.setAttribute(
    "View_Dept",?GetAllDept);

    UserActionForm.set(
    "User",?User);
    然后頁面當(dāng)中顯示如下(部門為LISTBOX),例子當(dāng)中只顯示部門
    <html:select?property="DeptAsString">????????????

    <c:forEach?items="${View_Dept}"?var="View_Dept">????????

    <c:choose>????????????????????????

    <c:when?test="${User.Dept.DeptId==View_Dept.DeptId}">

    <option????value="<c:out?value='${View_Dept.DeptId}'?/>"selected>????

    <c:out?value="${View_Dept.DeptName}"?/>????????????

    </option>????????????????????????????

    </c:when>????????????????????????????

    <c:otherwise>????????????????????????

    <option?value="<c:out?value='${View_Dept.DeptId}'?/>">????????

    <c:out?value="${View_Dept.DeptName}"?/></option>????????

    </c:otherwise>????????????????????????

    </c:choose>

    </c:forEach>

    </html:select>

    可以看到HTML的SELECT有一個(gè)DeptAsString,你可以在FORM當(dāng)中指定一個(gè)STRING的FORM屬性。
    這樣用戶的要求就可以完成了。
    本次只說明方法,而代碼沒有經(jīng)過測(cè)試。希望大家多多觀注我的BLOG,下一次將臭罵ACTIONFROM不支持的DATE類型及解決方法。

    posted @ 2006-09-25 16:36 @家軍 閱讀(448) | 評(píng)論 (0)編輯 收藏

    用二維數(shù)組管理好你零亂的狀態(tài)、分類和其它常用選項(xiàng)

         摘要: 在大家的編碼過程當(dāng)中,有沒有遇到過這么一種情況,很多零亂的狀態(tài)、分類和其它常用選項(xiàng)常常是定義死了。但是沒有一個(gè)完整的東東來約束他,在每個(gè)模塊當(dāng)中使用相關(guān)的信息時(shí),往往重新COPY一次,或者COPY過來修改一次。如果多人協(xié)作的話,務(wù)必會(huì)讓代碼變的零亂、不好管理等。
    本次主要是把一些靜態(tài)的分類、狀態(tài)或者其它常用選項(xiàng)使用二維數(shù)組管理起來。如果你是一個(gè)使用JSTL或者STRUTS做前臺(tái)表現(xiàn)的話,你就更應(yīng)該好好關(guān)注了.......  閱讀全文

    posted @ 2006-09-05 13:31 @家軍 閱讀(1277) | 評(píng)論 (0)編輯 收藏

    如果失去工作會(huì)怎么辦?

    ??? 在工作當(dāng)中,遇到了一個(gè)不明智的上級(jí),我是劉羅鍋,但是領(lǐng)導(dǎo)不一定是乾隆。設(shè)計(jì)當(dāng)中的爭執(zhí)成為私下做對(duì)的理由,從此,我感覺到今年的財(cái)運(yùn)不佳。
    ??? 因?yàn)楣ぷ鳟?dāng)中的爭執(zhí),而讓領(lǐng)導(dǎo)失去了面子??我在郁悶當(dāng)中,為什么呀!好事反而成了壞事。
    ??? 領(lǐng)導(dǎo)的報(bào)復(fù)心理,讓我失去了績效,所以我感覺到財(cái)運(yùn)不佳。我很想跳出這個(gè)魔鬼圈,是不是能夠改善一下自己的經(jīng)濟(jì)收入呢?正在想離開這個(gè)公司......
    ??? 發(fā)現(xiàn)自己的軟肋:UML整體設(shè)計(jì)(最好有代碼生成)和XP敏捷開發(fā)。近期需要加強(qiáng)這兩方面的學(xué)習(xí),可以以權(quán)限設(shè)計(jì)為UML做為訓(xùn)練(生成代碼??),以CRM->VtigerCRM為業(yè)務(wù)主線,做一個(gè)XP開發(fā),不過VtigerCRM的表設(shè)計(jì)真是很糟糕,Indiea人呀。
    ??? 今年的公司很亂,是一個(gè)很糟糕的管理層,可能我以后離開這個(gè)公司后才感覺到領(lǐng)導(dǎo)者的“聰明才智”吧!完全在內(nèi)耗當(dāng)中生存。我已經(jīng)被領(lǐng)導(dǎo)國邊緣化,我會(huì)在灰色的區(qū)域彷徨很長的時(shí)間,或許公司另有高人吧,我已經(jīng)被領(lǐng)導(dǎo)逐漸忽視,自己發(fā)光的時(shí)間也只有一年,好象知了一樣。
    ??? “人貴有自知之明”,如果領(lǐng)導(dǎo)沒有重視,只是為了發(fā)揮自己的最低性能的話,我完全有很多的時(shí)間來學(xué)習(xí)知識(shí),我很慶幸自己和開源代碼有很大的信心,我將在以后的時(shí)間里,為開源界展示自己的能力。
    ??? 首先要把自己學(xué)習(xí)到的知識(shí)透明化,其次我會(huì)在開源中小型的CRM軟件當(dāng)中做出自己應(yīng)有的貢獻(xiàn)。

    posted @ 2006-07-24 11:37 @家軍 閱讀(466) | 評(píng)論 (1)編輯 收藏

    struts表單 vs JSTL表現(xiàn)之多條件查詢示例

    ??? struts表單主要是利用actionform來取得JSP頁面所有的request的,所有的Struts標(biāo)簽無非在取得request當(dāng)中的所有INPUT,并賦值回標(biāo)簽值的,同理,JSTL能夠在JSP表單當(dāng)中輕易的表現(xiàn)要輸出的結(jié)果。
    ??? 如果你是高手,你就知道這個(gè)標(biāo)題有誤,是的,struts表單與JSTL表現(xiàn)沒有可比性,但是如果我們要在實(shí)現(xiàn)一個(gè)多條件的查詢頁面時(shí),這個(gè)比較就比較有效了。
    ??? 我不妨比較一下利用struts表單的查詢實(shí)現(xiàn) 和 利用JSTL做為表現(xiàn)而實(shí)現(xiàn)的查詢功能有什么不同,讓讀者尋其方便。
    ??? 示例說明:
    ??? 用戶表-USER
    ??? username? 用戶名稱
    ??? loginid?? 登錄ID
    ??? sex?????? 性別
    ??? 一、利用struts表單的查詢實(shí)現(xiàn)
    ??????? 實(shí)現(xiàn)步驟:
    ??????? 創(chuàng)建多條件的序列化對(duì)象(java)->在struts.config當(dāng)中申明actionform->Action當(dāng)中實(shí)現(xiàn)->輸出結(jié)果
    ???????
    ????/**?The?value?of?the?simple?userName?property.?*/
    ????
    private?java.lang.String?userName;
    ????
    /**?The?value?of?the?simple?loginId?property.?*/
    ????
    private?java.lang.String?loginId;
    ????
    /**?The?value?of?the?simple?sex?property.?*/
    ????
    private?java.lang.String?sex;
    ????
    /**
    ?????*?Return?the?value?of?the?USER_NAME?column.
    ?????*?
    @return?java.lang.String
    ?????
    */
    ????
    public?java.lang.String?getUserName()
    ????{
    ????????
    return?this.userName;
    ????}

    ????
    /**
    ?????*?Set?the?value?of?the?USER_NAME?column.
    ?????*?
    @param?userName
    ?????
    */
    ????
    public?void?setUserName(java.lang.String?userName)
    ????{
    ????????
    this.userName?=?userName;
    ????
    /**
    ?????*?Return?the?value?of?the?LOGIN_ID?column.
    ?????*?
    @return?java.lang.String
    ?????
    */
    ????
    public?java.lang.String?getLoginId()
    ????{
    ????????
    return?this.loginId;
    ????}

    ????
    /**
    ?????*?Set?the?value?of?the?LOGIN_ID?column.
    ?????*?
    @param?loginId
    ?????
    */
    ????
    public?void?setLoginId(java.lang.String?loginId)
    ????{
    ????????
    this.loginId?=?loginId;
    ????}
    ????
    /**
    ?????*?Return?the?value?of?the?sex?column.
    ?????*?
    @return?java.lang.String
    ?????
    */
    ????
    public?java.lang.String?getSex()
    ????{
    ????????
    return?this.sex;
    ????}

    ????
    /**
    ?????*?Set?the?value?of?the?sex?column.
    ?????*?
    @param?loginId
    ?????
    */
    ????
    public?void?setSex(java.lang.String?sex)
    ????{
    ????????
    this.sex?=?sex;
    ????}
    <!-- struts_fonfig -->
    ???????
    <form-bean?name="UserActionForm"?type="org.apache.struts.validator.DynaValidatorForm">
    <form-property?name="userCondition"?type="com.antbee.searchCondition.UserFindCondition"?/>????????
    ????????
    </form-bean>
    Action當(dāng)中
    DynaValidatorForm?UserForm?=?(DynaValidatorForm)?form;
    ????????UserFindCondition?Condition?
    =?(UserFindCondition)?UserActionForm
    ????????????????.get(
    "userCondition");//?取得查詢條件
    List?user?=?userManager.find(Condition,
    ????????????????(iCurPageNo?
    -?1)?*?pageCon.PAGE_SIZE,?pageCon.PAGE_SIZE);//呵呵,加入了hibernate的分頁
    具體實(shí)現(xiàn):
    ????public?List?find(UserFindCondition?Condition,?int?begin,
    ????????????
    int?count)?{
    ????????StringBuffer?sql?
    =?new?StringBuffer("from?User?as?a?where?1=1");??????????????
    ? ? ? ?
    if?(Condition?!=?null)?{
    ????????????makeSql(sql,?shipmentFindCondition);
    ????????}
    ????????String?fsql?
    =?sql.toString();
    ????????Query?query?
    =?this.getSession().createQuery(fsql);
    ????????
    if?(Condition?!=?null)?{
    ????????????setParameter(query,?Condition);
    ????????}
    ????????query.setFirstResult(begin);
    ????????query.setMaxResults(count);
    ????????List?tt?
    =?query.list();
    ????????
    return?tt;
    ????}

    --
    ??? /**
    ??? ?* 根據(jù)條件生成一個(gè)sql語句
    ??? ?*
    ??? ?* @author 和
    ??? ?* @param sql
    ??? ?*??????????? 初始的sql語句(一般為select a from A as a where 1=1)
    ??? ?* @param condition
    ??? ?*??????????? 查詢的條件
    ??? ?* @return
    ??? ?* @version 1.0
    ??? ?*/
    private
    ?void?makeSql(StringBuffer?sql, UserFindCondition?condition)?{
    ????????
    if?(condition.getUsername()?!=?null
    ????????????????
    &&?!condition.getUsername().toString().equals(""))?{
    ????????????sql
    ????????????????????.append(
    "?and a.username like?:username");
    ????????}

    ????????
    if?(condition.getLoginid()?!=?null
    ????????????????
    &&?!condition.getLoginid(().equals(""))?{
    ????????????sql
    ????????????????????.append(
    "?and a.loginid( =?:loginid(");
    ????????}

    ????????
    if?(condition.getSex()?!=?null
    ????????????????
    &&?!condition.getSex().equals(""))?{
    ????????????sql.append(
    "?and a.sex =?:sex");
    ????????}


    ????}

    ????
    /**
    ?????*?根據(jù)條件設(shè)置query的值
    ?????*?
    ?????*?
    @author?和
    ?????*?
    @param?query
    ?????*????????????一個(gè)hibernate的Query對(duì)象
    ?????*?
    @param?condition
    ?????*????????????查詢的條件
    ?????*?
    @return
    ?????*?
    @version?1.0
    ?????
    */
    ????
    private?void?setParameter(Query?query, UserFindCondition?condition)?{

    ????????
    if?(condition.getUsername()?!=?null
    ????????????????
    &&?!condition.getUsername().equals(""))?{
    ????????????query.setString(
    "username",?"%"?+?condition.getUsername()
    ????????????????????
    +?"%");
    ????????}

    ????????
    if?(condition.getLoginid()?!=?null
    ????????????????
    &&?!condition.getLoginid().equals(""))?{
    ????????????query.setString(
    "loginid",?condition.getLoginid());
    ????????}

    ????????
    if?(condition.getSex()?!=?null
    ????????????????
    &&?!condition.getSex().equals(""))?{
    ????????????query.setString(
    "sex",?condition.getSex());
    ????????}?????

    ????}

    呵呵,笑死人了,這個(gè)方法很通用,我才在我的第二個(gè)項(xiàng)目當(dāng)中才用到,真是可惜,當(dāng)然了,使用Actionform有一個(gè)毛病就是對(duì)date類型要轉(zhuǎn)換成STRING類型來處理,這是actionform的一個(gè)死穴。還有對(duì)Actionform不能夠重置,只能夠回來從前。不知道這群設(shè)計(jì)者怎么想的,真是由于這一點(diǎn),所以我們有必要使用最原始的方法來解決問題了。使用頁面當(dāng)中的input,我們來拼request如何?
    ?? 二、利用JSTL做為表現(xiàn)而實(shí)現(xiàn)的查詢功能
    ???? 步驟:在JSP頁面布置很多的input,當(dāng)然,你可以加入value了。(省略了...)
    ?????????? 創(chuàng)建查詢條件的序列化對(duì)象(同樣user.java)
    ?????????? 在action當(dāng)中拼個(gè)condition了,做為查詢條件,后面的處理類同第一種方式。
    ?????UserSearchCondition?userSearchCondition?=?null;
    ?????userSearchCondition?
    =?makeUserSearchCondition(request);

    private UserSearchCondition?makeUserSearchCondition(HttpServletRequest?request)?throws?Exception{
    ???????
    UserSearchCondition userSearchCondition?=?new?OrderSearchCondition();
    ????????String username
    =?request.getParameter("Username");
    ????????String loginid
    =?request.getParameter("Loginid");
    ????????String sex
    =?request.getParameter("Sex");??
    ???????

    ????????????????
    ????????
    if(username!=?null?&&?!username.trim().equals("")){
    ???????????
    usernameSearchCondition.setUsername(username);
    ????????}
    ????????
    ????????
    if(loginid? !=?null?&&?!loginid.trim().equals("")){
    ??????????? userSearchCondition.set
    Loginid (loginid );
    ????????}
    ????????
    ????????
    if(sex !=?null?&&?!sex.trim().equals("")){????????
    ??????????? userSearchCondition.setSex(
    sex);
    ????????}??????

    ????????
    ????????
    return userSearchCondition;
    ????}

    ???? 以后的方法,我就不用再做舉例了吧,可以參考如上第一種方法的實(shí)現(xiàn).
    ???? 第二種方法的好處就是:在頁面上比較好控制,比如重置,又比如日期性數(shù)據(jù)等。
    ???? (所有過程當(dāng)中的代碼沒有經(jīng)過測(cè)試,只是說明這種方法而已)

    posted @ 2006-07-21 11:20 @家軍 閱讀(2711) | 評(píng)論 (1)編輯 收藏

    hibernate的延遲加載通用方法

    呵呵,在忙一個(gè)項(xiàng)目,潛水很久,現(xiàn)在冒個(gè)泡:
    (本文適用在struts+spring+hibernate3上做開發(fā)的蟲蟲們)
    類名:HibernateUtil

    package?com.antbee.j2eemodel.util;

    import?java.lang.reflect.InvocationTargetException;
    import?java.lang.reflect.Method;
    import?java.util.Collection;
    import?java.util.Iterator;

    import?org.springframework.orm.hibernate3.support.HibernateDaoSupport;

    public?class?HibernateUtil?extends?HibernateDaoSupport?{

    /**
    *?初始化POJO類
    *?
    @author?@家軍
    *?
    @param?object?POJO對(duì)象
    *?
    @param?methodName?方法名稱
    *?
    @return
    *?
    @version?1.0
    */
    public?void?initialize(Object?object,?String?methodName)?throws?SecurityException,?NoSuchMethodException,?IllegalArgumentException,?IllegalAccessException,?InvocationTargetException?{

    String[]?methodArray?
    =?methodName.split("\\.");
    Method?method?
    =?null;
    Object?initializeObject?
    =?object;

    if(methodArray.length?==?1){
    this.getHibernateTemplate().lock(initializeObject,?org.hibernate.LockMode.NONE);
    method?
    =?object.getClass().getMethod(methodArray[0],?new?Class[]?{});
    initializeObject?
    =?method.invoke(initializeObject,?new?Object[]?{});
    this.getHibernateTemplate().initialize(initializeObject);
    }
    else{
    for(int?i=0;i<methodArray.length;i++){
    method?
    =?initializeObject.getClass().getMethod(methodArray[i],?new?Class[]?{});
    initializeObject?
    =?method.invoke(initializeObject,?new?Object[]?{});
    }
    this.getHibernateTemplate().lock(initializeObject,?org.hibernate.LockMode.NONE);
    this.getHibernateTemplate().initialize(initializeObject);
    }
    }

    /**
    *?初始化POJO類
    *?
    @author?@家軍
    *?
    @param?object?POJO對(duì)象
    *?
    @param?methodName?方法名稱數(shù)組
    *?
    @return
    *?
    @version?1.0
    */
    public?void?initialize(Object?object,?String?methodName[])
    throws?SecurityException,?NoSuchMethodException,
    IllegalArgumentException,?IllegalAccessException,?InvocationTargetException?{

    for?(int?i?=?0;?i?<?methodName.length;?i++)?{
    String[]?methodArray?
    =?methodName[i].split("\\.");
    Method?method?
    =?null;
    Object?initializeObject?
    =?object;

    if(methodArray.length?==?1){
    this.getHibernateTemplate().lock(initializeObject,?org.hibernate.LockMode.NONE);
    method?
    =?object.getClass().getMethod(methodArray[0],?new?Class[]?{});
    initializeObject?
    =?method.invoke(initializeObject,?new?Object[]?{});
    this.getHibernateTemplate().initialize(initializeObject);
    }
    else{
    for(int?j=0;j<methodArray.length;j++){
    method?
    =?initializeObject.getClass().getMethod(methodArray[j],?new?Class[]?{});
    initializeObject?
    =?method.invoke(initializeObject,?new?Object[]?{});
    }
    this.getHibernateTemplate().lock(initializeObject,?org.hibernate.LockMode.NONE);
    this.getHibernateTemplate().initialize(initializeObject);
    }
    }

    }

    /**
    *?初始化POJO類
    *?
    @author?@家軍
    *?
    @param?object?POJO對(duì)象
    *?
    @return
    *?
    @version?1.0
    */
    public?void?initialize(Object?object)?throws?SecurityException,?NoSuchMethodException,?IllegalArgumentException,?IllegalAccessException,?InvocationTargetException?{
    this.getHibernateTemplate().lock(object,?org.hibernate.LockMode.NONE);
    this.getHibernateTemplate().initialize(object);
    }

    /**
    *?初始化POJO類
    *?
    @author?@家軍
    *?
    @param?collection?POJO對(duì)象集合
    *?
    @param?methodName?方法名稱數(shù)組
    *?
    @return
    *?
    @version?1.0
    */
    public?void?initialize(Collection?collection,?String?methodName[])
    throws?SecurityException,?NoSuchMethodException,
    IllegalArgumentException,?IllegalAccessException,?InvocationTargetException?{

    for(Iterator?i=collection.iterator();i.hasNext()Wink{
    Object?object?
    =?i.next();
    this.initialize(object,methodName);
    }
    }

    /**
    *?初始化POJO類
    *?
    @author?@家軍
    *?
    @param?collection?POJO對(duì)象集合
    *?
    @param?methodName?方法名稱
    *?
    @return
    *?
    @version?1.0
    */
    public?void?initialize(Collection?collection,?String?methodName)
    throws?SecurityException,?NoSuchMethodException,
    IllegalArgumentException,?IllegalAccessException,?InvocationTargetException?{

    for(Iterator?i=collection.iterator();i.hasNext()Wink{
    Object?object?
    =?i.next();
    this.initialize(object,methodName);
    }
    }
    }?

    這個(gè)方法的好外是:可以不在hbm.xml的文件當(dāng)中,指定為lazy=true這個(gè)模式,可以直接使用。使用方法如下:
    如果你使用SPRING,則需要把hibernateUtil注入其中:
    ?<bean?id="hibernateUtilTarget"?class="com.antbee.j2eemodel.util.HibernateUtil">
    <property?name="sessionFactory">
    <ref?local="mssqlSessionFactory"?/>
    </property>
    </bean>

    <bean?id="hibernateUtil"?parent="BaseTransactionProxy"?class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property?name="target">
    <ref?local="hibernateUtilTarget"?/>
    </property>
    </bean>
    <!--配置基礎(chǔ)事務(wù)-->
    <bean?id="BaseTransactionProxy"?class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"?abstract="true">
    <property?name="transactionManager">
    <ref?bean="mssqltransactionManager"?/>
    </property>
    <property?name="proxyTargetClass">
    <value>true</value>
    </property>
    <property?name="transactionAttributes">
    <props>
    <prop?key="*">PROPAGATION_REQUIRED</prop>
    </props>
    </property>
    </bean>?

    使用示例:
    如果你使用STRUTS,則需要這樣:
    List?what_ur_view?=?XXXManager.find(.);//取得你要展示的對(duì)象
    //如果這個(gè)對(duì)象當(dāng)中有延遲加載的對(duì)象(SET)時(shí),則需要如下加載就行
    this.hibernateUtil.initialize(what_ur_view,?"getTbShipmentSale");
    //其中g(shù)etTbShipmentSale是其對(duì)象(SET也可以操作)?

    在頁面顯示的時(shí)候,你就可以使用JSTL如下表述:
    <c:out?value="${what_ur_view.tbShipmentSale.goodsReceivePersonPhone}"?/>//呵呵,是不是很爽呀。?

    同樣的方法,我們也可以對(duì)一個(gè)SET在頁面進(jìn)行顯示,方法如下:
    <c:forEach?items="${what_ur_view.tbShipmentProductMappingSet}"?var="ProductMapping"?varStatus="status">
    <c:out?value="${ProductMapping.productNum}"?/>
    <c:out?value="${ProductMapping.tbOutOfWarehouse.outOfWarehouseNum}"?/>
    </c:forEach>
    //呵呵,支持多級(jí)嵌套,?

    在ACTION當(dāng)中則需要加入
    hibernateUtil.initialize(what_ur_view.getTbShipmentProductMappingSet(),
    new?String[]?{?"getTbProduct",?"getTbOutOfWarehouse",
    "getTbProductConfigure"?});?
    呵,如果你要是在HIBERNATE當(dāng)中使用,這個(gè)就太簡單了吧。

    怎么樣?呵呵呵,
    從此,我對(duì)STRUTS的標(biāo)簽深惡痛絕,而對(duì)JSTL情有獨(dú)鐘了。

    posted @ 2006-07-21 10:09 @家軍 閱讀(5595) | 評(píng)論 (2)編輯 收藏

    成功是一種病態(tài)的堅(jiān)持!

    ?? 很長的時(shí)間陷入到與同事上級(jí)的斗爭當(dāng)中,無聊死了,今天回來看看自己書簽當(dāng)中的網(wǎng)站,感覺到自己是小人了。我不應(yīng)該留戀明爭暗斗,我應(yīng)該自立自強(qiáng),永不停息。
    ?? 在年前的時(shí)候我曾經(jīng)非常看好compiere的應(yīng)用,想不到今天再看看國內(nèi)使用的形勢(shì),長三角和珠三角的廣泛應(yīng)用,還有ORACLE免費(fèi)數(shù)據(jù)庫的推出,更加印證了我錯(cuò)誤的做法。
    ?? 一個(gè)人最重要的事情就是三個(gè)字:做決定。
    ?? 一個(gè)人想要成功,尤其像我這樣不甘愿給別人打工又有很多想法的人,除非是一種病態(tài)的堅(jiān)持才能夠取得成功。
    ?? 我很討厭公司現(xiàn)行的CRM系統(tǒng),簡單的說一句就是:簡直就是一個(gè)糊人的、丑陋的MIS系統(tǒng),一點(diǎn)設(shè)計(jì)思想都沒有,一點(diǎn)產(chǎn)品理念都沒有。最重要的設(shè)計(jì)者在拼命的逃脫自己的責(zé)任,開發(fā)者在忍受莫大的痛苦,業(yè)務(wù)在每一個(gè)開發(fā)者思想里扭曲......唉,想抽出一點(diǎn)時(shí)間來都難。
    ?? 我要在以后的時(shí)候里,一則增加自己的業(yè)務(wù)能力,以compiere的應(yīng)用為主;二則要增強(qiáng)我的技術(shù)能力,以 vTigerCRM為藍(lán)本,做一個(gè)J2EE的產(chǎn)品移植。
    ?? 在今年年底以前,自己必須要做到對(duì)compiere的應(yīng)用熟練,能夠完成 vTigerCRM的J2EE實(shí)現(xiàn)。所以自己最重要要做的事是:時(shí)間安排,

    posted @ 2006-07-19 16:35 @家軍 閱讀(392) | 評(píng)論 (0)編輯 收藏

    轉(zhuǎn)摘:從一個(gè)笑話看軟件開發(fā)管理

    來自于:http://blog.csdn.net/Raptor/archive/2006/05/13/727299.aspx

    關(guān)于軟件開發(fā)的笑話有很多,下面這個(gè)是我剛在QQ群里的看到的:

    1. 程序員寫出自認(rèn)為沒有Bug的代碼。
    2. 軟件測(cè)試,發(fā)現(xiàn)了20個(gè)Bug。
    3. 程序員修改了10個(gè)Bug,并告訴測(cè)試組另外10個(gè)不是Bug。
    4. 測(cè)試組發(fā)現(xiàn)其中5個(gè)改動(dòng)根本無法工作,同時(shí)又發(fā)現(xiàn)了15個(gè)新Bug。
    5. 重復(fù)3次步驟3和步驟4。
    6. 鑒于市場方面的壓力,為了配合當(dāng)初制定的過分樂觀的發(fā)布時(shí)間表,產(chǎn)品終于上市了。
    7. 用戶發(fā)現(xiàn)了137個(gè)新Bug。
    8. 已經(jīng)領(lǐng)了項(xiàng)目獎(jiǎng)金的程序員不知跑到哪里去了。
    9. 新組建的項(xiàng)目組修正了差不多全部137個(gè)Bug,但又發(fā)現(xiàn)了456個(gè)新Bug。
    10. 最初那個(gè)程序員從斐濟(jì)給飽受拖欠工資之苦的測(cè)試組寄來了一張明信片。整個(gè)測(cè)試組集體辭職。
    11. 公司被競爭對(duì)手惡意收購。收購時(shí),軟件的最終版本包含783個(gè)Bug。
    12. 新CEO走馬上任。公司雇了一名新程序員重寫該軟件。
    13. 程序員寫出自認(rèn)為沒有Bug的代碼。

    要我說,如果真有這樣的公司,不倒閉對(duì)不起人民。

    這個(gè)笑話從程序員開始,到程序員結(jié)束,從頭到尾都在說程序員的不是。但是我要說的是,這完全是管理者的失敗,從整個(gè)過程中,看不到任何管理工作。這種管理者不但無知無能,還很無恥——將自己的失敗責(zé)任推給程序員。

    1、程序員憑什么證明他的代碼沒有BUG?有Test case嗎?有Code review嗎?這個(gè)環(huán)節(jié)管理缺失。

    2、測(cè)試發(fā)現(xiàn)BUG有進(jìn)行BUG管理嗎?有跟蹤嗎?這個(gè)環(huán)節(jié)管理缺失。

    3、憑什么證明程序員已經(jīng)把那10個(gè)BUG修改好了?另10個(gè)又為什么不是BUG?BUG的評(píng)價(jià)標(biāo)準(zhǔn)難道是程序員說了算?這個(gè)環(huán)節(jié)管理缺失。

    4、5個(gè)不能工作的BUG修改問題有沒有追究責(zé)任?增加新BUG是修改過程中不可避免的事情,但是如果有有效的單元測(cè)試機(jī)制,可以大大減少這種情況。這個(gè)環(huán)節(jié)管理缺失。

    5、迭代是正常的,但是問題處理于發(fā)散而不是收斂發(fā)展,可見沒有有效的管理調(diào)控。這個(gè)環(huán)節(jié)管理缺失。

    6、過于樂觀的時(shí)間表和不可能達(dá)到的最后期限,都表現(xiàn)出管理者的無知和無能。而在這樣的情況下強(qiáng)行推出產(chǎn)品,那就是無知者無畏了。

    7、這是對(duì)用戶的不負(fù)責(zé)任,管理者要負(fù)最大的責(zé)任。

    8、這樣的情況還能發(fā)項(xiàng)目獎(jiǎng)金,只能說管理者不是一般的愚蠢。

    9、管理工作沒有任何的改進(jìn),問題仍然處于發(fā)散迭代狀態(tài)。管理工作依然沒有到位。

    10、拖欠測(cè)試部門工資體現(xiàn)出管理者對(duì)質(zhì)量管理工作的忽視以及對(duì)人力資源管理方面一無所知。

    11、送被收購者兩個(gè)字:活該。送收購者兩個(gè)字:瞎眼。

    12、可見新管理者與原管理者半斤八兩,都沒有認(rèn)識(shí)到問題的根本所在。不過也只有這樣的管理者才會(huì)作出收購這種公司的決策。

    13、歷史的重演是必然的。

    一個(gè)正常的企業(yè)或是項(xiàng)目,其運(yùn)作必須應(yīng)該是循環(huán)向上進(jìn)行的。而保障這種運(yùn)行的工作就是管理。而管理工作的主要內(nèi)容就是控制,包括控制循環(huán)的節(jié)奏——不能太快也不能太慢,控制發(fā)展的方向——只能向上不能向下,控制運(yùn)作的穩(wěn)定——不能大起大落或時(shí)聚時(shí)散等。

    而這一切,在這個(gè)例子中都看不到。

    在 這個(gè)笑話的例子中,一切都是以開發(fā)工作在驅(qū)動(dòng),這首先就是一個(gè)方向性錯(cuò)誤,產(chǎn)品是為用戶服務(wù)的,當(dāng)然應(yīng)該是以用戶和市場作為驅(qū)動(dòng),并且結(jié)合自身的能力最終 確定工作的重點(diǎn)。這一錯(cuò)誤折射出管理者對(duì)被管理的內(nèi)容很不了解,只好任由比較了解的程序員擺布——事實(shí)上他們除了技術(shù),并不會(huì)了解更多。

    一個(gè)管理者如果對(duì)自己所管理的內(nèi)容不了解,他就不可能管理得好

    這是一件毫無疑問的事,可是國內(nèi)的軟件業(yè)似乎總是不相信這一點(diǎn)。中國軟件業(yè)中流毒最深的謊言之一就是:

    管理者只要懂管理就可以,不需要懂技術(shù)。

    其實(shí)這不過是那些無知無能無恥的管理者為了騙錢而編出來的,相信這句話的人必將付出金錢的代價(jià)。

    其 次是質(zhì)量管理。基本的質(zhì)量管理常識(shí)告訴我們,每次循環(huán)結(jié)束前,最重的工作就是總結(jié)改進(jìn)。只有這樣才能保證循環(huán)運(yùn)作是向上發(fā)展,而不是失去控制地向下發(fā)展。 也只有有效的質(zhì)量管理,才能保證迭代過程是收斂發(fā)展,并最終達(dá)到目標(biāo)。但在這個(gè)例子中,這個(gè)部分顯然是缺失的——其中雖然有測(cè)試部門,但是他們的作用僅僅 是質(zhì)量管理中的質(zhì)量檢測(cè)環(huán)節(jié),管理部分還是缺失的。

    然后是人力資源管理。軟件開發(fā)是一項(xiàng)勞動(dòng)密集型的工作,雖然這是腦力勞動(dòng),但同樣意味著人在因素在其中占有決定性的地位。而例子中未改完BUG的程 序員拿到項(xiàng)目獎(jiǎng)金,而同樣辛苦工作的測(cè)試人員卻被拖欠薪資,除了表現(xiàn)出管理者對(duì)他們的工作內(nèi)容的不了解,以及對(duì)質(zhì)量管理工作的不重視以外,還表現(xiàn)出管理者 完全不會(huì)管人,這是一種謀殺團(tuán)隊(duì)的行為——謀殺一個(gè)團(tuán)隊(duì)遠(yuǎn)比建設(shè)要容易得多。

    最后,這個(gè)失敗的管理者把他的經(jīng)歷編成這個(gè)笑話,讓大家看到他被程序員們害得多慘,把程序員妖魔化為一群騙子。但只要稍懂管理的人簡單分析一下就可以看出來,只不過是這個(gè)人的無知和無能造成了他現(xiàn)在的結(jié)果,而把責(zé)任推給別人的行為更是表現(xiàn)出他的無恥。

    作為身居高位的管理者,如果連應(yīng)該承擔(dān)的責(zé)任都要推卸,他們還能勝任什么事情呢?

    posted @ 2006-05-15 15:53 @家軍 閱讀(352) | 評(píng)論 (0)編輯 收藏

    我向百度公司進(jìn)軍!

    ???? 百度公司今天搬到我們這幢樓內(nèi),更加刺激了我去百度的念頭,因?yàn)槲蚁矚g創(chuàng)新的工作,所以我將為這一點(diǎn)而去努力奮斗。
    ???? 不是說百度公司有多好,主要是想穩(wěn)定上幾年,有一點(diǎn)積蓄了,就可以自己出來自謀生路。呵呵。看見百度技術(shù)的職位只有無線搜索技術(shù)用到了JAVA,呵呵,不會(huì)灰心,其實(shí),PYTHON或者RUR都將是以后的方向,至于PHP,我感覺百度會(huì)在不遠(yuǎn)的將來拋棄掉的。在服務(wù)器的性能和安全爭端上我只相信JAVA,百度只不過把這一種技術(shù)很快轉(zhuǎn)化成了資本,如果百度想要和GOOGLE一爭高下,實(shí)質(zhì)性的工作--技術(shù)上必須上要?jiǎng)俪鯣OOGLE一籌才行。而這一點(diǎn)只有行家才知道。

    ???? 我在北京的這幾年都是為代碼,或者就是為純粹的技術(shù)而奮斗,其實(shí)做為軟件公司,其起步主要是靠技術(shù),但是他成名或者有所富裕后,就覺得人情是一個(gè)比技術(shù)還好玩的東西時(shí),這個(gè)公司就開始有了差距,不過,這個(gè)公司就開始危險(xiǎn)了,或者是窮途末路,只能鉆到錢眼里去了。如果管理層(其實(shí)就是和有權(quán)的腐敗工廠DANG有關(guān)系的人)沒有動(dòng)靜的話,這個(gè)公司必死。這就是中國的國情。
    ? ?
    ???? 工廠DANG叫嚷的中國國情就是要隱含有權(quán)層的灰色收入,況且五千年的封建文化完全可以掩蓋這一點(diǎn)。否則,會(huì)把老祖宗也搬出來。孔子曰:孟子說:還有什么孫子談兵什么的。
    ?? ?
    ???? 從程序員的角度思索一下,如上是IF.....ELSE....的語句后,final,工廠DANG治理的天下亂七八糟。

    posted @ 2006-05-08 15:50 @家軍 閱讀(380) | 評(píng)論 (0)編輯 收藏

    我將成為一個(gè)快樂的房奴

    ??? 呵呵,我在北京買到房子了,貸款了40萬元,在簽訂了很多的不平等條約后,我成為了一個(gè)正式的房奴了,但是我很高興。
    ??? 我來自于農(nóng)村,我最原始的生活憧憬就是改變農(nóng)村這種生活方式,我在很小的時(shí)候就不喜歡農(nóng)村的黃昏,因?yàn)橄﹃栒罩移1骋惶焐眢w時(shí),我感覺到生命的絕望。于是我要改變自己,改變整個(gè)家庭的命運(yùn)。
    ??? 父親很努力,在我懂事的時(shí)候就進(jìn)入了縣城,我的心理比較的蹋實(shí)了,好象有了可以驕傲的資本,雖然家庭的收入很拮據(jù),但是我認(rèn)為自己要改變的不只是這一點(diǎn)。
    ??? 于是我只身來到北京,舉目無親的可憐像和在火車站睡覺的經(jīng)歷更加激勵(lì)了我,我要生活下去,我從上大學(xué)的時(shí)候就有一個(gè)始終不愈的信念:打不死的精神活到老。
    ??? 我對(duì)生命很是無所謂,因?yàn)槲抑雷约阂呀?jīng)在階級(jí)社會(huì)的最低層,我不害怕自己的失敗,我也不在乎錢,錢對(duì)于我來說只是肯定我的成績,肯定我的所有為是有效的。
    ??? 呵呵,我成為了北京的一員了,我的想法很簡單,當(dāng)我20年后,如果我的兒子不在北京發(fā)展了,我將買掉我的房子,回家后,我也應(yīng)該成為自由的生活者了,我已經(jīng)能夠讓我的晚年有所事事了。
    ??? 這一段時(shí)間主要在忙一個(gè)緊急的項(xiàng)目和公積金貸款,我將撰寫一個(gè)比較權(quán)威詳細(xì)的的貸款程序、
    ??? 博客將給我一個(gè)表現(xiàn)自己全新的舞臺(tái),我將為生命之花綻放。

    posted @ 2006-05-08 15:29 @家軍 閱讀(667) | 評(píng)論 (5)編輯 收藏

    主站蜘蛛池模板: 亚洲av成人无码久久精品| 国产国拍精品亚洲AV片| 亚洲AV蜜桃永久无码精品| 中文字幕亚洲不卡在线亚瑟| 久久亚洲国产欧洲精品一| 亚洲精品中文字幕麻豆| 亚洲av无码一区二区三区四区| 一级做a毛片免费视频| 亚洲精品免费观看| 女人被男人躁的女爽免费视频| 亚洲精品成人区在线观看| 亚洲嫩模在线观看| 亚洲精品第一国产综合亚AV| 国产免费久久精品99久久| 1a级毛片免费观看| 国产国产成年年人免费看片| 国产亚洲A∨片在线观看| 亚洲中文久久精品无码1 | 亚洲综合一区二区三区四区五区| 国产精品亚洲а∨天堂2021 | 无码人妻精品中文字幕免费| 国产va精品免费观看| 中文字幕在线日亚洲9| 永久免费无码日韩视频| 免费无码VA一区二区三区| 在线免费观看一区二区三区| 亚洲色精品vr一区二区三区| 亚洲一卡二卡三卡四卡无卡麻豆| 一级**爱片免费视频| 亚洲精品免费在线| 亚洲另类少妇17p| 亚洲av永久无码精品天堂久久 | 国产精品久久久久久久久久免费| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 色播在线永久免费视频| 亚洲AV无一区二区三区久久| 国产综合激情在线亚洲第一页| 91成人免费观看| 亚洲人成影院在线无码观看| 亚洲中文字幕久久精品无码2021| 中文字幕免费在线播放|