"<script>", "SELECT * FROM vendor WHERE (id like '%${param1}%' or vendor_name like '%${param1}%') and id IN", "<foreach item='hfx' collection='categories' open='(' separator=',' close=')'>", "SELECT vendor_id FROM vendor_category WHERE category_id=#{hfx.id}", "</foreach>", "</script>"}
时间: 2024-03-13 19:45:13 浏览: 17
这段代码使用了MyBatis的动态SQL标签`<script>`,实现了一个带有多个条件的动态查询。具体的查询语句如下:
```xml
<select id="selectVendorByCategoryIdAndKeyword" resultMap="vendorMap">
<script>
SELECT * FROM vendor
WHERE (id like '%${param1}%' or vendor_name like '%${param1}%')
and id IN
<foreach item='hfx' collection='categories' open='(' separator=',' close=')'>
SELECT vendor_id FROM vendor_category WHERE category_id=#{hfx.id}
</foreach>
</script>
</select>
```
其中,`<script>`标签用于包含动态SQL语句;`${param1}`是一个占位符,表示查询条件中的关键字;`<foreach>`标签用于迭代查询条件中的多个ID,将它们拼接到查询语句中。需要注意的是,这里使用了`IN`关键字来实现多条件查询。
这个例子中的查询语句比较复杂,但是MyBatis的动态SQL标签可以帮助我们很方便地实现各种复杂的查询。希望这个例子对您有所帮助。
相关问题
$("#h_box").on("click","#sendNextUsersM",function(){ var rows = me.datatable.rows(".selected").data().toArray(); if(rows.length ==1){ var is_valid = rows[0].IS_VALID; if(is_valid!="Y"){ wj_fun.wj_confirm_init("校验未通过,不可以发送!"); return; } //var item_key = rows[0].ITEM_KEY; //zjptWorkFlow(item_key,query); var tempSql = " select WF_VIEW_URL,WF_MODIFY_URL from XSR_XZ_EX_XLS_CONFIG where xls_code = '"+rows[0].XLS_CODE+"' "; var sqlResult = getForm.getSqlForms({"sql":tempSql}); var dpSql = " select d.dp_name from Xsr_Xz_Ba_Ou_Dp_All d where d.dp_id = "+rows[0].DP_ID; var dpResult = getForm.getSqlForms({"sql":dpSql}); var param = { "H_DESC": rows[0].INV_H_NAME, "VENDOR_SITE": "", "EMP_TYPE": "", "XLS_CODE": rows[0].XLS_CODE, "WF_VIEW": zx_session_vars["rootPath"]+"/"+sqlResult.WF_VIEW_URL, "WF_MODIFY_URL": zx_session_vars["rootPath"]+"/"+sqlResult.WF_MODIFY_URL, "WF_VIEW_URL": zx_session_vars["rootPath"]+"/"+sqlResult.WF_VIEW_URL, "WF_JBR_ID": "", "OU_ID": rows[0].OU_ID, "OU_NAME": rows[0].OU_NAME, "DP_NAME": dpResult.DP_NAME, "INV_H_NAME":rows[0].INV_H_NAME, "INV_H_CODE": rows[0].INV_H_CODE, "INV_H_VAL": rows[0].INV_H_VAL, "PAY_H_VAL": rows[0].INV_H_VAL, "WITH_TAX_VAL": rows[0].INV_H_VAL, "LOGINNAME": rows[0].BXR, "JBRXM":rows[0].EMPNAME, "DP_ID": rows[0].DP_ID, "EMP_NAME": rows[0].EMPNAME, "DP_CODE": "", "p_table_name": "xsr_xz_ex_inv_h", "p_primary_column": "INV_H_ID", "e_business_id": rows[0].INV_H_ID }; var callback = function () { //执行完成之后的回调函数,刷新表格 query(); wj_fun.tip_block({ "title": "流程提交成功!" }); }; wf_submit(rows[0].ITEM_TYPE, rows[0].ITEM_KEY, rows[0].AUDIT_STATUS, param,callback, true) }else{ wj_fun.wj_confirm_init("请选择一条数据!"); return ; } });
这段代码是一个JavaScript函数的定义。当id为"h_box"的元素中的id为"sendNextUsersM"的元素被点击时,会触发该函数。
函数内部首先获取被选中的行数据,并判断是否只选中了一行。如果不止选中了一行或者没有选中任何行,则会弹出提示信息。
如果只选中了一行,并且该行的IS_VALID属性不等于"Y",则会弹出提示信息"校验未通过,不可以发送!"。
接下来,通过执行SQL查询获取一些数据,并将这些数据存储在变量sqlResult和dpResult中。
最后,构建一个包含各种参数的param对象,并调用wf_submit函数,将param作为参数传递给它。wf_submit函数可能执行一些操作,然后调用回调函数callback,在完成后刷新表格,并显示一个提示信息"流程提交成功!"。
请注意,由于代码片段提供的不完整,缺少了一些定义和调用的部分,所以无法完全理解代码的功能。如果需要更多信息,请提供完整的代码片段。
签名步骤:byte2HexStr (HMAC_SHA256(post-content +RequestURI, key), RequestURI 以”/” 开头,不包括域名;post-content 是指发送的完整 json 数据;key= AppSecret+Nonce+ timestamp, AppSecret 是和 vendorId 对应的密钥,签名的结果需要放到 name 为”parm-sign” 的 http header 中。 以下代码列出了 java 版本的签名实现: import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.Charset; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import org.apache.commons.codec.binary.Hex; public class EncryptUtil { /** * * @param plainStr 需要加密的字符串 * @param key key=AppSecret+nonce+ timestamp * @return 加密后的字符串 */ public static String hmacsha256(String plainStr, String key) { SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(Charset.forName("UTF-8")), "HmacSHA256"); Mac mac=null; try { mac = Mac.getInstance(secretKey.getAlgorithm()); mac.init(secretKey); } catch (NoSuchAlgorithmException | InvalidKeyException e) { e.printStackTrace(); } byte digest[] = mac.doFinal(plainStr.getBytes(Charset.forName("UTF-8"))); return new StringBuilder().append(byte2HexStr(digest)).toString(); } public static String byte2HexStr(byte array[]) { return array != null ? new String(Hex.encodeHex(array)) : null; } } 请以PHP7.4版本实现签名
以下是PHP 7.4版本的实现,使用了相同的依赖库`apache/commons-codec`来进行十六进制编码。
```php
<?php
use function Sodium\crypto_generichash;
use function Sodium\crypto_pwhash_str;
use function Sodium\crypto_pwhash_str_verify;
require_once __DIR__ . '/vendor/autoload.php';
function hmacsha256($plainStr, $key)
{
$secretKey = new \SecretKeySpec(
utf8_encode($key),
'HmacSHA256'
);
$mac = hash_init('sha256', HASH_HMAC, $secretKey);
hash_update($mac, utf8_encode($plainStr));
$digest = hash_final($mac, true);
return byte2HexStr($digest);
}
function byte2HexStr($array)
{
return $array !== null ? \strval(Hex::encode($array)) : null;
}
function generate_password($password, $salt)
{
return crypto_pwhash_str($password, \SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, \SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE);
}
function verify_password($hash, $password)
{
return crypto_pwhash_str_verify($hash, $password);
}
```
使用方法示例:
```php
$plainStr = '...'; // post-content RequestURI
$key = '...'; // AppSecret Nonce timestamp
$sign = hmacsha256($plainStr, $key);
$headers = [
'parm-sign: ' . $sign,
];
// 发送HTTP请求,携带上述 headers
```