<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


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


    網站導航:
     
    主站蜘蛛池模板: 精品亚洲成A人无码成A在线观看| 亚洲毛片在线免费观看| 亚洲精品第一综合99久久| 国产日韩亚洲大尺度高清| 四虎影视永久免费观看| 拨牐拨牐x8免费| 91麻豆最新在线人成免费观看| 久草免费手机视频| 成人av片无码免费天天看| 美女免费视频一区二区| 亚洲成av人无码亚洲成av人| 2020久久精品亚洲热综合一本 | 亚洲人av高清无码| 亚洲卡一卡2卡三卡4卡无卡三| 国产成人精品久久亚洲高清不卡 | 天天摸天天碰成人免费视频| 97性无码区免费| 99在线精品视频观看免费| 国产成人精品一区二区三区免费| a级毛片高清免费视频就| 国产午夜无码片免费| 一级特级aaaa毛片免费观看 | 免费大片在线观看网站| 青青草国产免费久久久下载| 成人毛片18岁女人毛片免费看| 黄色免费网站网址| 青草草色A免费观看在线| 国产a视频精品免费观看| 亚洲免费视频播放| 青娱乐免费视频在线观看| 国产成人午夜精品免费视频| 91短视频在线免费观看| 美女内射毛片在线看免费人动物| 日韩中文字幕免费视频| 亚洲最大免费视频网| AV大片在线无码永久免费| 好先生在线观看免费播放 | 亚洲国产成人无码AV在线影院| 狼人大香伊蕉国产WWW亚洲| 美国毛片亚洲社区在线观看 | 男人的天堂亚洲一区二区三区 |