Java 通用存储过程ORMapping的实现 [基础篇]

原创 2007年10月01日 22:49:00

 在[设想篇]中,提到的一些注解,在本篇中进行实现

@JXDatatSet(SchemaName="CityCount",schemaFlag=SchemaFlag.IsStoredProcedure)
@JXDatatSet为一个注解,标识存储过程的名称,SchemaFlag为枚举,可能你希望他还有IsTable,IsView这样的数据,用于其它结构的枚举
实现代码:

import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface JXDatatSet
{
    String SchemaName();
    SchemaFlag schemaFlag() 
default SchemaFlag.IsTable;
}
其中使用枚举SchemaFlag代码如下
public enum SchemaFlag
{
    
/**
     * 表
     
*/

    IsTable(
0),
    
    
/**
     * 视图
     
*/

    IsView(
1),
    
    
/**
     * 存储过程
     
*/

    IsStoredProcedure(
2);


    
private int value;
    SchemaFlag(
int value)
    
{
        
this.value=value;
    }


    
public int getValue()
    
{
        
return this.value;
    }

}

@JXExectueReturn(PrivateFieldName="_ReturnValue",JavaSqlTypes="java.sql.Types.INTEGER",Flag = ReturnFlag.IsDouble)
@JXExectueReturn标识返回值,存储过程可以有多个返回值,比如RETURN前有SELECT语句,会返回结果集,同样RETURN的也会返回,而在ORACLE中会有CURSOR返回结果集
实现代码:

import java.lang.annotation.*;
/**
 * 存储过程返回结果的注解
 * 
@author suki
 * 
@since 1.0
 * jdk java5
 
*/

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.CONSTRUCTOR)
public @interface JXExectueReturn
{
    
/**
     * 保存返回结果的私有变量名
     * 
@return
     
*/

    String PrivateFieldName();
    
    
/**
     * JAVA存储过程对应的参数类型
     * 如果 Flag == ReturnFlag.IsDataSet,则此设置无效
     
*/

    String JavaSqlTypes() 
default "java.sql.Types.VARCHAR";
    
    
/**
     * 存储过程返回值的类型枚举
     * 
@return
     
*/

    ReturnFlag Flag() 
default ReturnFlag.IsNonResult;
}
其中使用枚举ReturnFlag代码如下
public enum ReturnFlag
{
    
/**
     * 返回结果集
     
*/

    IsDataSet(
0),
    
    
/**
     * 返回值
     
*/

    IsValue(
1),
    
    
/**
     * 无任何返回值
     
*/

    IsNonResult(
2),
    
    
/**
     * 即返回结果集对象,又有Return的返回值,结果集对象作为方法执行的返回结果,Return的返回值则保存在指定的get方法中
     
*/

    IsDouble(
3);
    
    
private int value;
    ReturnFlag(
int value)
    
{
        
this.value=value;
    }


    
public int getValue()
    
{
        
return this.value;
    }

}

 

@JXVar(Name="parameter1",PrivateFieldName="sIn",JavaTypeName="java.lang.Integer",JavaSqlTypes="java.sql.Types.INTEGER",Flag=VarIOFlag.IsOutput)
@JXVar是标识存储过程的参数信息
实现代码:

/**
 * <p>存储过程的参数注解</p>
 * <p>Title: JXDO数据库映射</p>
 * <p>Description: 数据库映射组件</p>
 * <p>Copyright: Copyright (c) 2007</p>
 * <p>Company: itbabysoftware</p>
 * 
@author javasuki
 * 
@version 1.0
 
*/


@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface JXVar
{
    
/**
     * 存储过程参数变量名称
     * 
@return
     
*/

    String Name();
    
    
/**
     * 参数变量Get或Set方法中对应的私有变量的名称
     * 
@return
     
*/

    String PrivateFieldName();
    
    
/**
     * 参数的值对应[Java中的类型],默认[java.lang.Object]
     * 
@return
     
*/

    String JavaTypeName() 
default "java.lang.Object";
    
    
/**
     * 源数据名称[字段类型]
     * 
@return
     
*/

    String DataTypeName() 
default "";
    
    
/**
     * JAVA存储过程对应的参数类型
     
*/

    String JavaSqlTypes() 
default "java.sql.Types.VARCHAR";
    
    
/**
     * 输入/出的参数枚举类型,默认[IsInput]
     * 
@return
     
*/

    VarIOFlag Flag() 
default VarIOFlag.IsInput;
}
其中使用枚举VarIOFlag代码如下
public enum VarIOFlag
{
    
/**
     * 输入参数
     
*/

