• [技术干货] Hibernate笔记分享
    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JavaEE架构中取代CMP,完成数据持久化的重任。1.Hibernate是什么,有什么作用和好处?        Hibernate是一个数据库访问框架,用于实现对数据库的增删改查操作。使用Hibernate框架可以简化数据库访问操作,要程序员将更多的经历放在业务层编写上。       原有JDBC操作数据库存在一些问题,主要有以下几个方面:       a)需要编写大量复杂的SQL语句       b)需要设置大量的SQL参数或者将ResultSet取值封装成实体对象       c)当数据库移值时,需要修改部分SQL语句和操作      使用Hibernate框架可以解决以上问题。2.什么是ORM?ORM(Object Relation Mapping)对象关系映射。意思是将程序中的实体对象和关系数据库表中的一行记录进行映射。这样在程序中使用该工具就可以将一个对象写入数据表,或者将数据表记录自动封装成一个对象返回。(这个也是Hibernate实现的原理)3.Hibernate的几个核心接口?    Configuration类:Configuration用于配置并启动Hibernate。SessionFactory接口:一个SessionFactory对应一个数据源,它是个重量级对象,不可随意生成多个实例。它是线程安全的,同一个实例可以被应用中的多个线程共享。Session接口:Session接口是Hibernate应用中使用最广泛的接口了,它是持久化管理器,提供添加、更新、删除、加载、查询对象。Session不是线程安全的,所以应避免多个线程共享同一个Session实例。Session是轻量级对象,它的创建和销毁不需要太多资源,这意味着在应用中可以经常创建和销毁Session对象。Transaction接口:Transaction是Hibernate的数据库事务接口,它对底层的事务接口进行了封装。Query和Criteria接口:这两个是Hibernate的查询接口,用于向数据库查询对象,以及控制执行查询的过程。4.Hibernate的一级缓存?       是session级别的缓存。        a.当查询某个对象时,Hibernate首先去一级缓存中查找,如果存在将缓存中的对象取出返回。如果不存在才去数据库查询。        b.当查询某个对象时,Hibernate会自动将数据库查询出的对象放入一级缓存。(例如session的load和get方法查出的对象)        c.一级缓存默认启用,一般被称为Session级别的缓存。因此一级缓存随着Session对象创建,随着Session对象释放而销毁。        d.每个Session都有自己一个独立的一级缓存空间,不能访问其他Session的缓存空间。       ----------------------一级缓存的好处-------------------------       在使用同一个Session查询同一个对象若干次的时候,只在第一次时查询数据库,后续几次都会从缓存取出。从而减少对数据库的查询次数。       -----------------------**使用建议(重点)**----------------------------为了将一级缓存的优势更好的发挥出来,建议在处理一个请求时,使用一个Session对象处理。可以使用ThreadLocal技术封装Session.    在Hibernate中,可以 <!-- 指定将session与处理线程绑定,实现线程单例 -->       <property name="current_session_context_class">          thread        </property>5.Hibernate的二级缓存?    二级缓存也称为进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享 ,可以被多个不Session对象访问,二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存。6.Hibernate中session的get和load方法区别?    相同点:作用相同,都是按照主键条件查询某个对象。    不同点:1).get方法不使用延迟加载机制,load采用延迟加载机制2).如果没有满足条件的记录,get方法返回null,load则抛出异常3).load方法返回的对象是一个动态代理类(Hibernate框架动态生成的,是实体类的子类型)。4).get方法返回的对象类型就是原实体类型注意:a.在程序中,如果使用上述延迟加载操作,需要避免Session对象过早关闭问题。(could not initialize proxy - no Session)b.为避免上述异常,一般采用OpenSessionInView模式。c.可以将Session关闭采用Filter或Interceptor(Struts2推荐)封装。7.线程单例及其使用线程单例:回到服务器中,只要是服务器,每一个浏览器访问服务器时,服务器会为每个浏览器创建一个线程。假设Some就是Session,如果使用这种机制获取Session,当同一个用户浏览器不论怎么调用session都是同一个(只要在相同的线程中)。这种机制就叫做线程单例。线程单例的实现原理就是如上SomeFactory做的。private static ThreadLocal<Session> tl = new ThreadLocal<Session>0;Session session = tl.get0; if (session == null) {       session = factory.openSession();       tl.set(session); }8.HQL和SQL的区别    Hibernate Query Language(Hibernate查询语言)    结构化查询语言(Structured Query Language)简称SQL       HQL语句结构与SQL语句相似, SQL语句是面向数据表和字段进行查询,而HQL是面向映射后的对象和属性进行查询。因此HQL被称为面向对象查询语句。           HQL语句与SQL相似点如下:            a.HQL语句支持select,from,where,order by ,group by,having子句            b.HQL语句支持分组函数max,min,avg,sum,count            c.HQL语句支持运算符和表达式            d.HQL语句支持>,>=,<,<=,in,not in,like,between... and...,                  <>,!=等查询条件,也支持and,or关键字            e.HQL语句支持inner join,left outer join,full join 等连接           HQL语句与SQL不同点如下:(下面内容为重点)             a.HQL区分大小写(大小写敏感),除关键字之外             b.HQL语句使用的类名和属性名(将SQL表名替换成类名,字段名替换成属性名)             c.HQL不支持select *写法,但支持select count(*)             d.HQL语句不支持表连接的on子句,on关联条件可以通过关联映射自动追加9.Hibernate中操作并发处理?(乐观锁和悲观锁)    Hibernate框架可以使用锁的机制来解决操作并发。    a.悲观锁         在数据查询出来时,就给数据加一个锁,锁定。这样其他用户再执行删、改操作时不允许。当占用着事务结束,锁会自动解除。          Hibernate采用的是数据库锁机制实现悲观锁控制。        缺点:将并发用户操作同步开,一个一个处理。当一个用户处理时间比较长时,效率会比较低。      b.乐观锁         允许同时更新提交,但是最快的会成功,慢的失败。         在记录中追加一个字段值,用该字段值当做版本。当最先提交者提交后,会自动将版本字段值提升,这样其他用户提交,会发现版本低于数据库记录目前版本,因此抛出异常提示失败。    特点:允许用户同时处理,但只能有一个成功,其他失败,以异常方式提示。
  • [问题求助] 【ulab环境】脚本编辑页面右上角搜索功能无法使用,有报错信息
    迁移后新环境点击这个搜索框报错。点击更新搜索索引同样报这个错误
  • [问题求助] 智慧园区20.3创建卡口选择摄像头是通过设施实例属性功能类型funcType查询摄像头,还是ivs的智能分析类型筛选摄像头
    智慧园区20.3  问题 1.编辑摄像头实例属性功能类型funcType是否可以同步到IVS 2.创建卡口选择摄像头是通过设施实例属性功能类型funcType查询摄像头,还是ivs的智能分析类型筛选摄像头而且必须是创建了智能分析任务的摄像头
  • [服务集成APIC] ROMA接口入参限制
    ROMA的入参大小限制是多少,可以改大一些吗
  • [使用指南] Android API网关 APIG下载demo后,调用接口报错
    将demo https://support.huaweicloud.com/devg-apig/apig-dev-180919068.html 下载下来,运行后请求接口报错
  • [数据编排] 你好,我想问一下GDE体验环境是不是不可以使用数据编排功能
    我点进去数据编排首页他报这个错误,请问一下是什么原因啊?
  • [问题求助] 请教下华为机器视觉开发的问题
    关于预警推送的接口问题。 我们设置进去推送地址好像不调用推送。 http://192.168.2.188/SDCAPI/V1.0/Notification/Subscription/Topics  {  "topic": "alarm.paas.sdc",  "url": "http://192.168.2.200/api/v1/ai/warning/alarm_entry",  "acceptType": {  "dataType": "json"  } }收不到烟雾报警的推送信息。 是不是那个参数没搞对? 
  • 使用 FunctionGraph 快速构建自己的“ChatGPT”
    作者ChatGPT    果宝    历川拥抱Serverless,释放生产力点击体验 函数工作流 FunctionGraph新一代Serverless函数计算与编排服务一、背景ChatGPT是一个基于GPT-3模型的聊天机器人,可以与用户进行自然、流畅和有趣的对话。ChatGPT可以理解和使用多种语言,如英语、中文、日语、西班牙语、法语或德语;还可以根据用户的兴趣和需求,提供相关建议和创意内容,如诗歌、故事、代码、歌词等。ChatGPT是一个强大而灵活的工具,可以用于娱乐、学习或工作。但是在国内使用ChatGPT有些不便,是否可以基于OpenAI开放的API做一个给自己或者同事们使用的聊天机器人,甚至集成到更多的场景…. 效果如下:二、方案选型说干就干,我们先从做一个自己的机器人开始,首先我们从OpenAI获取用于鉴权的秘钥。然后写一个请求OpenAI接口的代码,并写一个web服务接口开放出去,再搭配一个交互用的前端即可。看起来是1小时的工作量,但是如何部署这个服务呢? 购买一个云服务器再安装环境或者配置容器也太麻烦了,于是我问了ChatGPT:可以看到, 使用FunctionGraph只需要聚焦完成请求OpenAI接口的功能函数,不需要购买和配置资源,甚至不需要写Web接口的代码。 于是一个简单的方案如下:其中,对象存储服务OBS:用于托管前端页面FunctionGraph : 用于响应前端请求,运行代码向OpenAI发送问题API网关: 对外开放调用函数的API注:“函数” 是指客户部署在FunctionGraph上的代码,它可以是一个或多个文件组成的程序,甚至编译好的二进制文件。 如Python 脚本文件,Java的jar 包。三、开发并部署聊天应用3.1 创建FunctionGraph函数处理用户提问的请求首先创建并开发FunctionGraph函数,打开华为云FunctionGraph 产品页面,由于只有一个简单的问题查询接口,这里我们选用事件函数 使用Python 3.9 运行时。注:事件函数,可以由某类事件触发函数运行,如用户对该函数发送了HTTP请求,关联到该函数的消息队列里产生了新消息,都会自动触发函数运行。对于事件函数,通常程序入口方法(这里是 handler)会有两个参数:event 参数: 包含触发用户函数的事件的相关信息。HTTP请求也是一种事件,event里会包含请求的body header 等;context 参数: 调用平台的相关能力,如获取在函数配置里设置的加密环境变量等图:FunctionGraph 函数源码上图为本次调用的入口方法handler(),在函数中,我们:从event 里取得请求的参数 prompt调用OpenAI 的接口Python SDK,向OpenAI 发送请求, (示例里我们使用text-davinci-003模型 [1] https://platform.openai.com/docs/model-index-for-researchers#footnote-2)handler 方法中我们使用了 context 获取访问OpenAI的key(上图29行) ,获取前需要在函数上配置对应环境变量,如下图所示:图:函数配置环境变量注:示例中我们使用了OpenAI的sdk ,也可以将sdk放在函数代码里一起上传,或利用函数的依赖管理能力,通过添加依赖的方式实现:图:函数配置依赖在编辑好代码后,只需要点击部署按钮即可完成部署。3.2 创建APIG触发器来开放接口通常对于使用函数开发WEB 后端的场景,我们使用API 网关服务,来将函数开放出去供前端访问。为函数在API网关上注册API非常简单,只需要在函数页面上创建APIG触发器:注意:这里将后端超时时间设定为一个较大的时间,如60s,因为OpenAi的接口响应较慢。在北京4局点中,APIG服务有共享版,支持按需计费,若有较大的流量可以考虑购买APIG独享实例。图:为GPT函数绑定APIG触发器APIG触发器上的调用URL,可以直接用于向后端发送请求,该URL 为测试URL,每日仅可访问1000次,可以点击触发器跳转到APIG页面绑定自己的域名。3.3 托管前端页面到OBS我们准备了一个简单的前端,只需改下前端页面配置的后端地址即可。创建一个OBS 桶,上传前端文件配置OBS 桶静态文件托管,将桶访问权限设置为公共读,并在静态网站托管选项里配置默认首页,将自己的域名指向访问地址。最后,通过访问配置的域名访问页面,开始体验!至此,我们其实已经完成了整个简单聊天系统的搭建,案例中我们使用了一个简单的前端页面,开发者也可以考虑集成到如VSCode插件,语音聊天机器人,微信公众号等等。更进一步,若想使用Serverless技术,开发更为完整,适合生产环境的应用,需要添加鉴权,数据库连接等功能。 四、为后端服务增加接口鉴权以上我们已经基于FunctionGraph 函数创建了一个简易聊天系统的后端的服务,但是该接口没有任何鉴权,如果开放接口,所有用户都可以访问。如果需要用户登录后才可以使用,如何做?一个思路是在原有业务代码里增加鉴权,这里我们也可以考虑使用APIG自定义鉴权即APIG组合FunctionGraph 鉴权的形式。 一个新的解决方案,如下。4.1 创建并配置APIG自定义鉴权函数使用APIG 自定义鉴权有以下优势:提升开发效率:鉴权与业务解耦,新增逻辑只需关注业务,无需引入鉴权;鉴权代码集中而非分散在多个业务模块,更新鉴权逻辑只需要更新鉴权模块而非所有业务模块;降低成本:对于使用大规格函数进行后端服务的代码,无效请求可以直接由较小规格的鉴权函数拦截,降低大中规格资源服务的运行成本;创建鉴权函数和普通函数的创建流程一样,只需要注意响应的格式,一个使用JWT 鉴权的简单案例如下。 编辑接口,配置自定义鉴权编辑对应的API,选择自定义鉴权,选择到我们创建的函数:一个鉴权拒绝的示例如下:4.2 创建授权函数基于以上自定义鉴权模式,开发者可以组合自己已有的鉴权逻辑放到自定义鉴权函数中。如果进一步想基于FunctionGraph 创建一个 “登录” 或token授权函数,可以考虑以下方案。我们首先需要创建一个函数,该函数用于接收用户登录请求,然后去数据库请求,判断用户合法则返回鉴权token。创建授权函数创建一个普通的事件函数即可,一个简单的示例如下,随后可以为其创建APIG 触发器。 注意,如果需要函数访问VPC里的资源,如本例中的RDS,需要在函数页面配置RDS所在的VPC。五、“ChatGPT”的升级和“运维”5.1 日志与监控使用函数,系统会自动收集用户打印在控制台的日志,用户无需处理日志落盘,收集或直接上报。对于每一条请求日志,FunctionGraph 还会显示请求执行耗时,使用内存及请求状态。用户可以基于关键词,请求状态进行过滤和检索。 图:函数用户日志页面同时,平台自动收集函数运行指标,如调用次数,运行时间,错误次数,被拒绝次数,并发数等。图:函数监控5.2 版本迭代在用户更新函数代码时,为保障“ChatGPT”业务稳定运行,可以配置APIG触发器的后端服务指向函数别名:图:函数别名图:FunctionGraph别名灰度版本
  • [公告] 云原生API网关评级“扩展级”
    2023年1月,华为云云原生API网关(APIG)在网关基础能力、网关扩展能力、API生命周期管理能力、运维支撑能力和安全能力等五类指标方面通过中国信息通信研究院评估,获评云原生API网关扩展级(最高级)。
  • [热门活动] DevRun成长计划——Serverless专场学习笔记
    最开始其实还是有点忐忑的 但是跟着实验指导书一起发现实验并不难,并且学到了不少东西​在这里已经将index.js文件复制到了对应的窗口中,一定要注意不要复制错误了在点击测试之后,返回到日志即可查看情况,一定要刷新一下,不然可能看不了这是最后完成了,查看网页的界面,还是有点小成就感的
  • [交流吐槽] 三大存储的区别和应用场景
    SAN存储提供给应用的是一个LUN或者是一个卷,LUN和卷是面向磁盘空间的一种组织方式,上层应用要通过FC或者ISCSI协议访问SAN。SAN存储处理的是管理磁盘的问题,适用于实时读写场景;NAS存储提供给应用的是一个文件系统或者是一个文件夹,上层应用通过NFS和CIFS协议进行访问,利用FTP+TFTP协议进行上传下载,此外,文件系统要维护一个目录树,适用于企业组织内部共享场景,提升办公效率和存储空间利用率(减少同类型数据复存)对象存储更加适合web类应用,基于URL访问地址提供一个海量的桶存储空间,能够存储各种类型的文件对象,对象存储是一个扁平架构,无需维护复杂的文件目录。无需考虑存储空间的限制,一个桶支持近乎无限大的存储空间。(适用于离线、冷数据、归档数据、作为后端存储为客户打造的离线存储系统,性价比高)
  • [API使用] Fastai中的API映射
    考虑到Fastai应用的广泛,想问下MindSpore有没有与Fastai库相对应的API映射,就像MindSpore与PyTorch和TenserFlow对应的文档一样。
  • [问题求助] Roma API网关-测试接口:Authorization failed
    租户:Hi-stylhoc问题:综合安防-视频调阅板块功能调测:按调测步骤到最后一步Roma应用“Hi-stylhoc__视频标准接口”下,“获取设备列表”接口测试一直报:Authorization failed,最早相同的参数测试过一次,是正常的,今天测试一直不正常只传channel参数能正常查询,参数全传就报错,参数正确的:【日志信息】(可选,上传日志内容或者附件)
  • [APIG] smc2.0 安装好APIG后测试不通过
    SMC版本:HUAWEI SMC 2.0 V600R019C10SPC600APIG版本:APIG 6.5.0.SPC100smc上配置了用户和密码安装APIG后测试接口使用postman测试,返回异常
  • [介绍/入门] Python-APIG触发器,http调用云函数
    创建云函数首先创建一个云函数,这里选择事件函数python3.6版本。函数创建成功后如下图所示:默认的代码:功能解释:将从函数入口传递的event变量值转为字符串并返回构造的字典                 # -*- coding:utf-8 -*- import json def handler (event, context): return { "statusCode": 200, # 函数返回状态值 "isBase64Encoded": False, # 内容是否为base64编码 "body": json.dumps(event), # 函数返回主体,这里为解码后的event "headers": { # 请求的返回头字段 "Content-Type": "application/json" # 内容类型为 json类型 } }创建APIG触发器点击创建啊触发器,并选择安全认证方式为“None”,再点击确定。创建成功后即可看到调用的URL。使用工具对URL进行请求,即可得到触发函数的返回结果。