您的位置:首页 > 移动开发

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

2007-10-01 22:49 429 查看
在[设想篇]中,提到的一些注解,在本篇中进行实现

@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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: