springboot第27集:springboot-mvc,WxPay

news2025/7/19 12:47:58

在数据库中,DISTINCT 关键字用于查询去重后的结果集。它用于从查询结果中去除重复的行,只返回唯一的行。

要使用 DISTINCT 关键字,可以将其放置在 SELECT 关键字之前,指示数据库返回去重后的结果。

请注意,DISTINCT 关键字应用于所有指定的列,即返回的结果将根据指定的所有列进行去重。

使用 DISTINCT 关键字时要注意以下几点:

  • DISTINCT 关键字适用于查询多个列或单个列的情况。

  • DISTINCT 关键字是大小写不敏感的,因此 DISTINCTdistinct 是等效的。

  • DISTINCT 关键字通常与 SELECT 语句一起使用,但也可以与 COUNTSUMAVG 等聚合函数一起使用。

  1. 检查MyBatis配置文件(如 mybatis-config.xml)或特定于框架的配置文件(如Spring配置),确保正确配置了 com.wxapp.system.mapper.SysUserMapper 的命名空间。

  2. 验证 getUserByPhone 语句是否在 SysUserMapper 命名空间中定义。打开与 SysUserMapper 相应的映射器XML文件,并确认是否存在ID为 getUserByPhone 的SQL语句。

  3. 确保您的服务或DAO类中的SQL语句ID(getUserByPhone)与映射器XML文件中定义的ID匹配。仔细检查是否存在任何拼写错误或不一致之处。

  4. 如果映射器XML文件中缺少SQL语句或命名不同,您需要相应地添加或修改它。确保语句具有正确的语法,并与您的数据库模式匹配。

  5. 保存更改,如果需要重新构建应用程序,并重试触发错误的操作。

错误消息:"msg": "Invalid bound statement (not found): com.wxapp.system.mapper.SysUserMapper.getUserByPhone"

错误消息指出了一个"Invalid bound statement"(无效的绑定语句)错误,并提到了com.wxapp.system.mapper.SysUserMapper.getUserByPhone。

这个错误通常发生在MyBatis无法找到指定命名空间中映射的SQL语句时。

要解决这个问题,您可以按照以下步骤进行操作:

  1. 首先,请确保您的MyBatis配置文件中正确配置了com.wxapp.system.mapper.SysUserMapper的命名空间。

  2. 然后,打开com.wxapp.system.mapper.SysUserMapper对应的映射文件,检查是否存在getUserByPhone语句。确保语句的ID为getUserByPhone,并且定义了正确的SQL语句。

示例:

<mapper namespace="com.xxxx.system.mapper.SysUserMapper">
<select id="getUserByPhone" resultType="com.wxapp.system.model.SysUser">
    SELECT * FROM users WHERE phone = #{phone}
</select>

进入控制台

gitlab-rails console -e production
# 查询所有的用户

user = User.all

# 通过条件查询用户 常见的where条件有 username email state

user = User.where(id:1).first
user = User.find\_by(username:'root')
user = User.find\_by(email:'<admin@qq.com>')

# 通过id查询用户

user = User.find(1)

# 查询用户某个字段的值 显示当前用户的email

user.email
# 修改用户id为10的密码
user = User.find(10)
user.password = 'new_password'  #如:user.password = '123456'
user.password_confirmation = 'new_password' #如:user.password_confirmation = '123456'
user.save! #保存修改内容

# 退出
exit
cd3a6434f7647576835766fcbd745c61.png
image.png
11eba35b9ea271fd150d19c5f5158241.png
image.png
fc6081b66817976e5a1c198965921ac5.png
image.png
acac7dd45ac565fce11b1ea54ac665d4.png
image.png
ebeab6adf88148ed30140575b874325d.png
image.png
d734337b2dd37c3d6fba096ca5a5cca1.png
image.png
a8d2212924916361eba119bf78642b58.png
image.png

WxPayConfig.java

