mybatis中parsing包的用法
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,这篇文章主要介绍"mybatis中parsing包的用法",在日常操作中,相信很多人在mybatis中parsing包的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
千家信息网最后更新 2025年02月05日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安全错误
数据库的锁怎样保障安全
魔兽服务器登陆困难
软件开发环境课本
PG数据库判断包含个数
网络安全画画图四年级版
数据库filter
网络安全监察与犯罪侦查制服
weka连接数据库
数据库设计报告怎么写
网络安全规定的义务
河南光讯网络技术
软件开发排名情况
阿里云web服务器在哪打开
数据库消除重复列代码
数据库服务器名称查询
浪潮服务器主板英文改中文
我的世界服务器生存第四天
国家网络安全普及标语
程序设计和软件开发哪个好
数据库数据独立性
数据库规划方案怎么写
盘锦电脑网络安全培训
查询网页sql数据库数据
网络安全工程应学哪个专业
苹果手机怎样完全转移数据库
数据库中长度应该怎么写
首展网络技术有限公司
国盛智科有软件开发吗
数据库不同表之间数据关联
数据库3NF分解
云服务器上怎样打开数据库