    IsInput(
0),
    
    
/**
     * 输出参数
     
*/

    IsOutput(
1),
    
    
/**
     * 输入,输出参数
     
*/

    IsDouble(
2);
    
    
private int value;
    VarIOFlag(
int value)
    
{
        
this.value=value;
    }


    
public int getValue()
    
{
        
return this.value;
    }

}

以上这些定义的注解,将在真正实现存储的类中进行反射,取得存储执行时的必要信息

如需转载,请表明出处
anthor:zerodj@163.com/javasuki@hotmail.com

Java 通用存储过程ORMapping的实现 [真正实现篇]

在[基类实现篇]中,私有变量JxSpObject是真正的实现存储调用的一个类实现代码:import java.lang.annotation.*;import java.lang.reflect.Co...
  • javasuki
  • javasuki
  • 2007年10月01日 23:06
  • 541

Java 通用存储过程ORMapping的实现 [基类实现篇]

 在[设想篇]中,ASon是继承自A,而A这个基类,我们必须实现它,将A更名成:JxDataStoreProcedure实现代码:import java.io.*;import java.lang.r...
  • javasuki
  • javasuki
  • 2007年10月01日 22:57
  • 515

C# 通用存储过程ORMapping的实现 [基础篇]

 在[设想篇]中,提到的一些属性,在本篇中进行实现[NXDataSet("SPName",SchemaFlag.IsStoredProcedure)]NXDataSet为一个属性,标识存储过程的名称,...
  • javasuki
  • javasuki
  • 2007年10月01日 21:52
  • 722

Java 通用存储过程ORMapping的实现 [设想篇]

希望在开发时,写好一个对应的类,设置一些属性就可以直接调用存储ASon aSon = new ASon();Object objVal = aSon.execute();objVal就是存储调用的结果...
  • javasuki
  • javasuki
  • 2007年10月01日 22:36
  • 474

C# 通用存储过程ORMapping的实现 [基类实现篇]

基类实现篇在[设想篇]中,ASon是继承自A,而A这个基类,我们必须实现它,将A更名成:NxDataStoreProcedure实现代码:    public class NxDataStorePro...
  • javasuki
  • javasuki
  • 2007年10月01日 22:02
  • 584

JAVA语言程序设计(基础篇)第十版

Queue类 import java.util.Arrays; public class Queue { private int[] element; private int size=8; Queu...
  • summerdream_
  • summerdream_
  • 2017年07月04日 09:06
  • 706

C# 通用存储过程ORMapping的实现 [真正实现篇]

 在[基类实现篇]中,私有变量nxSP是真正的实现存储调用的一个类实现代码:internal class NxStoredProcedure...{        初始化类#region 初始化类  ...
  • javasuki
  • javasuki
  • 2007年10月01日 22:23
  • 711

Java 之JNI基础篇(一)

JNI,即Java Native Interface。它其实就是一套java与本地代码交互的接口或者说是一个协议。通俗的比喻,就是中国人讲中国话,日本人讲日本话,于是中国人碰到日本人,各说各话,无法交...
  • yingshukun
  • yingshukun
  • 2018年01月13日 18:51
  • 9996

java语言程序设计基础篇第十一章编程练习题

1package yongheng; import java.util.Scanner;public class Main { public static void main(String a...
  • gyhguoge01234
  • gyhguoge01234
  • 2016年09月08日 22:19
  • 2338

Java语言程序设计(基础篇)原书第十版 课后习题 第三章

// 3.11 Scanner input = new Scanner(System.in); System.out.print("Enter a month and a year:");...
  • zjjoebloggs
  • zjjoebloggs
  • 2015年10月06日 21:58
  • 7666
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java 通用存储过程ORMapping的实现 [基础篇]
举报原因:
原因补充:

(最多只允许输入30个字)