大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 JDBC類型和值的轉換

JDBC類型和值的轉換

更新時間:2022-01-06 10:02:59 來源:動力節點 瀏覽1067次

類型和值轉換 - FieldConversion 接口

介紹

O/R 工具的一個典型問題是數據類型不匹配:域模型中的類具有布爾類型的屬性,但相應的數據庫表將此屬性存儲在BIT或 int類型的列中。

這個例子解釋了 OJB 如何允許你定義 FieldConversions來正確轉換類型和值。

此示例的源代碼包含在 OJB 源代碼分發中并駐留在測試包 org.apache.ojb.broker 中。

問題

測試類 org.apache.ojb.broker.Article包含一個布爾類型的屬性 isSelloutArticle:

public class Article implements InterfaceArticle
{
    protected int articleId;
    protected String articleName;
    // maps to db-column Auslaufartikel of type int
    protected boolean isSelloutArticle;
    ...
}

對應表使用 int 列 ( Auslaufartikel ) 來存儲此屬性: 

CREATE TABLE Artikel (
    Artikel_Nr         INT PRIMARY KEY,
    Artikelname        CHAR(60),
    Lieferanten_Nr     INT,
    Kategorie_Nr       INT,
    Liefereinheit      CHAR(30),
    Einzelpreis        DECIMAL,
    Lagerbestand       INT,
    BestellteEinheiten INT,
    MindestBestand     INT,
    Auslaufartikel     INT
  )

解決方案

OJB 允許使用預定義(或自寫)的 FieldConversions 進行適當的映射。該 FieldConversion接口聲明了兩個方法: javaToSql(...)和 sqlToJava(...) :

/** 
 * FieldConversion 聲明了一個協議,用于類型和值
 * 持久類屬性和
 RDBMS的列之間的轉換。
 * 默認實現不修改其輸入。
 * OJB 用戶可以使用預定義的實現,也可以
 * 構建他們自己的執行任意映射的轉換。
 * 映射必須在 xml 存儲庫中定義
 * 在字段描述符中。
 * 
 * @author Thomas Mahler 
 */ 
public interface FieldConversion extends Serializable 
{ 
    /** 
     * 將 Java 對象轉換為其 SQL 
     * 掛件,用于插入和更新
     */
    公共抽象對象 javaToSql(Object source) 拋出 ConversionException;
    /** 
     * 將 SQL 值轉換為 Java 對象,用于 SELECT 
     */ 
    public abstract Object sqlToJava(Object source) throws ConversionException; 
}

方法 FieldConversion.sqlToJava()是一個回調,當從 JDBC 結果集中讀入對象屬性時,它會在 OJB 代理中調用。如果 OJB 檢測到為持久類屬性聲明了 FieldConversion,則它使用 FieldConversion 來執行此屬性的編組。

對于上面提到的將 int 列映射到 boolean 屬性的問題,我們可以使用預定義的 FieldConversion Boolean2IntFieldConversion。看看代碼,看看它是如何工作的:

public class Boolean2IntFieldConversion 實現 FieldConversion 
{ 
    private static Integer I_TRUE = new Integer(1); 
    私有靜態整數 I_FALSE = 新整數(0);
    私有靜態布爾 B_TRUE = 新布爾(真);
    私有靜態布爾 B_FALSE = 新布爾(假);
    /** 
     * @see FieldConversion#javaToSql(Object) 
     */ 
    public Object javaToSql(Object source) 
    { 
        if (source instanceof Boolean) 
        { 
            if (source.equals(B_TRUE)) 
            { 
                return I_TRUE; 
            }
            其他
            {
                返回 I_FALSE;
            } 
        } 
        else 
        {
            返回源;
        } 
    } 
    /** 
     * @see FieldConversion#sqlToJava(Object) 
     */ 
    public Object sqlToJava(Object source) 
    { 
        if (source instanceof Integer) 
        { 
            if (source.equals(I_TRUE)) 
            { 
                return B_TRUE; 
            } 
            else 
            {
                返回 B_FALSE; 
            } 
        }
        其他
        {
            返回源;
        } 
    } 
}

org.apache.ojb.broker.accesslayer.conversions 包中定義了其他有用的標準轉換 :當然,可以使用轉換在java.sql.date和 java.util.date之間進行映射 。一個非常有趣的轉換是 Object2ByteArrFieldConversion 它允許在 varchar 列中存儲內聯對象!

回到我們的例子,只剩下一件事要做:我們必須告訴 OJB為文章類使用正確的 FieldConversion。這是在 XML 存儲庫文件中完成的。該字段描述符 允許定義轉換屬性聲明完全限定 FieldConversion類:

<!-- test.ojb.broker.Article 的定義 --> 
   <class-descriptor 
         class="org.apache.ojb.broker.Article" 
         proxy="dynamic" 
         table="Artikel" 
   >       ... 
      <field-描述符
         名稱="isSelloutArticle" 
         column="Auslaufartikel" 
         jdbc-type="INTEGER" 
         conversion="org.apache.ojb.broker.accesslayer.conversions.Boolean2IntFieldConversion" 
      /> 
      ... 
   </class-descriptor>

 

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 欧美一级片免费 | 色婷婷激婷婷深爱五月小蛇 | 九九精品在线 | 夜夜夜网站 | 91精品国产高清91久久久久久 | 亚洲成人精品在线 | 一 级 黄 色 片生活片 | 欧美视频一区在线 | 韩国成人毛片aaa黄 韩国高清不卡一区二区 | 天天操精品 | 99精品国产一区二区青青牛奶 | 久久综合九色婷婷97 | 中文字幕国产在线观看 | 九九热欧美| 成年人国产视频 | 超清中文乱码字幕在线观看 | 四虎成人免费影院网址 | 91精品全国免费观看老司机 | 一区二区色 | 久久久精品 | 香蕉成人 | 国产东北露脸对白 | 超级碰碰青草免费视频92 | 99久热| 四虎精品成人免费永久 | 日本不卡一区二区三区 | 久久这里只有精品免费看青草 | 国产精品永久免费10000 | 奇米影视狠狠狠天天777 | 久草免费在线视频观看 | 老子午夜影院 | 精品亚洲综合在线第一区 | 天天曰天天干天天操 | 五月情婷婷 | 精品国产综合区久久久久久 | 国产成人久久精品区一区二区 | 一本伊在人香蕉线观新在线 | 97高清国语自产拍免费 | 欧美专区在线播放 | 国产欧美日韩精品一区二区三区 | 免费国产a国产片高清不卡 免费国产阿v视频在线观看 |