// 获取商户的私钥文件
private PrivateKey getPrivateKey(String filename) {
 try {
  return PemUtil.loadPrivateKey(new FileInputStream(filename));
 } catch (FileNotFoundException e) {
  throw new RuntimeException("私钥文件不存在", e);
}
// 获取签名验证器
@Bean
public ScheduledUpdateCertificatesVerifier getVerifier() {
 // 获取商户私钥
 PrivateKey privateKey = getPrivateKey(privateKeyPath);
 
 // 私钥签名对象
 PrivateKeySigner privateKeySigner = new PrivateKeySigner(mchSerialNo, privateKey);
 
 // 身份认证对象
 WechatPay2Credentials wechatPay2Credentials = new WechatPay2Credentials(mchId, privateKeySigner);
 
 // 使用定时更新的签名验证器,不需要传入证书
 ScheduledUpdateCertificatesVerifier verifier = new ScheduledUpdateCertificatesVerifier(wechatPay2Credentials, apiV3Key.getBytes(StandardCharsets.UTF_8));
 
 return verifier;
}
// 获取http请求对象
@Bean
public CloseableHttpClient getWxPayClient(ScheduledUpdateCertificatesVerifier verifier) {
 // 获取商户私钥
 PrivateKey privateKey = getPrivateKey(privateKeyPath);
 
 WechatPayHttpClientBuilder builder = WechatPayHttpClientBuilder.create()
  .withMerchant(mchId, mchSerialNo, privateKey)
  .withValidator(new WechatPay2Validator(verifier));
  
 // 通过WechatPayHttpClientBuilder构造的HttpClient,会自动的处理签名和验证签,并进行证书自动更新
 CloseableHttpClient httpClient = builder.build();
 
 return httpClient;
}
162e5384f6158b97f5f34ed7014f043c.png
image.png
af3cfc0e8d7603fd0dedcb0679e58682.png
image.png
config
controller
entity
enums
 -wxpay
mapper
service
vo

PayType

@AllArgsConstructor
@Getter
public enum PayType {
 // 微信
 WXPAY("微信"),
 // 支付宝
 ALIPAY("支付宝");
 // 类型
 private final String type;
}

在 Spring Boot 中,"VO" 和 "Domain" 是两个常见的概念,用于表示不同的数据对象。

  1. VO (View Object):

  • VO 是视图对象,用于在前端和后端之间传递数据。

  • 它通常用于展示层(View Layer)或者前端展示的数据模型。

  • VO 对象的属性通常是根据前端页面的需求来定义的,可以包含与前端交互所需的各种属性。

  • VO 对象一般是只读的,不包含业务逻辑。

Domain (领域对象):

  • Domain 是领域对象,用于表示业务领域中的核心业务对象。

  • 它通常用于业务层(Service Layer)或者持久层(Persistence Layer)。

  • Domain 对象的属性和行为是根据业务规则和领域需求来定义的,它代表了真实的业务实体。

  • Domain 对象通常包含业务逻辑,封装了对数据的操作和处理。

VO 和 Domain 在设计模式中属于不同的概念,它们的职责和作用也不同。

在实际开发中,为了解耦和模块化,常常会使用 DTO (Data Transfer Object) 对象在不同层之间传输数据。DTO 可以根据具体的业务需求从 Domain 对象中抽取部分属性,并添加一些必要的额外属性,以满足数据传输的需要。在这种情况下,DTO 可以充当 VO 的角色,用于传递数据给前端。

总结:

  • VO (View Object) 是用于前端数据展示的对象,通常只包含与前端交互所需的属性。

  • Domain (领域对象) 是用于表示业务领域中的核心业务对象,包含业务逻辑和数据操作。

  • DTO (Data Transfer Object) 可以在不同层之间传输数据,可以根据具体需求从 Domain 对象中抽取部分属性,并添加一些额外属性。在某些情况下,DTO 可以充当 VO 的角色。

要优化网页加载速度和性能,可以考虑以下几个方面:

  1. 压缩和缩小文件:使用压缩工具(如Gzip)来减小文件大小,减少传输时间。同时,优化图片大小和格式,使用CSS和JavaScript压缩工具来减小它们的文件大小。

  2. 启用缓存:通过使用HTTP缓存头(例如Expires,Cache-Control)来启用浏览器缓存。这样可以减少对服务器的请求,提高页面加载速度。

  3. 减少HTTP请求:将多个CSS文件合并为一个文件,并将多个JavaScript文件合并为一个文件,从而减少HTTP请求的数量。

  4. 延迟加载:将非关键和不可见的元素延迟加载,例如图片、JavaScript和CSS文件。这可以通过使用懒加载技术或按需加载来实现。

  5. 压缩和优化图片:使用适当的图像格式(如JPEG、PNG)和压缩工具来优化图像。同时,调整图像的尺寸和分辨率,以适应页面布局和显示需求。

  6. 使用CDN加速:使用内容分发网络(CDN)来加速静态文件的传输,使其从离用户更近的服务器加载。

  7. 最小化重绘和回流:避免使用昂贵的CSS属性和操作,这可能导致页面的重绘(repaint)和回流(reflow)。尽量使用CSS3硬件加速特性,减少对DOM的频繁操作。

  8. 优化JavaScript执行:避免使用耗时的JavaScript操作和循环,优化算法和代码逻辑,减少不必要的DOM操作。

  9. 使用异步加载:使用异步加载脚本(如async和defer)来确保JavaScript文件不会阻塞页面的加载和渲染过程。

  10. 使用缓存优化技术:使用缓存技术,如内存缓存、本地存储和会话存储,减少对服务器的请求。

  11. 定期进行性能测试和优化:使用工具和技术(如浏览器开发者工具、性能分析工具等)对网页进行定期的性能测试和优化,找出潜在的性能瓶颈并进行改进。

在Spring Boot中,"framework"(框架)通常指的是Spring框架(Spring Framework)。Spring是一个开源的Java应用程序框架,它提供了一种综合的编程和配置模型,用于构建现代化的Java应用程序。

Spring框架提供了许多功能和特性,使得开发Java应用程序更加简单和高效。它的核心原则之一是面向切面编程(AOP),它允许开发人员通过将横切关注点(例如事务管理、安全性、日志记录等)从应用程序逻辑中分离出来,以提高代码的模块化和可重用性。

Spring框架还提供了一个轻量级的容器(IoC容器),用于管理应用程序中的对象和依赖关系。它通过依赖注入(DI)的方式,将对象之间的依赖关系委托给容器来管理,从而简化了对象的创建和管理过程。

除了IoC容器和AOP,Spring框架还提供了许多其他功能,如数据访问(使用Spring Data)、Web开发(使用Spring MVC)、安全性(使用Spring Security)、集成消息(使用Spring Integration)等。这些功能模块可以根据应用程序的需求进行选择和集成,以构建出符合业务需求的完整的Java应用程序。

总的来说,Spring框架是Spring Boot的基础,它提供了一个强大且灵活的开发框架,使得构建Java应用程序更加简单、模块化和可扩展。Spring Boot则在此基础上提供了一种快速、便捷的方式来构建和配置Spring应用程序,提供了自动配置、嵌入式Web服务器等功能,使得开发者能够更加专注于业务逻辑的实现。

加群联系作者vx:xiaoda0423

仓库地址:https://github.com/webVueBlog/JavaGuideInterview

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/648370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux常用命令——getenforce命令

在线Linux命令查询工具 getenforce 显示当前SELinux的应用模式&#xff0c;是强制、执行还是停用。 补充说明 grename命令可以重命名卷组的名称。 语法 getenforce例子 查看当前SELinux的应用模式。 [rootlocalhost ~]# getenforce Enforcing在线Linux命令查询工具 原文…

ChatGPT时代,我的新书《智慧共生》上市了

告诉你一个好消息&#xff0c;我在人民邮电出版社的第二本书《智慧共生&#xff1a;ChatGPT 与 AIGC 生产力工具实践》刚刚上市&#xff0c;你现在就可以在 京东 和 当当买到了。 有人把 2022 年称作 AIGC&#xff08;人工智能生成内容&#xff09; 的元年&#xff0c;我深表赞…

浅谈数据中台之数据开发

目 录 01 前言‍ 02 中台概念及背景 ‍‍‍‍‍‍‍ 03 数据中台建设方法‍‍‍‍‍‍ 04 数据开发实践 01‍ 前言‍‍ 2015年阿里在国内首次提出了中台概念&#xff0c;由阿里引领发展&#xff0c;迅速在互联网企业中形成了一股浪潮。在数字化转型的道路上&#xff0c;为了…

【AUTOSAR】UDS协议的代码分析与解读(五)----ECU诊断服务

8 诊断服务 8.1 总览 此章节定义了本规范中可使用的诊断服务及其执行规则。 下表列出了h事业部定义的所有UDS诊断服务。ECU最终实现与下述定义不符之处必须得到h事业部 的认可。服务实现内容需在零部件诊断规范中详细说明。 表 9 诊断服务支持列表 诊断服务列表 APP Bootlo…

【手撕代码】同步 FIFO、LIFO/Stack

FIFO 是FPGA设计中最有用的模块之一。FIFO 在模块之间提供简单的握手和同步机制&#xff0c;是设计人员将数据从一个模块传输到另一个模块的常用选择。 在这篇文章中&#xff0c;展示了一个简单的 RTL 同步 FIFO&#xff0c;可以直接在自己的设计中配置和使用它&#xff0c;该设…

社区供稿 | RLHF 实践中的框架使用与一些坑 (TRL, LMFlow)

1 前言 之前看见文章总结了常见的一些 RLHF 框架的经验, 但是似乎没看见 Hugging Face 自己维护的 TRL 库的相关文章, 正好最近调 TRL 比较多, 就想写一个文章分享一下使用过程中踩到的坑&#xff0c;另外也介绍一下我们的全流程框架 LMFlow 。 LMFlow 框架示意图。 我们主要用…

架构思维的六要素

很多人都在私信问我随着ChatGPT等技术的兴起&#xff0c;自己的饭碗会不会没了。我的观点是&#xff1a;ChatGPT能做的工作十几年前早就没了。 十几年前还看到过招聘广告上写招程序员的&#xff0c;现在都是工程师起步&#xff0c;工程师是要有架构思维的。 像十几年前的黄金时…

手写SpringBoot启动器主要步骤

这里写目录标题 背景过程2.1自启动实现原理2.2手动实现SpringBoot自启动2.2.1宏观2.2.1微观2.2.1.1三个服务之间调用2.2.1.2自定义注解2.2.1.1业务组装2.2.1.3启动类 升华自定义注解&#xff1a;手动装配组件&#xff1a;简化启动过程&#xff1a;自动化注入依赖&#xff1a;简…

马原第三章复习1.

唯物史观和唯心史观过去出过小题 社会意识出小题 社会存在一般出大题 124 社会存在和社会意识(往往出大题) 社会历史性的基本问题 两种根本对立的历史史观 唯心主义: 至多考察人的思想动机 没有考虑思想背后的物质动因和经济根源 把社会史观看成人的思想,,不懂得…

关于酒店宾馆电气火灾隐患的预防与整改措施介绍 安科瑞 许敏

摘要&#xff1a;本文分析了酒店、宾馆电气火灾隐患的特点及产生的主要原因&#xff0c;并依此提出了消除火灾隐患的整改措施。 关键词:酒店宾馆&#xff1b;火灾&#xff1b;隐患&#xff1b;预防&#xff1b;整改&#xff1b;措施 1前言 随着旅居服务业的快速发展&#xf…

CVPR 2023 | 香港理工提出GrowSP:3D场景的无监督语义分割

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 点击进入—>【目标检测和Transformer】交流群 GrowSP: Unsupervised Semantic Segmentation of 3D Point Clouds 论文链接&#xff1a;https://arxiv.org/abs/2305.16404 代码&#xff1…

2023/6/11总结

CSS Less嵌套 子元素的选择器可以直接写在父元素里面。 如果不是它的后代元素&#xff0c;比如你想写伪类选择器、交集选择器&#xff0c;需要在前面加&号。 Less运算&#xff1a; 加减乘除都可以&#xff0c;运算符必须用空格隔开。如果俩个元素都有单位&#xff0…

binfmt_misc

一&#xff1a;binfmt_misc是什么 binfmt_misc是内核中的一个功能&#xff0c;它能将非本机的二进制文件与特定的解析器自动匹配起来&#xff0c;进行二进制解析。 例如&#xff0c;在x86上解析arm64架构的二进制。 通过binfmt_misc可以注册解析器来处理指定二进制文件格式的请…

Qt|QDialog的创建及使用

文章目录 创建一个新的类继承QDialog设置标题去掉问号&#xff0c;只保留关闭使窗口在屏幕中心显示设置窗口大小QDialog没有任务栏窗口图标问题将窗口永远置于上层可见 不会被遮盖阻塞除当前窗口之外的所有窗口添加closeEvent hideEvent同理调用dialog类接收dialog返回状态&…

华为OD机试真题 JavaScript 实现【跳房子II】【2023 B卷 100分】,附详细解题思路

一、题目描述 跳房子&#xff0c;也叫跳飞机&#xff0c;是一种世界性的儿童游戏。 游戏参与者需要分多个回合按顺序跳到第1格直到房子的最后一格&#xff0c;然后获得一次选房子的机会&#xff0c;直到所有房子都被选完&#xff0c;房子最多的人获胜。 跳房子的过程中&…

XGBoost超参数调优指南

本文将详细解释XGBoost中十个最常用超参数的介绍&#xff0c;功能和值范围&#xff0c;及如何使用Optuna进行超参数调优。 对于XGBoost来说&#xff0c;默认的超参数是可以正常运行的&#xff0c;但是如果你想获得最佳的效果&#xff0c;那么就需要自行调整一些超参数来匹配你的…

jupyter lab升级或者安装插件后编译失败

错误回显 报错提示&#xff1a;please run ‘jupyter lab build’ on the server for full output&#xff0c;那么就进入prompt执行一下jupyter lab build 继续接着报错 If you dont already have a jupyter_config.py file, you can create one by adding a blank file of th…

线下实体衰落,真是电商惹祸?实是贪婪以及服务理念落后所致

网上时不时就有人指责电商的兴起导致了线下实体衰落&#xff0c;然而如果各位比较了线下实体与电商的差异&#xff0c;就会明白导致如此结果完全是咎由自取&#xff0c;因为线下实体太贪婪以及服务理念落后于时代。 笔者最近就购买了某款国产手机&#xff0c;在该国产手机品牌的…

集显独显并存,ubuntu安装显卡驱动的坑

一、安装和启动黑屏卡死 1、怎么办&#xff1f;显示器先接集显&#xff0c;完成驱动安装。 &#xff08;1&#xff09;屏蔽nouveau驱动 只要是安装过NVIDIA显卡驱动的&#xff0c;nouveau一般都被禁止了。可以通过命令&#xff1a; lsmod | grep nouveau 查看。如果没有任…

实现设备的延时控制

1. 引言 当搭建IoT管理后台后&#xff0c;APP、设备、云端三端就可以实现交互&#xff1b;当点击APP中的控制按钮&#xff0c;其控制指令就可以经过云端转发到设备执行&#xff0c;当设备执行后将设备的状态上报到云端&#xff0c;APP通过轮训可以取到设备此时的状态&#xff0…