1、1 框架的目的myframework 最原始的目的是简化 java 调用存储过程的复杂度,利用它可以:1、自动返回结果集;1、自动处理 blob、clob ;2、自动将游标填充到 List-Bean;3、填充时自动进行类型转化。随着使用的推进,myframework 框架又加入了一些新的元素,如:自动分页组件;能够处理 post 和 get 的字符编码过滤器;能在 websphere 中使用的 webwork 分发器;自定义html 组件父类;权限控件父类;文件、byte、object、base64 等转化工具;sql 查询结果集直接填充和类型转化等。Myframework 还在不断发展中。2
2、 使用前提由于 myframework 使用了 spring,因此,在使用 myframework 时,应确保你的工程中含有 spring1.2.8 以上 jar 及其他必须 jar,如 jta、jarkat 相关包等。某些功能,如权限控件,可能需要 webwok 相关 jar。在使用 myframework 时,应在 spring 相关配置文件中配置 dataSource、lobHandler 。3 框架实现的功能1. java-oracle 存储过程接口2. java-sql 接口3. 字符编码过滤器4. 自动分页工具5. webwork 在 websphere 中的分发器6. 自定义 h
3、tml 组件基类7. 权限组件基类8. byte、file、object、base64 转化工具4 框架的使用介绍4.1 java-oracle 存储过程接口一般来说,java 与 oracle 存储过程交互时,应采用 SpringProUtils 类或SpringPro2MapUtils 类,两者都可以与存储过程进行交互并返回结果集 Map,不同的是,SpringProUtils 将游标类型( Cusor)返回的结果集放在 List中,而SpringPro2MapUtils 将游标类型(Cursor)返回的结果集放在 Map 中。但是 SpringProUtils、SpringPro2Map
4、Utils 对使用者做了某些限制,如存储过程中必须有 result、bz 这两个 out 类型的值。如果要更加灵活的使用本框架,则应使用DefaultSpringProcedure 类,只是使用起来稍微麻烦一些。4.1.1 SpringProUtils1使用前提必须有 dataSource;游标类型必须为 t_Cursor可选 lobHandler【用于处理 blob、clob】 ;存储过程必须有 result 和 bz 两个 out 变量,其中 result1 表示存储过程发生异常,bz则说明了异常原因;2产生 SpringProUtils 对象SpringProUtils spu = ne
5、w SpringProUtils(dataSource);或SpringProUtils spu = new SpringProUtils(dataSource,lobHandler);3SpringProUtils 主要方法1)Map exeProc2(String proc,Map map)输入参数proc 为存储过程的说明,如 proc=”p_test.getlst(pIn in varchar2,rcOut out t_Cursor,result out integer,bz out varchar2)”;map 为存储过程所需的输入参数,若没有,则可为 null。输出参数输出的结果为
6、 map,其中包含了所有的返回值。如上例的存储过程,则 map 中有三个值,一个是 result(Integer ) ,一个是 bz(String) ,一个是 rcOut(List ) ;可以通过MyMapUtils 分别取出:MyMapUtils.getInt(map,”result”);MyMapUtils.getString(map,”bz”);MyMapUtils.getListByKey(map,”rcOut”);2) Map exeProc2(String proc,Object bean)输入参数proc 为存储过程的说明,如 proc=”p_test.getlst(pIn in
7、 varchar2,rcOut out t_Cursor,result out integer,bz out varchar2)”;bean 为存储过程所需的输入参数,若没有,则可为 null,在使用此方法时,实质上是将 bean 直接转化为 map【转化规则,在字段名后加上 Pin,若不需要加 Pin,则调用 Map exeProc2Raw(String proc,Object bean)】 。输出参数输出的结果为 map,其中包含了所有的返回值。如上例的存储过程,则 map 中有三个值,一个是 result(Integer ) ,一个是 bz(String) ,一个是 rcOut(List
8、 ) ;可以通过MyMapUtils 分别取出:MyMapUtils.getInt(map,”result”);MyMapUtils.getString(map,”bz”);MyMapUtils.getListByKey(map,”rcOut”);3)Map exeProc2Raw(String proc,Object bean)用法如同 2)exeProc2(String proc,Object bean) ,只是在 bean 转为 map 是,map 的key 不加 Pin 而已。4)getkeyValueMap (String proc,Map map)使用时,存储过程必须有一个叫 rc
9、Out 的游标返回,在此游标中,需包含 key、value两个字段,这样就会组装一个 key、value 的键值对 map。5)Result exeProc(String proc,Map map)使用方法与 exeProc2 类似,只是在 result1 时,并不抛出 RuntimeException,需自己处理。此方法返回一个 Result 对象,其中包含三个成员,即 code,实质上为 result 的值;bz;result,实质上放了返回值 map。6)Result exeProc(String proc,Object bean)参照 2 和 57)Result exeProcRaw(
10、String proc,Object bean)参照 3 和 54.1.2 SpringPro2MapUtils与 SpringProUtils 的使用方法基本相同,只是游标类型的返回值放在 map 中,而不是匹配进 bean4.1.3 DefaultSpringProcedure deprecated使用此类,则是最灵活的,只是稍微复杂一点,所以一般情况下,不推荐使用。如:String parameters = “rcOut out t_Cursor,result out integer,bz out varchar2“;String procName = “testcall“;Map pa
11、rameterValues = new HashMap();DefaultSpringProcedure dsp = new DefaultSpringProcedure();dsp.setDataSource(ds);dsp.setProcName(procName);dsp.setParameters(parameters);dsp.setParameterValues(parameterValues);dsp.initialize();Map result = dsp.execute();List lst = MyMapUtils.get(result, “rcOut“);Int rcode = MyMapUtils.getInt(result,”result”);String bz = MyMapUtils.getString(result,”bz”);4.2 java-sql 接口使用此接口,可以将 sql 的返回记录集直接匹配进相关 List4.2.1 AutoResultJdbcTemplate1.使用前提:使用此类,需要有 dataSource可选的 bean 类型,若 null,则直接放入 LazyDyncBean2.主要方法List query(String sql,Object params)将结果集直接放入 List或 List5 框架的发展方向