黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專(zhuān)注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) hot資訊 JDBC類(lèi)型和值的轉(zhuǎn)換

JDBC類(lèi)型和值的轉(zhuǎn)換

更新時(shí)間:2022-01-06 10:02:59 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1078次

類(lèi)型和值轉(zhuǎn)換 - FieldConversion 接口

介紹

O/R 工具的一個(gè)典型問(wèn)題是數(shù)據(jù)類(lèi)型不匹配:域模型中的類(lèi)具有布爾類(lèi)型的屬性,但相應(yīng)的數(shù)據(jù)庫(kù)表將此屬性存儲(chǔ)在BIT或 int類(lèi)型的列中。

這個(gè)例子解釋了 OJB 如何允許你定義 FieldConversions來(lái)正確轉(zhuǎn)換類(lèi)型和值。

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

問(wèn)題

測(cè)試類(lèi) org.apache.ojb.broker.Article包含一個(gè)布爾類(lèi)型的屬性 isSelloutArticle:

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

對(duì)應(yīng)表使用 int 列 ( Auslaufartikel ) 來(lái)存儲(chǔ)此屬性: 

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 允許使用預(yù)定義(或自寫(xiě))的 FieldConversions 進(jìn)行適當(dāng)?shù)挠成洹T?FieldConversion接口聲明了兩個(gè)方法: javaToSql(...)和 sqlToJava(...) :

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

方法 FieldConversion.sqlToJava()是一個(gè)回調(diào),當(dāng)從 JDBC 結(jié)果集中讀入對(duì)象屬性時(shí),它會(huì)在 OJB 代理中調(diào)用。如果 OJB 檢測(cè)到為持久類(lèi)屬性聲明了 FieldConversion,則它使用 FieldConversion 來(lái)執(zhí)行此屬性的編組。

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

public class Boolean2IntFieldConversion 實(shí)現(xiàn) FieldConversion 
{ 
    private static Integer I_TRUE = new Integer(1); 
    私有靜態(tài)整數(shù) I_FALSE = 新整數(shù)(0);
    私有靜態(tài)布爾 B_TRUE = 新布爾(真);
    私有靜態(tài)布爾 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 包中定義了其他有用的標(biāo)準(zhǔn)轉(zhuǎn)換 :當(dāng)然,可以使用轉(zhuǎn)換在java.sql.date和 java.util.date之間進(jìn)行映射 。一個(gè)非常有趣的轉(zhuǎn)換是 Object2ByteArrFieldConversion 它允許在 varchar 列中存儲(chǔ)內(nèi)聯(lián)對(duì)象!

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

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

 

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-05-15 搶座中
  • 全國(guó)校區(qū) 2025-06-05 搶座中
  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 亚洲最大福利视频网站 | 欧美日韩色视频在线观看 | 精品国产一区二区三区19 | 欧美bbbbxxxx| 理论片一级 | 日韩免费一级毛片 | 天天摸天天插 | 免费观看一级欧美在线视频 | 久久综合九色综合97婷婷女人 | 一级全黄毛片 | 免费的黄视频 | 午夜片在线 | 亚洲综合国产 | 中文字幕15页 | 国产a∨一区二区三区香蕉小说 | 日韩成人在线观看 | 亚洲国产精品一区二区久久 | 一级香蕉视频 | 国产精品久久一区一区 | 成人黄色片视频 | 成人激情开心 | 日韩免费一级a毛片在线播放一级 | 97青青草| 欧美另类丰满熟扫乱xxxxx | 国产一区系列在线观看 | 人人添人人澡人人澡人人诱 | 男女很黄很色床视频网站免 | 亚洲综合激情另类小说区 | 蜜桃97爱成人 | 一级成人a毛片免费播放 | 日韩特级毛片免费观看视频 | 巨尻在线播放 | 最近最好看2019年中文字幕 | 97国产伦子在线观看 | 日韩一级免费视频 | 久久久9999久久精品小说 | 成人黄色大全 | 羞羞视频官网 | 成人网18免费网站 | 天天爱天天色天天干 | 精品亚洲视频在线 |