wmframework v2.0 手册(五)ibatis改写扩展说明
2011-02-15 16:13
411 查看
1、源码修改记录
修改了sqlmap解析器:SqlMapParser.java
example:
(注:本人文章均为原创,转载请注明出处!刀光剑影20110215写于深圳。)
1.1、 sqlmap中新增执行节点statements
修改了sqlmap校验解析文件sql-map-2.dtd修改了sqlmap解析器:SqlMapParser.java
example:
1.2、 ClassKey生成使用
修改了sqlmap校验解析文件sql-map-2.dtd 新定义classkey处理类:com.ibatis.sqlmap.engine.mapping.statement. ClassKeyStatement记录当前需要生成的key的class路径 在sqlmap解析器中新增classkey节点的检查校验 com.ibatis.sqlmap.engine.builder.xml.SqlStatementParser 修改了sql执行代理器中关于classkey的取值及参数对象赋值 com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate example:<!-- classkey产生主键 --> <insert id="insertUserClassKey" parameterClass="test.A"> <![CDATA[ INSERT INTO A ( USER_ID , USER_NAME , PASSWORD , create_time ) values( #userId#, #userName#, #password#, SYSDATE ) ]]> <classKey keyProperty="userId" resultClass="String" type="pre" className="test.util.GenerateSerial" methodName="getUUID" args="1,2" paramTypes="java.lang.String,int" > </classKey> </insert>1.3、 insert中多SQL同步保存
sql表示器com.ibatis.sqlmap.engine.mapping.statement.
MappedStatement新增属性resSql,用于记录sqlmap中原始定义的sql,便于后期检查是否存在多个sql的分割标志。当前设置为分号“;”
修改sql执行方法,检查当前是否存在多个sql同时提交的情况;
修改sql执行器com.ibatis.sqlmap.engine.execution.SqlExecutor中对于参数的赋值方法
重构参数映射类
com.ibatis.sqlmap.engine.mapping.parameter.ParameterMap中设定参数的方式,即存在多个sql公用某个参数类时,需要进行键值提取,并处理先后顺序1.4、 批处理优化
修改了sql执行器com.ibatis.sqlmap.engine.execution.SqlExecutor,
添加了sql执行保存器,用于存储已经添加过在批处理桶列中的sql识别集合map。
即扩展当前检查sql执行的方法:修改说明 主要修改com.ibatis.sqlmap.engine.execution.SqlExecutor,找到方法executeUpdate,即ps.execute();语句执行之前,新增如下代码: //打印调试信息 start if (log.isDebugEnabled()) { int count = ps.getParameterMetaData().getParameterCount(); for (int i = 0; i < count; i++) { sql = sql.replaceFirst("\\?", parameters[i].getClass().getName().equals("java.lang.String") ? "'"+parameters[i].toString()+"'" : parameters[i].toString()); } log.debug("===当前执行SQL为===" + sql + "."); } //打印调试信息 end2、扩展使用说明
2.1、sqlmap中新增执行节点statements
sqlmap中新增执行节点 statements,其中可以包含多个子节点(insert、update、delete、statement均可),改功能扩展后用处不太理想
使用参考:参考以上2.2、ClassKey生成使用
classKey获取主键即为,执行某个class中的方法后生成主键序列的方式,格式定义是为:以上即表示执行test.util.GenerateSerial中getUUID,并传递参数1,2。返回字符串类型数据存放在userId中2.3、insert中多SQL同步保存
在sqlmap中扩展insert节点,可确保一次性提交同步执行多条sql,各sql之间以逗号;隔开(当前分隔符可自行定义),这有利于保证主子表同步保存时,关联外键的相同性。而且多个sql语句仅需要定义一个参数类或map等形式。这样我们就没必要再service层定义aop之类以事务管理了,也减少了很多没必要的代码编写 这这里统一可以使用selectKey、classKey产生主键。 当然对于,update、delete同样适用当前方法。 具体写法参考: <insert id="insertUserO" parameterClass="test.A"> INSERT INTO A ( USER_NAME , USER_ID , PASSWORD , create_time ) values( #userName#, #userId#, #password#, SYSDATE ); INSERT INTO SUBA ( CNAME, USER_ID , FLAG , EMP_ID )values( #cname#, #userId#, #flag#, P_GET_KEY('SEQ_USER_KEY') )
</insert>
(注:本人文章均为原创,转载请注明出处!刀光剑影20110215写于深圳。)
相关文章推荐
- wmframework v2.0 手册(五)ibatis改写扩展说明
- Ibatis手册上配置参数说明
- 轻量级分享框架源码与扩展说明
- apache的扩展配置功能说明
- 软件用户手册(软件使用说明书)模板
- window.open参数详细说明,window.showModalDialog使用手册
- PHP扩展数据库连接参数说明详解
- javascript中的prototype属性使用说明(函数功能扩展)
- Gcc 完全参考手册,参数说明,操作指南-Gcc Complete referene
- PHP - Manual手册 - Function Reference函数参考 - File System Related Extensions文件系统相关扩展 - Filesystem文件系统 - Filesystem Functions文件系统函数 -
- PHP - Manual手册 - Function Reference函数参考 - Database Extensions数据库扩展 - Vendor Specific Database Extensions特定提供商数据库扩展 - MySQL - MyS
- WinDbg 命令三部曲:(三)WinDbg SOSEX 扩展命令手册
- [原型扩展] 实用型功能函数集合 [使用说明]
- php扩展库 说明
- StarUML使用说明-指导手册
- Swiper说明及API手册说明
- StarUML使用说明-指导手册
- 总结 php导出Excel php导入Excel PhpExcel使用说明 PhpExcel使用手册
- Java 的ORM 框架 ibatis 的说明
- SVN搭建参考手册【详细说明+图片】