LuatOS-SOC接口文档(air780E)--crypto - 加解密和hash函数
crypto.md5(str)
计算md5值
参数
传入值类型 | 解释 |
---|---|
string | 需要计算的字符串 |
返回值
返回值类型 | 解释 |
---|---|
string | 计算得出的md5值的hex字符串 |
例子
-- 计算字符串"abc"的md5 log.info("md5", crypto.md5("abc"))
crypto.hmac_md5(str, key)
计算hmac_md5值
参数
传入值类型 | 解释 |
---|---|
string | 需要计算的字符串 |
string | 密钥 |
返回值
返回值类型 | 解释 |
---|---|
string | 计算得出的hmac_md5值的hex字符串 |
例子
-- 计算字符串"abc"的hmac_md5 log.info("hmac_md5", crypto.hmac_md5("abc", "1234567890"))
crypto.sha1(str)
计算sha1值
参数
传入值类型 | 解释 |
---|---|
string | 需要计算的字符串 |
返回值
返回值类型 | 解释 |
---|---|
string | 计算得出的sha1值的hex字符串 |
例子
-- 计算字符串"abc"的sha1 log.info("sha1", crypto.sha1("abc"))
crypto.hmac_sha1(str, key)
计算hmac_sha1值
参数
传入值类型 | 解释 |
---|---|
string | 需要计算的字符串 |
string | 密钥 |
返回值
返回值类型 | 解释 |
---|---|
string | 计算得出的hmac_sha1值的hex字符串 |
例子
-- 计算字符串"abc"的hmac_sha1 log.info("hmac_sha1", crypto.hmac_sha1("abc", "1234567890"))
crypto.sha256(str)
计算sha256值
参数
传入值类型 | 解释 |
---|---|
string | 需要计算的字符串 |
返回值
返回值类型 | 解释 |
---|---|
string | 计算得出的sha256值的hex字符串 |
例子
-- 计算字符串"abc"的sha256 log.info("sha256", crypto.sha256("abc"))
crypto.hmac_sha256(str, key)
计算hmac_sha256值
参数
传入值类型 | 解释 |
---|---|
string | 需要计算的字符串 |
string | 密钥 |
返回值
返回值类型 | 解释 |
---|---|
string | 计算得出的hmac_sha256值的hex字符串 |
例子
-- 计算字符串"abc"的hmac_sha256 log.info("hmac_sha256", crypto.hmac_sha256("abc", "1234567890"))
crypto.sha512(str)
计算sha512值
参数
传入值类型 | 解释 |
---|---|
string | 需要计算的字符串 |
返回值
返回值类型 | 解释 |
---|---|
string | 计算得出的sha512值的hex字符串 |
例子
-- 计算字符串"abc"的sha512 log.info("sha512", crypto.sha512("abc"))
crypto.hmac_sha512(str, key)
计算hmac_sha512值
参数
传入值类型 | 解释 |
---|---|
string | 需要计算的字符串 |
string | 密钥 |
返回值
返回值类型 | 解释 |
---|---|
string | 计算得出的hmac_sha512值的hex字符串 |
例子
-- 计算字符串"abc"的hmac_sha512 log.info("hmac_sha512", crypto.hmac_sha512("abc", "1234567890"))
crypto.cipher_encrypt(type, padding, str, key, iv)
对称加密
参数
传入值类型 | 解释 |
---|---|
string | 算法名称, 例如 AES-128-ECB/AES-128-CBC, 可查阅crypto.cipher_list() |
string | 对齐方式, 支持PKCS7/ZERO/ONE_AND_ZEROS/ZEROS_AND_LEN/NONE |
string | 需要加密的数据 |
string | 密钥,需要对应算法的密钥长度 |
string | IV值, 非ECB算法需要 |
返回值
返回值类型 | 解释 |
---|---|
string | 加密后的字符串 |
例子
-- 计算AES local data = crypto.cipher_encrypt("AES-128-ECB", "PKCS7", "1234567890123456", "1234567890123456") local data2 = crypto.cipher_encrypt("AES-128-CBC", "PKCS7", "1234567890123456", "1234567890123456", "1234567890666666")
crypto.cipher_decrypt(type, padding, str, key, iv)
对称解密
参数
传入值类型 | 解释 |
---|---|
string | 算法名称, 例如 AES-128-ECB/AES-128-CBC, 可查阅crypto.cipher_list() |
string | 对齐方式, 支持PKCS7/ZERO/ONE_AND_ZEROS/ZEROS_AND_LEN/NONE |
string | 需要解密的数据 |
string | 密钥,需要对应算法的密钥长度 |
string | IV值, 非ECB算法需要 |
返回值
返回值类型 | 解释 |
---|---|
string | 解密后的字符串 |
例子
-- 用AES加密,然后用AES解密 local data = crypto.cipher_encrypt("AES-128-ECB", "PKCS7", "1234567890123456", "1234567890123456") local data2 = crypto.cipher_decrypt("AES-128-ECB", "PKCS7", data, "1234567890123456") -- data的hex为 757CCD0CDC5C90EADBEEECF638DD0000 -- data2的值为 1234567890123456
crypto.crc16(method, data, poly, initial, finally, inReversem outReverse)
计算CRC16
参数
传入值类型 | 解释 |
---|---|
string | CRC16模式(”IBM”,”MAXIM”,”USB”,”MODBUS”,”CCITT”,”CCITT-FALSE”,”X25”,”XMODEM”,”DNP”,”USER-DEFINED”) |
string | 字符串 |
int | poly值 |
int | initial值 |
int | finally值 |
int | 输入反转,1反转,默认0不反转 |
int | 输入反转,1反转,默认0不反转 |
返回值
返回值类型 | 解释 |
---|---|
int | 对应的CRC16值 |
例子
-- 计算CRC16 local crc = crypto.crc16("")
crypto.crc16_modbus(data)
直接计算modbus的crc16值
参数
传入值类型 | 解释 |
---|---|
string | 数据 |
返回值
返回值类型 | 解释 |
---|---|
int | 对应的CRC16值 |
例子
-- 计算CRC16 modbus local crc = crypto.crc16_modbus(data)
crypto.crc32(data)
计算crc32值
参数
传入值类型 | 解释 |
---|---|
string | 数据 |
返回值
返回值类型 | 解释 |
---|---|
int | 对应的CRC32值 |
例子
-- 计算CRC32 local crc = crypto.crc32(data)
crypto.crc8(data)
计算crc8值
参数
传入值类型 | 解释 |
---|---|
string | 数据 |
int | crc多项式,可选,如果不写,将忽略除了数据外所有参数 |
int | crc初始值,可选,默认0 |
boolean | 是否需要逆序处理,默认否 |
返回值
返回值类型 | 解释 |
---|---|
int | 对应的CRC8值 |
例子
-- 计算CRC8 local crc = crypto.crc8(data) local crc = crypto.crc8(data, 0x31, 0xff, false)
crypto.trng(len)
生成真随机数
参数
传入值类型 | 解释 |
---|---|
int | 数据长度 |
返回值
返回值类型 | 解释 |
---|---|
string | 指定随机数字符串 |
例子
-- 生成32位随机数ir local r = crypto.trng(4) local _, ir = pack.unpack(r, "I")
crypto.totp(secret,time)
计算TOTP动态密码的结果
参数
传入值类型 | 解释 |
---|---|
string | 网站提供的密钥(就是BASE32编码后的结果) |
int | 可选,时间戳,默认当前时间 |
返回值
返回值类型 | 解释 |
---|---|
int | 计算得出的六位数结果 计算失败返回nil |
例子
--使用当前系统时间计算 local otp = crypto.totp("asdfassdfasdfass")
crypto.base64_encode(data)
将数据进行base64编码
参数
传入值类型 | 解释 |
---|---|
string | 待编码的数据 |
返回值
返回值类型 | 解释 |
---|---|
string | 编码后的数据 |
例子
-- 本函数与 string.toBase64 是同一个 local data = "123" local bdata = crypto.base64_encode(data) log.info("base64", "encode", data, bdata) data = crypto.base64_decode(data) log.info("base64", "decode", data, bdata)
crypto.base64_decode(data)
将数据进行base64解码
参数
传入值类型 | 解释 |
---|---|
string | 待解码的数据 |
返回值
返回值类型 | 解释 |
---|---|
string | 解码后的数据 |
例子
-- 本函数与 string.fromBase64 是同一个 local data = "123" local bdata = crypto.base64_encode(data) log.info("base64", "encode", data, bdata) data = crypto.base64_decode(data) log.info("base64", "decode", data, bdata)
crypto.cipher_list()
获取当前固件支持的cipher列表
参数
无
返回值
返回值类型 | 解释 |
---|---|
table | 本固件支持的cipher列表,字符串数组 |
例子
-- 本API于2022.07.27添加 local ciphers = crypto.cipher_list() if ciphers thenlog.info("crypto", "ciphers list", json.encode(ciphers)) end
crypto.cipher_suites()
获取当前固件支持的cipher suites列表
参数
无
返回值
返回值类型 | 解释 |
---|---|
table | 本固件支持的cipher suites列表,字符串数组 |
例子
-- 本API于2022.11.16添加 local suites = crypto.cipher_suites() if suites thenlog.info("crypto", "ciphers suites", json.encode(suites)) end
crypto.md_file(tp, path, hmac)
计算文件的hash值(md5/sha1/sha256及hmac形式)
参数
传入值类型 | 解释 |
---|---|
string | hash类型, 大小字母, 例如 “MD5” “SHA1” “SHA256” |
string | 文件路径, 例如 /luadb/logo.jpg |
string | hmac值,可选 |
返回值
返回值类型 | 解释 |
---|---|
string | HEX过的hash值,若失败会无返回值 |
例子
-- 无hmac的hash值 log.info("md5", crypto.md_file("MD5", "/luadb/logo.jpg")) log.info("sha1", crypto.md_file("SHA1", "/luadb/logo.jpg")) log.info("sha256", crypto.md_file("SHA256", "/luadb/logo.jpg"))-- 带hmac的hash值 log.info("hmac_md5", crypto.md_file("MD5", "/luadb/logo.jpg", "123456")) log.info("hmac_sha1", crypto.md_file("SHA1", "/luadb/logo.jpg", "123456")) log.info("hmac_sha256", crypto.md_file("SHA256", "/luadb/logo.jpg", "123456"))
crypto.md(tp, data, hmac)
计算数据的hash值(md5/sha1/sha256及hmac形式)
参数
传入值类型 | 解释 |
---|---|
string | hash类型, 大小字母, 例如 “MD5” “SHA1” “SHA256” |
string | 待处理的数据 |
string | hmac值,可选 |
返回值
返回值类型 | 解释 |
---|---|
string | HEX过的hash值,若失败会无返回值 |
例子
-- 无hmac的hash值 log.info("md5", crypto.md("MD5", "1234567890")) log.info("sha1", crypto.md("SHA1", "1234567890")) log.info("sha256", crypto.md("SHA256", "1234567890"))-- 带hmac的hash值 log.info("hmac_md5", crypto.md("MD5", "1234567890", "123456")) log.info("hmac_sha1", crypto.md("SHA1", "1234567890", "123456")) log.info("hmac_sha256", crypto.md("SHA256", "1234567890", "123456"))
crypto.hash_init(tp)
创建流式hash用的stream
参数
传入值类型 | 解释 |
---|---|
string | hash类型, 大写字母, 例如 “MD5” “SHA1” “SHA256” |
string | hmac值,可选 |
返回值
返回值类型 | 解释 |
---|---|
userdata | 成功返回一个数据结构,否则返回nil |
例子
-- 无hmac的hash stream local md5_stream = crypto.hash_init("MD5") local sha1_stream = crypto.hash_init("SHA1") local sha256_stream = crypto.hash_init("SHA256")-- 带hmac的hash stream local md5_stream = crypto.hash_init("MD5", "123456") local sha1_stream = crypto.hash_init("SHA1", "123456") local sha256_stream = crypto.hash_init("SHA256", "123456")
crypto.hash_update(stream, data)
流式hash更新数据
参数
传入值类型 | 解释 |
---|---|
userdata | crypto.hash_init()创建的stream, 必选 |
string | 待计算的数据,必选 |
return | 无 |
返回值
无
例子
crypto.hash_update(stream, "OK")
crypto.hash_finish(stream)
获取流式hash校验值并释放创建的stream
参数
传入值类型 | 解释 |
---|---|
userdata | crypto.hash_init()创建的stream,必选 |
返回值
返回值类型 | 解释 |
---|---|
string | 成功返回计算得出的流式hash值的hex字符串,失败无返回 |
例子
local hashResult = crypto.hash_finish(stream)
crypto.checksum(data, mode)
计算checksum校验和
参数
传入值类型 | 解释 |
---|---|
string | 待计算的数据,必选 |
int | 模式,累加模式, 0 - 异或, 1 - 累加, 默认为0 |
返回值
返回值类型 | 解释 |
---|---|
int | checksum值,校验和 |
例子
-- 本函数在 2022.12.28 添加 -- 单纯计算checksum值 local ck = crypto.checksum("OK") log.info("checksum", "ok", string.format("%02X", ck)) -- 第二个参数mode在2023.5.23日添加
相关文章:
LuatOS-SOC接口文档(air780E)--crypto - 加解密和hash函数
crypto.md5(str) 计算md5值 参数 传入值类型 解释 string 需要计算的字符串 返回值 返回值类型 解释 string 计算得出的md5值的hex字符串 例子 -- 计算字符串"abc"的md5 log.info("md5", crypto.md5("abc"))crypto.hmac_md5(str, k…...
自动化测试的定位及一些思考
大家对自动化的理解,首先是想到Web UI自动化,这就为什么我一说自动化,公司一般就会有很多人反对,因为自动化的成本实在太高了,其实自动化是分为三个层面的(UI层自动化、接口自动化、单元测试)&a…...
展会动态 | 迪捷软件邀您参加2023世界智能网联汽车大会
*9月18日之前注册的观众免收门票费* 由北京市人民政府、工业和信息化部、公安部、交通运输部和中国科学技术协会联合主办的2023世界智能网联汽车大会将于9月21日-24日在北京中国国际展览中心(顺义馆)举行。 论坛背景 本届展会以“聚智成势 协同向新——…...
jenkins自动化部署springboot、gitee项目
服务器需要安装jdk11、maven、gitee 1. jenkins安装 # yum源 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo # 公钥 sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io-2023.key # 安装 yum install jenkins如果yum源报…...
Python环境配置及基础用法Pycharm库安装与背景设置及避免Venv文件夹
目录 一、Python环境部署及简单使用 1、Python下载安装 2、环境变量配置 3、检查是否安装成功 4、Python的两种模式(编辑模式&交互模式) 二、Pycharm库安装与背景设置 1、Python库安装 2、Pycharm自定义背景 三、如何避免Venv文件夹 一、P…...
PHP常见的SQL防注入方法
利用Mysqli和PDO 产生原因主要就是一些数据没有经过严格的验证,然后直接拼接 SQL 去查询。导致产生漏洞,比如: $id $_GET[id]; $sql "SELECT name FROM users WHERE id $id";因为没有对 $_GET[‘id’] 做数据类型验证…...
分布式和中间件等
raft协议 paxos算法ddos 如何避免?怎么预防?怎么发现?利用了TCP什么特点?怎么改进TCP可以预防?服务端处理不了的请求怎么办?连接数最大值需要设置吗?怎么设置? Thrift RPC过程是什么样子的?异构系统怎么完成通信?跟http相比什么优缺点?了解grpc吗?kafka topic part…...
通过http发送post请求的三种Content-Type分析
通过okhttp向服务端发起post网络请求,可以通过Content-Type设置发送请求数据的格式。 常用到的三种: 1)application/x-www-form-urlencoded; charsetutf-8 2)application/json; charsetutf-8 3)multipart/form-dat…...
Vue中的自定义指令详解
文章目录 自定义指令自定义指令-指令的值(给自定义指令传参数) 自定义指令 自定义指令:自己定义的指令,可以封装一些dom 操作,扩展额外功能(自动聚焦,自动加载,懒加载等复杂的指令封…...
[管理与领导-100]:管理者到底是什么?调度器?路由器?交换机?监控器?
目录 前言: 二层交换机 三层路由器 监视器(Monitor) 调度器 前言: 人在群体中,有点像设备在网络中,管理者到底承担什么的功能? 二层交换机 交换机是计算机网络中,用于连接多台…...
保研CS/软件工程/通信问题汇总
机器学习 1.TP、TN、FP、FN、F1 2.机器学习和深度学习的区别和联系 模型复杂性:深度学习是机器学习的一个子领域,其主要区别在于使用深层的神经网络模型。深度学习模型通常包含多个隐层,可以学习更加复杂的特征表示,因此在某些任…...
word、excel、ppt转为PDF
相关引用对象在代码里了 相关依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.0.1</version></dependency> <dependency><groupId>org.apache.poi</group…...
2023华为杯D题——基于Kaya模型的碳排放达峰实证研究
一、前言 化石能源是推动现代经济增长的重要生产要素,经济生产活动与碳排放活动密切相关。充分认识经济增长与碳排放之间的关系对转变生产方式,确定碳达峰、碳中和路径极为必要。本研究在对经济增长与碳排放关系现有研究梳理的基础上,系统地分…...
有哪些好用的上网行为管理软件?(上网行为管理软件功能好的软件推荐)
随着互联网的快速发展,企业的信息化管理和员工的上网行为已经成为企业信息化建设的重要组成部分。上网行为管理软件作为一种新型的管理工具,可以帮助企业实现对员工上网行为的管控和优化,进而提高企业的工作效率和网络安全。本文将对多款市场…...
npm install报错 code:128
报的错误: npm ERR! code 128 npm ERR! An unknown git error occurred npm ERR! command git --no-replace-objects ls-remote ssh://gitgithub.com/nhn/raphael.git npm ERR! gitgithub.com: Permission denied (publickey). npm ERR! fatal: Could not read from remote re…...
爬虫 — Scrapy 框架(一)
目录 一、介绍1、同步与异步2、阻塞与非阻塞 二、工作流程三、项目结构1、安装2、项目文件夹2.1、方式一2.2、方式二 3、创建项目4、项目文件组成4.1、piders/__ init __.py4.2、spiders/demo.py4.3、__ init __.py4.4、items.py4.5、middlewares.py4.6、pipelines.py4.7、sett…...
Python编程语言学习笔记
目录 1 书写格式1.1 程序框架格式1.1 注释1.2 保留字 2 数据2.1 整数类型2.2 浮点类型2.3 复数类型2.4 数值运算符2.5 数值运函数2.6 数值类型转换函数2.7 math 库2.8 字符串2.8.1 字符串的表示2.8.2 字符串的区间访问2.8.3 字符串操作符2.8.4 字符串操作函数 2.9 字符串类型的…...
【运维面试100问】(三)说说你在故障排除方面的经历
本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…...
Postman 全局配置接口路径变量等
Postman 全局配置接口路径变量等 一、简介 这里主要是介绍通过配置postman接口测试工具,简化每次新增模块等接口时修改url的繁琐过程,方便以后查阅!!! 二、全局变量设置 1、新增测试环境 新增测试环境 2、接口集合设…...
一文掌握CodiMD安装与使用
简介:CodiMD 是一个基于 Markdown 语言的实时协作文档编辑器,它允许多个用户在同一个文档上进行实时编辑。CodiMD 的前身是 HackMD,但为了满足更开放的开源社区需求,CodiMD 作为其社区版本独立出来。 优势: 1. 开源且…...
无人机顶会顶刊2023
无人机顶会顶刊2023 国际期刊1、Science Robotics2、IEEE Transactions on Robotics(TRO)3、IEEE Transactions on Automation Science and Engineering(TASE)4、International Journal of Robotics Research(IJRR)5、IEEE Robotics and Automation Lett…...
【Java毕设项目】基于SpringBoot+Vue校园便利平台的设计与实现
博主主页:一季春秋博主简介:专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容:毕业设计(Java项目、小程序等)、简历模板、学习资料、面试题…...
03Nginx的静态资源部署,反向代理,负载均衡,动静分离的配置
Nginx具体应用 部署静态资源 Nginx相对于Tomcat处理静态资源的能力更加高效,所以在生产环境下一般都会将Nginx可以作为静态web服务器来部署静态资源 静态资源: 在服务端真实存在并且能够直接展示的一些html页面、css文件、js文件、图片、视频等资源文件将静态资源部署到Ngin…...
刷题笔记24——完全二叉树的节点个数
有些事情是不能告诉别人的,有些事情是不必告诉别人的,有些事情是根本没有办法告诉别人的,而且有些事情是,即使告诉了别人,你也会马上后悔的。——罗曼罗兰 222. 完全二叉树的节点个数 java的幂运算要 (int) Math.pow(2,l1)-1计算满二叉树的节点数量公式:2 ^ height…...
sentinel环境搭建以及微服务接入
• sentinel部署 • sentinel-镜像制造 • sentinel-镜像推送 • sentinel-部署配置文件 • 访问控制台 • 外网访问控制台 • 集群内访问 • 配置规则 • 限流效果 • 微服务接入 • pom文件引入依赖 • pod部署文件添加配置 Sentinel 控制台是流量控制、熔断降级规则统一配置…...
Klotski: Efficient Obfuscated Execution against Controlled-Channel Attacks
标题:Klotski: Efficient Obfuscated Execution against Controlled-Channel Attacks 作者:Pan Zhang,Chengyu Song,Heng Yin,Deqing Zou,Elaine Shi and Hai Jin 发布:ASPLOS【计算机体系结构顶会】 时间:2020 摘要 Intel Soft…...
阿里云无影云电脑角色AliyunServiceRoleForGws什么意思?
阿里云无影云电脑服务关联角色是指角色名称:AliyunServiceRoleForGws,并赋予角色权限策略:AliyunServiceRolePolicyForGws的过程,简单来说,就是允许无影云电脑服务访问您VPC、CEN和NAS中的资源,使用该权限查…...
操作系统--------调度算法篇
目录 一.先来先服务调度算法(FCFS) 二.短作业优先调度算法(SJF) 2.1.SJF调度算法缺点 三.优先级调度算法 3.1优先级调度算法的类型 1.非抢占优先级调度算法 2.抢占优先级调度算法 3.2优先级的类型 3.1静态优先级 3.2动态…...
宝塔composer 安装laravel依赖出现的问题
环境宝塔、PHP版本8.0.2、laravel9 问题1:PHP Fatal error: Uncaught Error: Call to undefined function Composer\XdebugHandler\putenv() 办法:把PHP版本disable_functions这个中的putenv去掉,这个意思就是putenv被PHP对应的版本禁用了&…...
OpenCV自学笔记二十四:支持向量机
在OpenCV中,支持向量机(Support Vector Machine,简称SVM)算法的实现包含在ml模块中。SVM是一种常用的监督学习算法,主要用于分类问题。 SVM的原理:通过在特征空间中找到一个最优超平面,将不同类…...
免费建网站软件系统/广州专做优化的科技公司
http://172.20.6.3/Problem_Show.asp?id1237 锻炼搜索的代码能力,不错的题。开始对dfs到底向下传递什么搞不清楚,需要想一下,noip难度的题还有这种情况,果然还是太蒻。代码1 #include<cstdio>2 #include<cstring>3 #…...
网站建设免费模板哪家好/自动点击器安卓
如果你有一个C/C的函数需要测试,利用MATLAB平台是一个经济高效的选择。你不必花过多的精力去理会IO的问题,并且可以很方便的利用 MATLAB的函数来验证你的函数的正确性。有时,你还可以利用MATLAB产生测试数据。这样做还有一个很大的好处&#…...
关闭网站弹窗代码/厦门网站关键词推广
PHP怎么实现的根据银行卡号判断是哪个银行?提问:PHP怎么实现的根据银行卡号判断是哪个银行?回答如下:bankList.php的内容会写在下面。请全选其中所有数据后,另存为bankList.php文件使用。header(Content-type:text/htm…...
平台维护工作内容/周口seo推广
基本数据类型(int,bool,str) 1.基本数据数据类型: int 整数 str 字符串. 一般不存放大量的数据 bool 布尔值. 用来判断. True, False list 列表.用来存放大量数据, []表示. 里面可以装各种数据类型. tuple 元组. 只读列表. () 表示 …...
网站建设程序的步骤过程/百度官方客服平台
今天看到《银行主数据项目(MDM)的数据持久层,你选择hibernate还是ibatis(MyBatis)》跑到首页来了, 把我最近使用方式分享一下。Hiberante(Spring JDBC freemarker)两次结合,hibernate对简单的数据操作很方便,可以大量减少SQL语句的维护。对于…...
网站推广文章 优帮云/seo培训讲师招聘
【简介】 lucene.net好多人都知道的吧,反正我是最近才好好的看了一下,别笑我拿历史当新闻哦,不太了解Lucence的朋友先听我说两句哦。Lucene的知识主要分为索引、搜索、分析器、性能优化几个部分。索引和搜索没啥可说的,看几个…...