mybatis中parsing包的用法
发表于:2024-11-25 作者:千家信息网编辑
千家信息网最后更新 2024年11月25日,这篇文章主要介绍"mybatis中parsing包的用法",在日常操作中,相信很多人在mybatis中parsing包的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
千家信息网最后更新 2024年11月25日mybatis中parsing包的用法
这篇文章主要介绍"mybatis中parsing包的用法",在日常操作中,相信很多人在mybatis中parsing包的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"mybatis中parsing包的用法"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
private final String openToken; private final String closeToken; private final TokenHandler handler; public GenericTokenParser(String openToken, String closeToken, TokenHandler tokenHandler) { this.openToken = openToken; this.closeToken = closeToken; this.handler = tokenHandler; } public String parse(String text) { StringBuilder builder = new StringBuilder(); //如果传入的字符串有值 if (text != null && text.length() > 0) { //将字符串转为字符数组 char[] src = text.toCharArray(); int offset = 0; //判断openToken在text中的位置,注意indexOf函数的返回值-1表示不存在,0表示在在开头的位置 int start = text.indexOf(openToken, offset); // #{favouriteSection,jdbcType=VARCHAR} // 这里是循环解析参数,参考GenericTokenParserTest,比如可以解析${first_name} ${initial} ${last_name} reporting.这样的字符串,里面有3个 ${} // 验证start是否大于-1(亦即给定参数text中存在openToken子串),如果大于-1(开启循环),验证在给定text的start位置的前一位字符是否为"\"(反斜扛),如果是反斜杠,说明获取到的参数被屏蔽了,我们需要去除这个反斜杠,并重新定位offset。当然如果不是反斜扛,说明参数正常 while (start > -1) { // 判断一下 ${ 前面是否是反斜杠,这个逻辑在老版的mybatis中(如3.1.0)是没有的 if (start > 0 && src[start - 1] == '\\') { // the variable is escaped. remove the backslash. // 新版已经没有调用substring了,改为调用如下的offset方式,提高了效率 //如果text中在openToken前存在转义符就将转义符去掉。如果openToken前存在转义符,start的值必然大于0,最小也为1 //因为此时openToken是不需要进行处理的,所以也不需要处理endToken。接着查找下一个openToken builder.append(src, offset, start - offset - 1).append(openToken); offset = start + openToken.length(); //重设offset } else { // 获取第一个匹配子串的末位位置end,如果end为-1,表示不存在closeToken,则获取末位end之前的所有串,并重新定位offset为src数组长度,如果end值不是-1,说明text字符串中存在结束标记closeToken int end = text.indexOf(closeToken, start); //如果不存在openToken,则直接将offset位置后的字符添加到builder中 if (end == -1) { builder.append(src, offset, src.length - offset); offset = src.length; //重设offset } else { // 获取开始标记之前的子串,并重新定位偏移量offset(start+开始标记的长度=具体参数开始位置),获取这个参数串为content,然后调用TokenHandler的handleToken()方法对获取到的参数串进行处理(比如替换参数之类),然后将处理后的串添加到之前的子串之上,再次重新定位偏移量offset为结束标记的下一位(end+closeToken的长度=end+1) builder.append(src, offset, start - offset); offset = start + openToken.length(); //重设offset String content = new String(src, offset, end - offset); // 得到一对大括号里的字符串后,调用handler.handleToken,比如替换变量这种功能 builder.append(handler.handleToken(content)); offset = end + closeToken.length(); //重设offset } } // 获取text中下一步openToken的开始位置,重置start,执行循环体第三步到第六步,处理每一个参数,直到最后一个参数,循环结束 start = text.indexOf(openToken, offset); } // 验证偏移量offset与src数组的长度,如果offset小,说明原串还有部分未添加到新串之上,将末尾剩余部分添加到新串,然后将新串返回,如果offset不小于src的数组长度,则直接返回新串 if (offset < src.length) { builder.append(src, offset, src.length - offset); } } return builder.toString(); }
到此,关于"mybatis中parsing包的用法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
参数
字符
位置
字符串
长度
处理
数组
标记
学习
定位
循环
斜杠
转义
偏移
验证
方法
更多
末位
部分
帮助
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
台州市顺一网络技术
python将图片存入到数据库
e版管理端服务器
大话2马上4上的服务器2021
崇明区数据链网络技术内容
网络安全保卫大队警员好不好
数据库疑难杂症
广州软件开发企业
用别人的服务器和域名有什么坏处
软件开发哪里找工作好
局 网络安全 管理
特斯拉服务器如何与车通讯
信息化软件开发程序
数据库中的存储引擎是什么
买棋牌游戏软件开发
软件开发怎么使用中间件
深圳 网络技术
樱桃服务器
企业对网络安全的误区
网络安全产品研发
请重视网络安全英语怎么说
组织学习网络安全
云端服务器运行安卓模拟器
护苗网络安全课视频课件
网络安全通知英语
桂林软件开发公司电话
数据库检索意图
从零开始学网络安全
浙江宁波联想塔式服务器云服务器
软件开发每行代码BUG数