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

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

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

    Tang Anping

    Love Java

    KodoJDO基礎篇

    花了幾天時間來搞Kodo JDO,網上資料不是很全,抽時間整理了一下。
    可以到網上下載工具,下載后會發一個LicenseKey到你的郵箱(www.solarmetric.com)。
    下載后就可以開始了:

    先新建一個類:
    有人說持久類必須有一個私有的構造函數,我試了一下,不然;都可以。
    Student.java

    package ?com;

    import ?java.io.Serializable;

    public ? class ?Student? implements ?Serializable? {
    ????
    private ?String?name;
    ????
    private ? int ?age;
    ????
    private ?Student()? {
    ????????
    ????}

    ????
    public ?Student(String?name,? int ?age)? {
    ????????
    this .name? = ?name;
    ????????
    this .age? = ?age;
    ????}

    ????
    /**
    ?????*?
    @return ?the?age
    ?????
    */

    ????
    public ? int ?getAge()? {
    ????????
    return ?age;
    ????}

    ????
    /**
    ?????*?
    @param ?age?the?age?to?set
    ?????
    */

    ????
    public ? void ?setAge( int ?age)? {
    ????????
    this .age? = ?age;
    ????}

    ????
    /**
    ?????*?
    @return ?the?name
    ?????
    */

    ????
    public ?String?getName()? {
    ????????
    return ?name;
    ????}

    ????
    /**
    ?????*?
    @param ?name?the?name?to?set
    ?????
    */

    ????
    public ? void ?setName(String?name)? {
    ????????
    this .name? = ?name;
    ????}

    ????
    }

    然后通過工具Kodo Mapping Workbench產生package.jdo和package.mapping文件。
    為了避免每次都實現javax.jdo.spi.PersistenceCapable類,Kodo提供了Enhance(增強)類的class文件的工具,
    類增強之后class文件會變大。工具的具體操作自己看一下文檔吧,不具體說了。

    也可以用bin目錄下的bat文件進行編譯,麻煩一點。
    package.jdo

    <? xml?version = " 1.0 " ?encoding = " UTF-8 " ?>

    < jdo >
    ????
    < package ?name = " com " >
    ????????
    < class ?name = " Student " />
    ????
    </ package >
    </ jdo >

    package.mapping

    <? xml?version = " 1.0 " ?encoding = " UTF-8 " ?>

    < mapping >
    ????
    < package ?name = " com " >
    ????????
    < class ?name = " Student " >
    ????????????
    < jdbc - class - map?type = " base " ?pk - column = " JDOID " ?table = " STUDENT " />
    ????????????
    < field?name = " age " >
    ????????????????
    < jdbc - field - map?type = " value " ?column = " AGE " />
    ????????????
    </ field >
    ????????????
    < field?name = " name " >
    ????????????????
    < jdbc - field - map?type = " value " ?column = " NAME " />
    ????????????
    </ field >
    ????????
    </ class >
    ????
    </ package >
    </ mapping >

    和類文件在同一個目錄。在src目錄下還有一個配置文件,jar文件就不啰嗦了:
    kodo.properties

    kodo.LicenseKey:?2C61 - EF63 - F131 - 32B2 - 3200
    kodo.FetchGroups:?
    kodo.WriteLockLevel:?write
    kodo.RestoreMutableValues:?
    false
    kodo.CopyObjectIds:?
    false
    kodo.PersistentClasses:?com.Student
    kodo.RetryClassRegistration:?
    false
    javax.jdo.PersistenceManagerFactoryClass:?kodo.jdbc.runtime.JDBCPersistenceManagerFactory
    javax.jdo.option.NontransactionalWrite:?
    false
    javax.jdo.option.Multithreaded:?
    false
    javax.jdo.option.ConnectionUserName:?root
    javax.jdo.option.ConnectionPassword:?admin
    javax.jdo.option.ConnectionURL:?jdbc\:mysql\:
    // localhost:3306/bikestore
    javax.jdo.option.ConnectionDriverName:?com.mysql.jdbc.Driver
    kodo.jdbc.Schemas:?
    kodo.jdbc.ForeignKeyConstraints:?
    false

    還要注意一下版本,我使用的是kodo-jdo-3.4.1的,因為增強類的編譯會不一致。
    映射這一塊搞定了。
    下面開始寫一個測試類:
    活學活用,上篇以介紹,引入log4j.properties。
    StudentTest.java

    package ?com.test;

    import ?java.io.FileInputStream;
    import ?java.io.FileNotFoundException;
    import ?java.io.IOException;
    import ?java.io.InputStream;
    import ?java.util.List;
    import ?java.util.Properties;

    import ?javax.jdo.JDOHelper;
    import ?javax.jdo.PersistenceManager;
    import ?javax.jdo.PersistenceManagerFactory;
    import ?javax.jdo.Query;
    import ?javax.jdo.Transaction;

    import ?org.apache.log4j.Logger;

    import ?com.Student;

    import ?junit.framework.TestCase;

    public ? class ?StudentTest? extends ?TestCase? {
    private ? static ? final ?Logger?log? = ?Logger.getLogger(StudentTest. class );
    ????
    ????
    private ?PersistenceManagerFactory?factory;
    ????
    private ?PersistenceManager?manager;
    ????
    ????
    /**
    ?????*?初始化持久化工廠類
    ?????
    */

    ????
    public ? void ?setUp()? {
    ????????
    try ? {
    ????????????InputStream?in?
    = ? new ?FileInputStream( " src/kodo.properties " );
    ????????????
    // ????????????factory?=?JDOHelper.getPersistenceManagerFactory(in);
    ????????????
    // ?或者
    ????????????Properties?props? = ? new ?Properties();
    ????????????props.load(in);
    ????????????in.close();
    ????????????factory?
    = ?JDOHelper.getPersistenceManagerFactory(props);
    ????????????
    ????????????manager?
    = ?factory.getPersistenceManager();
    ????????????log.info(factory?
    + ? " ???? " ? + ?manager);
    ????????}
    ? catch ?(FileNotFoundException?e)? {
    ????????????e.printStackTrace();
    ????????}
    ? catch ?(IOException?e)? {
    ????????????e.printStackTrace();
    ????????}

    ????}

    ????
    /**
    ?????*?釋放資源
    ?????
    */

    ????
    public ? void ?tearDown()? {
    ????????manager?
    = ? null ;
    ????????factory?
    = ? null ;
    ????????
    ????}


    ????
    public ? void ?testSaveUser()? {
    ????????Student?student?
    = ? new ?Student( " tang " ,? 23 );
    ????????
    try ? {
    ????????????Transaction?tran?
    = ?manager.currentTransaction();
    ????????????tran.begin();
    ????????????manager.makePersistent(student);
    ????????????tran.commit();
    ????????????log.info(
    " 保存成功 " );
    ????????}
    ? catch ?(Exception?e)? {
    ????????????e.printStackTrace();
    ????????????log.error(
    " 保存異常 " ,?e);
    ????????}

    ????}

    ????
    public ? void ?testGetStudent()? {
    ????????
    try ? {
    ????????????
    // ?主鍵ID不能作為條件,否則會報異常
    ????????????Query?query? = ?(Query)manager.newQuery(Student. class ,? " name?==?'ddd' " );
    ????????????List?list?
    = ?(List)query.execute();
    ????????????Student?stu?
    = ?(Student)list.get( 0 );
    ????????????log.info(
    "" ? + ?stu.getAge());
    ????????????log.info(
    " 獲取成功 " );
    ????????}
    ? catch ?(Exception?e)? {
    ????????????e.printStackTrace();
    ????????????log.error(
    " 獲取異常 " ,?e);
    ????????}

    ????}

    ????
    public ? void ?testGetStudents()? {
    ????????
    try ? {
    ????????????Query?query?
    = ?(Query)manager.newQuery(Student. class );
    ????????????List?list?
    = ?(List)query.execute();
    ????????????log.info(
    "" ? + ?list.size());
    ????????????log.info(
    " 獲取所有成功 " );
    ????????}
    ? catch ?(Exception?e)? {
    ????????????e.printStackTrace();
    ????????????log.error(
    " 獲取所有異常 " ,?e);
    ????????}

    ????}

    ????
    public ? void ?testDeleteStudents()? {
    ????????
    try ? {
    ????????????
    // ?主鍵ID不能作為條件,否則會報異常,可以批量刪除
    ????????????Query?query? = ?(Query)manager.newQuery(Student. class ,? " name?==?'tang' " );
    ????????????List?list?
    = ?(List)query.execute();
    ????????????log.info(
    "" ? + ?list.size());
    ????????????Transaction?tran?
    = ?manager.currentTransaction();
    ????????????tran.begin();
    ????????????manager.deletePersistentAll(list);
    ????????????tran.commit();
    ????????????log.info(
    " 刪除一批成功 " );
    ????????}
    ? catch ?(Exception?e)? {
    ????????????e.printStackTrace();
    ????????????log.error(
    " 刪除一批異常 " ,?e);
    ????????}

    ????}


    ????
    public ? void ?testUpdateStudent()? {
    ????????
    try ? {
    ????????????Transaction?tran?
    = ?manager.currentTransaction();
    ????????????tran.begin();
    ????????????Query?query?
    = ?(Query)manager.newQuery(Student. class );
    ????????????List?list?
    = ?(List)query.execute();
    ????????????Student?Student?
    = ?(Student)list.get( 0 );
    ????????????Student.setName(
    " ddddddd " );
    ????????????Student.setAge(
    26 );
    ????????????
    // ?javax.jdo.option.NontransactionalWrite:?true
    ????????????
    // ?設置為true,不會報異常,但是不會更新數據庫
    ????????????
    // ?事務從這里開始不行,會報在事務外的異常
    // ????????????tran.begin();
    ????????????manager.makePersistent(Student);
    ????????????tran.commit();
    ????????????
    ????????????log.info(
    "" ? + ?list.size());
    ????????????log.info(
    " 更新成功 " );
    ????????}
    ? catch ?(Exception?e)? {
    ????????????e.printStackTrace();
    ????????????log.error(
    " 更新異常 " ,?e);
    ????????}

    ????}

    }


    數據庫腳本:
    create?database?bikestore

    use?bikestore

    create?table?Student?(jdoid?
    int?primary?key,
    name?varchar(
    20),?age?int);

    測試的是用Mysql5.0。

    完成了,出現了幾個問題,manager.getObjectById("jdoid", false);出錯,還有不能根據主鍵更新,
    有誰知道,請告訴我,不勝感激!

    posted on 2006-11-24 18:02 Tang Anping 閱讀(404) 評論(0)  編輯  收藏 所屬分類: Kodo JDO


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产免费人成视频在线播放播| 亚洲AV无码乱码在线观看| 精品国产福利尤物免费| 亚洲精品无码久久久久YW| 内射少妇36P亚洲区| www.亚洲色图.com| 岛国片在线免费观看| 0588影视手机免费看片| 国产午夜精品久久久久免费视| 国产偷国产偷亚洲高清人| 亚洲人成欧美中文字幕| 亚洲人成电影院在线观看| 久久青青草原亚洲AV无码麻豆| 中文字幕亚洲专区| 成人伊人亚洲人综合网站222| 在线播放免费人成视频在线观看| 2019中文字幕免费电影在线播放| 青青草原1769久久免费播放| ssswww日本免费网站片| 色婷婷精品免费视频| 亚洲AV成人片无码网站| 亚洲国产成人精品无码区花野真一| 亚洲AV一二三区成人影片| 亚洲精品影院久久久久久| 91亚洲va在线天线va天堂va国产 | 久久青青草原亚洲av无码app | 久草免费福利在线| 日日摸夜夜添夜夜免费视频| 国产亚洲情侣久久精品| 亚洲av成人一区二区三区在线播放| 亚洲制服丝袜一区二区三区| 久久久亚洲AV波多野结衣| 久久亚洲精精品中文字幕| 亚洲综合在线成人一区| 亚洲国产成a人v在线| 亚洲日韩国产欧美一区二区三区| 亚洲精品无码mⅴ在线观看| 亚洲国产成人久久精品软件| 最新亚洲人成无码网站| 人体大胆做受免费视频| 最近国语视频在线观看免费播放|