根据返回字段名进行查询数据的方法
在Java后端开发中,根据前端返回的字段名动态查询数据库是一种常见的需求。这种需求通常通过使用反射和动态SQL来实现。下面是一个完整的代码示例,它展示了如何根据前端返回的字段名动态查询数据库中的数据。
一、根据前端返回的字段名动态查询数据库中的数据示例
1.准备工作
(1)数据库设置:
-
假设我们有一个名为users的表,结构如下:
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(255),email VARCHAR(255),age INT );
-
插入一些测试数据:
INSERT INTO users (name, email, age) VALUES ('Alice', 'alice@example.com', 30); INSERT INTO users (name, email, age) VALUES ('Bob', 'bob@example.com', 25);
(2)依赖库:
- 使用
MySQL
作为数据库。 - 使用
JDBC
进行数据库连接。 - 使用
Spring Boot
简化配置和依赖管理(但示例中不涉及复杂的Spring框架功能,只关注核心逻辑)。
2.核心代码
(1)数据库连接配置
首先,在src/main/resources
目录下创建一个application.properties
文件,配置数据库连接信息:
spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name
spring.datasource.username=your_database_username
spring.datasource.password=your_database_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
(2) 动态查询工具类
创建一个工具类DynamicQueryUtil
,用于根据字段名生成动态SQL并执行查询:
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class DynamicQueryUtil {@Value("${spring.datasource.url}")private String url;@Value("${spring.datasource.username}")private String username;@Value("${spring.datasource.password}")private String password;public List<Map<String, Object>> queryByFields(List<String> fields, String tableName) {List<Map<String, Object>> results = new ArrayList<>();String sql = "SELECT " + String.join(", ", fields) + " FROM " + tableName;try (Connection conn = DriverManager.getConnection(url, username, password);Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(sql)) {while (rs.next()) {Map<String, Object> row = new HashMap<>();for (String field : fields) {row.put(field, rs.getObject(field));}results.add(row);}} catch (SQLException e) {e.printStackTrace();}return results;}
}
(3)控制器类
创建一个控制器类UserController
,用于接收前端请求并调用动态查询工具类:
import java.util.List;
import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/api/users")
public class UserController {@Autowiredprivate DynamicQueryUtil dynamicQueryUtil;@GetMapping("/query")public List<Map<String, Object>> queryUsers(@RequestParam List<String> fields) {return dynamicQueryUtil.queryByFields(fields, "users");}
}
(4)启动类
创建一个Spring Boot启动类:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DynamicQueryApplication {public static void main(String[] args) {SpringApplication.run(DynamicQueryApplication.class, args);}
}
3.运行示例
(1)启动Spring Boot应用。
(2)使用浏览器或Postman等工具发送GET请求到http://localhost:8080/api/users/query?fields=name,email
。
(3)响应结果应类似于:
[{"name": "Alice","email": "alice@example.com"},{"name": "Bob","email": "bob@example.com"}
]
4.注意事项
(1)安全性:在实际应用中,需要对前端传入的字段名和表名进行校验,防止SQL注入攻击。
(2)性能:频繁拼接SQL字符串并创建连接可能对性能有影响,应考虑使用连接池和缓存机制。
(3)扩展性:可以使用更高级的ORM框架(如MyBatis或Hibernate)来简化数据库操作,并增强安全性和性能。
二、更详细的代码示例
下面是一个更详细的代码示例,它包含了完整的Spring Boot项目结构,并详细解释了每一步。这个示例将展示如何创建一个简单的Spring Boot应用,该应用能够根据前端请求的字段名动态地查询数据库中的数据。
1.项目结构
dynamic-query-example
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── dynamicquery
│ │ │ ├── DynamicQueryApplication.java
│ │ │ ├── controller
│ │ │ │ └── UserController.java
│ │ │ ├── service
│ │ │ │ └── UserService.java
│ │ │ ├── service.impl
│ │ │ │ └── UserServiceImpl.java
│ │ │ ├── util
│ │ │ │ └── DynamicQueryUtil.java
│ │ │ └── model
│ │ │ └── User.java
│ │ ├── resources
│ │ │ ├── application.properties
│ │ │ └── data.sql (可选,用于初始化数据库)
│ └── test
│ └── java
│ └── com
│ └── example
│ └── dynamicquery
│ └── DynamicQueryApplicationTests.java
└── pom.xml
2.pom.xml
首先,确保我们的pom.xml
包含了必要的依赖项,如Spring Boot Starter Web和MySQL Connector。
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>dynamic-query-example</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>dynamic-query-example</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.0</version><relativePath/> <!-- lookup parent from repository --></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
3.application.properties
配置数据库连接信息。
spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name?useSSL=false&serverTimezone=UTC
spring.datasource.username=your_database_username
spring.datasource.password=your_database_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
4.数据模型 User.java
定义一个简单的User
类,它对应数据库中的users
表。
package com.example.dynamicquery.model;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private String email;private Integer age;// Getters and Setters
}
5.动态查询工具类 DynamicQueryUtil.java
这个类将负责根据字段名生成SQL并执行查询。注意,这个示例中我们不会直接使用它,而是用JPA来演示更现代的方法。但为了完整性,我还是提供了这个类的代码。
java复制代码// ... (省略了DynamicQueryUtil类的代码,因为它在这个示例中不会被直接使用)
注意:在实际应用中,我们应该使用JPA的EntityManager
或Spring Data JPA的JpaRepository
来执行动态查询,而不是直接使用JDBC。下面的UserServiceImpl
类将展示如何使用JPA来实现动态查询。
6. 服务接口 UserService.java
定义一个服务接口。
package com.example.dynamicquery.service;import java.util.List;
import java.util.Map;public interface UserService {List<Map<String, Object>> findUsersByFields(List<String> fields);
}
7.服务实现类 UserServiceImpl.java
首先,我们假设 User
类已经存在,并且包含了 id
, name
, email
, 和 age
属性,以及相应的getter和setter方法。这里我们不会完整地展示 User
类,因为它通常很简单,只是包含一些基本的字段和JPA注解。
接下来,我们完善 User_
类,使其能够作为JPA元模型的模拟。在实际项目中,我们会使用JPA提供的元模型生成器来自动生成这些类。
以下是完整的 UserServiceImpl.java
代码,包括一个简化的 User
类定义和完善的 User_
类:
package com.example.dynamicquery.model;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private String email;private Integer age;// Getters and Setterspublic Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}---package com.example.dynamicquery.service.impl;import com.example.dynamicquery.model.User;
import com.example.dynamicquery.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.*;
import java.util.*;@Service
public class UserServiceImpl implements UserService {@Autowiredprivate EntityManager entityManager;@Overridepublic List<Map<String, Object>> findUsersByFields(List<String> fields) {if (fields == null || fields.isEmpty()) {throw new IllegalArgumentException("Fields list cannot be null or empty");}CriteriaBuilder cb = entityManager.getCriteriaBuilder();CriteriaQuery<Object[]> cq = cb.createQuery(Object[].class);Root<User> user = cq.from(User.class);List<Selection<?>> selections = new ArrayList<>();for (String field : fields) {switch (field) {case "id":selections.add(user.get("id"));break;case "name":selections.add(user.get("name"));break;case "email":selections.add(user.get("email"));break;case "age":selections.add(user.get("age"));break;default:throw new IllegalArgumentException("Unknown field: " + field);}}cq.select(cb.array(selections.toArray(new Selection[0])));TypedQuery<Object[]> query = entityManager.createQuery(cq);List<Object[]> results = query.getResultList();List<Map<String, Object>> userList = new ArrayList<>();for (Object[] result : results) {Map<String, Object> userMap = new HashMap<>();for (int i = 0; i < fields.size(); i++) {userMap.put(fields.get(i), result[i]);}userList.add(userMap);}return userList;}// 静态内部类用于模拟JPA的元模型(Metamodel),实际项目中应使用自动生成的元模型// 注意:在实际项目中,我们不需要手动编写这个类,JPA提供者会自动为我们生成。// 这里只是为了演示目的而包含它。private static class User_ {// 这些字段是模拟的,实际中应由JPA工具自动生成public static final SingularAttribute<User, Long> id = mockAttribute("id");public static final SingularAttribute<User, String> name = mockAttribute("name");public static final SingularAttribute<User, String> email = mockAttribute("email");public static final SingularAttribute<User, Integer> age = mockAttribute("age");// 模拟方法,实际中不存在private static <T, X> SingularAttribute<T, X> mockAttribute(String name) {return null; // 实际返回的是由JPA提供者生成的SingularAttribute实例}}// 注意:上面的mockAttribute方法是为了编译通过而添加的,实际代码中应该移除。// 在实际项目中,我们应该直接使用JPA提供的元模型类,而不是这个模拟的User_类。// 由于这个示例是为了演示动态查询,我们保留了User_类,但在实际应用中应忽略它。
}
重要说明:
(1)在实际项目中,我们应该使用JPA提供者(如Hibernate)自动生成的元模型类,而不是上面的 User_
类。这些类通常位于与实体类相同的包中,并且以 _
后缀命名(例如,User_
)。
(2)上面的 mockAttribute
方法是为了编译通过而添加的,实际代码中应该移除。这个方法在实际项目中不存在,因为它只是模拟了JPA元模型的行为。
(3)在调用 user.get(...)
时,我们直接使用了字符串属性名(例如 "id"
, "name"
等)。在实际项目中,我们应该使用JPA元模型类中的静态字段来引用这些属性,以提高类型安全性和重构能力。例如,我们应该使用 User_.id
而不是 "id"
。但是,由于我们在这个示例中模拟了元模型,所以我们直接使用了字符串。
(4)在实际项目中,我们可能还需要处理一些额外的边界情况,比如字段名的大小写敏感性、空值处理等。
(5)考虑到性能和安全性,动态查询应该谨慎使用,并确保传入的字段名是经过验证和授权的。
三、内置的http.server
模块来创建一个基本的HTTP服务器
这里将以Python语言编写一个简单的Web服务器为例,使用内置的http.server
模块来创建一个基本的HTTP服务器。这个示例将展示如何启动一个服务器,并在特定端口上监听请求,然后返回一个简单的HTML响应。
1.代码示例
# 导入必要的模块
from http.server import SimpleHTTPRequestHandler, HTTPServer# 定义一个自定义的请求处理器类,继承自SimpleHTTPRequestHandler
class MyRequestHandler(SimpleHTTPRequestHandler):def do_GET(self):# 设置响应状态码self.send_response(200)# 设置响应头self.send_header('Content-type', 'text/html')self.end_headers()# 准备响应体response_body = """<!DOCTYPE html><html><head><title>Simple Web Server</title></head><body><h1>Hello, World!</h1><p>This is a simple web server running on Python.</p></body></html>"""# 发送响应体self.wfile.write(response_body.encode('utf-8'))# 定义服务器的地址和端口
server_address = ('', 8080)# 创建HTTP服务器对象,传入服务器地址和请求处理器类
httpd = HTTPServer(server_address, MyRequestHandler)# 打印服务器启动信息
print("Starting httpd server on port 8080...")# 启动服务器,开始监听请求
httpd.serve_forever()
2.代码说明:
(1)导入模块:首先,我们导入了SimpleHTTPRequestHandler
和HTTPServer
模块,这两个模块是Python标准库中用于创建HTTP服务器的。
(2)定义请求处理器:我们创建了一个名为MyRequestHandler
的类,继承自SimpleHTTPRequestHandler
。在这个类中,我们重写了do_GET
方法,用于处理GET请求。
(3)设置响应:在do_GET
方法中,我们首先设置了响应的状态码(200表示成功),然后设置了响应头(指定内容类型为HTML),最后准备了响应体(一个简单的HTML页面)。
(4)启动服务器:我们定义了服务器的地址和端口(这里监听所有接口的8080端口),然后创建了HTTPServer
对象,并传入服务器地址和我们自定义的请求处理器类。最后,调用serve_forever
方法启动服务器,使其开始监听请求。
3.运行代码:
将上述代码保存为一个Python文件(例如simple_server.py
),然后在命令行中运行该文件:
bash复制代码python simple_server.py
服务器启动后,我们可以在浏览器中访问http://localhost:8080
,我们将看到一个简单的HTML页面,显示“Hello, World!”和一条消息说明这是一个简单的Web服务器。
这个示例展示了如何使用Python标准库中的模块创建一个基本的Web服务器,并处理HTTP GET请求。根据需要,我们可以进一步扩展这个示例,添加更多的请求处理方法,处理POST请求,或者从请求中获取参数等。
相关文章:
根据返回字段名进行查询数据的方法
在Java后端开发中,根据前端返回的字段名动态查询数据库是一种常见的需求。这种需求通常通过使用反射和动态SQL来实现。下面是一个完整的代码示例,它展示了如何根据前端返回的字段名动态查询数据库中的数据。 一、根据前端返回的字段名动态查询数据库中的…...
使用ENSP实现静态路由
一、双路由器静态路由 1.项目拓扑 2.项目实现 (1)路由器AR1配置 进入系统试图 sys将路由器命名为R1 sysname R1进入g0/0/0接口 int g0/0/0将g0/0/0接口IP地址配置为1.1.1.1/24 ip address 1.1.1.1 24进入g0/0/1接口 int g0/0/1将g0/0/1接口IP地址配置为192.168.1.1/24 ip ad…...
SpringBoot3+Vue3开发图书馆管理系统
1 项目介绍 图书馆管理系统,管理图书、用户、借书、还书、实时监测归还是否逾期,逾期未归还会生成违规记录。违规状态不可借阅图书。需缴纳罚金,消除违规记录。可动态设置图书最多累计借阅数量上限和最长借阅天数上限,当用户满足…...
常见的 git 提交备注类型
在 Git 提交中,常见的提交备注(commit message)遵循一定的约定,这有助于代码管理、版本控制以及团队协作。fix 和 feat 是常见的提交类型,下面是这两个的含义,以及其他常见的提交类型。 常见的 Git 提交备…...
Redis 的代理类注入失败,连不上 redis
在测试 redis 是否成功连接时,发现 bean 没有被创建成功,导致报错 根据报错提示,需要我们添加依赖: <dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId>&l…...
Hook 技术:修改 Android 系统属性,提升应用调试和定制化能力
Hook 技术:修改 Android 系统属性,提升应用调试和定制化能力 我知道很多小伙伴,尤其是玩 Android 的开发者,都会有这种需求: 想修改设备的 系统属性,比如 设备型号、API 版本、屏幕分辨率 或 密度&#x…...
Excel如何把两列数据合并成一列,4种方法
Excel如何把两列数据合并成一列,4种方法 参考链接:https://baijiahao.baidu.com/s?id=1786337572531105925&wfr=spider&for=pc 在Excel中,有时候需要把两列或者多列数据合并到一列中,下面介绍4种常见方法,并且提示一些使用注意事项,总有一种方法符合你的要求:…...
英文版本-带EXCEL函数的数据分析
一、问题: 二、表格内容 三、分析结果 四、具体的操作步骤: 销售工作表公式设计与数据验证 类别(Category)列公式: 在Category列(假设为D列),根据ProductCode在Catalogue工作表中查找…...
LangChain入门
LangChain入门 | 豆包MarsCode AI 刷题 本篇文章为《LangChain 实战课》前三节课的总结性文章,主要内容包含内容梳理与总结,学习记录,以及一些思考。 01开篇词|带你亲证AI应用开发的“奇点”时刻 内容 这篇文章介绍…...
STM32-- 串口介绍
rs485、rs232、rs422 rs485使用: max3485:3.3v左右驱动 max485:5v左右驱动,不过有时候3.3v驱动也可以使用,具体有什么问题或者通过电路规避问题还没有了解过。 rs485和rs422有相同的地方,485满足422的规…...
【Python TensorFlow】进阶指南(续篇三)
在前几篇文章中,我们探讨了TensorFlow的高级功能,包括模型优化、分布式训练、模型解释等多个方面。本文将进一步深入探讨一些更具体和实用的主题,如模型持续优化的具体方法、异步训练的实际应用、在线学习的实现细节、模型服务化的最佳实践、…...
仓颉——申请内测、环境搭建、编译测试
2024年6月21日,华为仓颉正式公开发布。 不少同学看过仓颉白皮书后,都在找SDK从哪下载,HelloWorld怎么跑。仓颉公众号也及时发布了内测的方式,我也亲自走了一遍整个流程, 一,申请内测 关注“仓颉编程语言…...
C语言教程指针笔记整理(二)
https://www.bilibili.com/video/BV1cx4y1d7Ut?spm_id_from333.788.videopod.episodes&vd_sourcee8984989cddeb3ef7b7e9fd89098dbe8&p107 本篇为贺宏宏老师C语言教程指针部分笔记整理 //8-19 一维数组和二维数组 // int arr[4] [][][][] //含义: //1.arr…...
3.无重复字符的最长子串 python
无重复字符的最长子串 题目描述示例 1:示例 2:示例 3:提示:题目链接 解题思路Python 实现详细解释 题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的最长 子串的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子…...
NIST 发布后量子密码学转型战略草案
美国国家标准与技术研究所 (NIST) 发布了其初步战略草案,即内部报告 (IR) 8547,标题为“向后量子密码标准过渡”。 该草案概述了 NIST 从当前易受量子计算攻击的加密算法迁移到抗量子替代算法的战略。该草案于 2024 年 11 月 12 日发布,开放…...
高危,Laravel参数注入漏洞安全风险通告
今日,亚信安全CERT监控到安全社区研究人员发布安全通告,披露了Laravel 参数注入漏洞(CVE-2024-52301)。在受影响的版本中,Application.php 文件的 detectEnvironment 函数直接使用了 $_SERVER[argv],但没有检查运行环境是否为 CLI…...
【漏洞复现】|智互联SRM智联云采系统quickReceiptDetail SQL注入漏洞
漏洞描述 智互联(深圳)科技有限公司SRM智联云采系统针对企业供应链管理难题,及智能化转型升级需求,智联云采依托人工智能、物联网、大数据、云等技术,通过软硬件系统化方案,帮助企业实现供应商关系管理和采购线上化、移动化、智能…...
【Visual Studio系列教程】如何在 VS 上编程?
上一篇博客中,我们介绍了《什么是 Visual Studio?》。本文,我们来看第2篇《如何在 VS 上编程?》。阅读本文大约10 分钟。我们会向文件中添加代码,了解 Visual Studio 编写、导航和了解代码的简便方法。 本文假定&…...
Pytest-Bdd-Playwright 系列教程(12):步骤参数 parsers参数解析
Pytest-Bdd-Playwright 系列教程(12):步骤参数 & parsers参数解析 前言一、什么是步骤参数?二、pytest-bdd 的步骤参数用法2.1 简单字符串解析2.2 自定义正则表达式解析2.3 参数类型转换 三、案例:基于 pytest-bdd…...
java 增强型for循环 详解
Java 增强型 for 循环(Enhanced for Loop)详解 增强型 for 循环(也称为 “for-each” 循环)是 Java 从 JDK 5 开始引入的一种便捷循环语法,旨在简化对数组或集合类的迭代操作。 1. 基本语法 语法格式 for (类型 变量…...
RUST学习教程-安装教程
文章目录 参考文档安装教程更新卸载 参考文档 https://course.rs/first-try/installation.html 安装教程 Linux或者mac安装教程 curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh安装完成,当出现command not found的时候,需要source一下…...
第十六届蓝桥杯模拟赛(第一期)-c++/c
c/c蓝桥杯模拟赛题解,非常详细 质因数 1、填空题 【问题描述】 如果一个数 p 是个质数,同时又是整数 a 的约数,则 p 称为 a 的一个质因数。 请问 2024 有多少个质因数。 【答案提交】 这是一道结果填空的题,你只需要算出结果后提…...
使用uniapp编写APP的文件上传
使用uniapp插件文件选择、文件上传组件(图片,视频,文件等) - DCloud 插件市场 实用效果: 缺陷是只能一个一个单独上传...
Go语言从入门到精通
go相关命令 //对go源码进行编译,生成.exe文件 go build go文件名//直接运行go源码(生成.exe文件执行后,又删除.exe文件) go run go文件名go中的package和import /*package:用来声明这个文件是属于哪个包的*/ package…...
捉虫记录02-Nacos访问失败
目录 一、问题 二、排查 三、解决方案 一、问题 在访问nacos的时候出现以下问题: 二、排查 先用docker logs nacos来查找报错信息 docker logs nacos 看问题报错就是数据源问题,nacos没能连接上mysql 三、解决方案 第一步 docker restart mysql …...
安宝特方案 | AR助力紧急救援,科技守卫生命每一刻!
在生死时速的紧急救援战场上,每一秒都至关重要!随着科技的发展,增强现实(AR)技术正在逐步渗透到医疗健康领域,改变着传统的医疗服务模式。 安宝特AR远程协助解决方案,凭借其先进的技术支持和创新…...
超详细:Redis分布式锁
如何基于 Redis 实现一个最简易的分布式锁? 不论是本地锁还是分布式锁,核心都在于“互斥”。 在 Redis 中, SETNX 命令是可以帮助我们实现互斥。SETNX 即 SET if Not eXists (对应 Java 中的 setIfAbsent 方法),如果 key 不存在…...
@Autowired 和 @Resource思考(注入redisTemplate时发现一些奇怪的现象)
1. 前置知识 Configuration public class RedisConfig {Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template new RedisTemplate<>();template.setConnectionFactory(facto…...
MTK主板定制_联发科主板_MTK8766/MTK8768/MTK8788安卓主板方案
主流市场上的MTK主板通常采用联发科的多种芯片平台,如MT8766、MT6765、MT6762、MT8768和MT8788等。这些芯片基于64位Cortex-A73/A53架构,提供四核或八核配置,主频可达2.1GHz,赋予设备卓越的计算与处理能力。芯片采用12纳米制程工艺…...
k8s篇之控制器类型以及各自的适用场景
1. k8s中控制器介绍 在 Kubernetes 中,控制器(Controller)是集群中用于管理资源的关键组件。 它们的核心作用是确保集群中的资源状态符合用户的期望,并在需要时自动进行调整。 Kubernetes 提供了多种不同类型的控制器,每种控制器都有其独特的功能和应用场景。 2. 常见的…...
VideoCrafter模型部署教程
一、介绍 VideoCrafter是一个功能强大的AI视频编辑和生成工具,它结合了深度学习和机器学习技术,为用户提供了便捷的视频制作和编辑体验。 系统:Ubuntu22.04系统,显卡:4090,显存:24G 二、基础…...
mysql 与 mybatis 错误记录
DATE_FORMAT(FROM_UNIXTIME(start_time / 1000)只能传秒级时间戳,毫秒级时间戳group后不能select; tinyint(1)会被mybatis自动翻译为Boolean值,可以使用resultMap重新映射一下来解决,select使用了别名,在resultMap中映射column也必…...
本地git多用户ssh配置
仅作备份,不做解释 1. ~/.ssh/config Host jeadyx.gitee.com HostName gitee.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_jeadyxHost jeady5.gitee.com HostName gitee.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_…...
macbook外接2k/1080p显示器调试经验
准备工具 电脑 满足电脑和显示器要求的hdmi线或者转接头或者扩展坞 betterdisplay软件 Dell P2419H的最佳显示信息如下 飞利浦 245Es 2K的最佳显示比例如下 首选1152...
如何删除Kafka中的数据以及删除topic
如何删除Kafka数据已经以及删除topic呢? 1、删除数据 先启动Kafka实例 docker exec -it kafka-0 /bin/bash #进去容器 rm -rf /bitnami/kafka/data/* #删除数据 exit #退出如果删除失败,可能是数据不存在于/bitnami/kafka/data,使用 cd /o…...
wordpress二开-WordPress新增页面模板-说说微语
微语说说相当于一个简单的记事本,使用还是比较方便的。这个版本的说说微语CSS样式不兼容,可能有些主题无法适配,但是后台添加内容,前端显示的逻辑已经实现。可以当作Word press二开中自定义页面模板学习~ 一、后台添加说说微语模…...
Java学习笔记--数组常见算法:数组翻转,冒泡排序,二分查找
目录 一,数组翻转 二,冒泡排序 三,二分查找(一尺之锤,日取其半,万世不竭) 一,数组翻转 1.概述:数组对称索引位置上的元素互换,最大值数组序号是数组长度减一 创建跳板…...
使用 OpenAI 进行数据探索性分析(EDA)
探索性数据分析(Exploratory Data Analysis, 简称 EDA)是数据分析中不可或缺的环节,帮助分析师快速了解数据的分布、特征和潜在模式。传统的 EDA 通常需要手动编写代码或使用工具完成。现在,通过 OpenAI 的 GPT-4 模型,…...
Jdk1.8新特性
新增的类以及常用的方法 在Java的java.util.concurrent包中,除了之前提到的并发工具类外,还有一些新增的类以及它们常用的方法。以下是一些例子: 新增的类 CompletableFuture: CompletableFuture是Java 8中引入的一个类&a…...
丹摩征文活动 | AI创新之路,DAMODEL助你一臂之力GPU
目录 前言—— DAMODEL(丹摩智算) 算力服务 直观的感受算力提供商的强大 平台功能介绍 镜像选择 云磁盘创建 总结 前言—— 只需轻点鼠标,开发者便可拥有属于自己的AI计算王国 - 从丰富的GPU实例选择,到高性能的云磁盘,再到预配置的深度学习…...
mock.js:定义、应用场景、安装、配置、使用
前言:什么是mock.js? 作为一个前端程序员,没有mockjs你不感觉很被动吗?你不感觉你的命脉被后端那个男人掌握了吗?所以,我命由我不由天!学学mock.js吧! mock.js 是一个用于生成随机…...
优化 MFC CGridCtrl 的表格布局与功能
在使用 MFC 的 CGridCtrl 控件创建表格时,遇到的一个典型问题是,当表格滚动条出现时,最后一列会显示空白。这篇博客将记录解决这一问题的详细过程,同时总结了 CGridCtrl 初始化及优化的关键步骤,帮助开发者快速搭建一个…...
Unity 编辑器下 Android 平台 Addressable 加载模型粉红色,类似材质丢失
Unity 编辑器下 Android 平台 Addressable 加载模型粉红色,类似材质丢失 Addressable Play Mode Script加载模式 选择 Use Existiing Build 1.Unity 切换到 PC 平台,执行 Addressable Build 运行,加载 bundle 内的预制体 显示正常 2.Unit…...
直播预告| 深入探索 DB-GPT GraphRAG 的设计解读与优化
前言 感谢DB-GPT的社区朋友持续关注我们的源码解读系列~在前几期的直播中,我们深入探讨了DB-GPT的架构设计、智能体工作流、Agent开发等话题,受到了热烈反响。 本期,我们邀请到了社区的老朋友,也是DB-GPT GraphRag的维…...
C语言:指针变量作为函数参数
在c语言中,函数的参数不仅可以是整数,小数、字符等具体的数据,还可以是指向他们的指针,用指针变量做函数,参数可以将函数外部的地址传递给函数内部,使得在函数内部可以操作函数外部的数据,并且这…...
机器学习基础06
目录 1.梯度下降 1.1梯度下降概念 1.2梯度下降公式 1.3学习率 1.4实现梯度下降 1.5API 1.5.1随机梯度下降SGD 1.5.2小批量梯度下降MBGD 1.6梯度下降优化 2.欠拟合过拟合 2.1欠拟合 2.2过拟合 2.3正则化 2.3.1L1正则项(曼哈顿距离) 2.3.2…...
RecyclerView详解——(四)缓存复用机制
稍微看了下源码和部分文章,在此做个小小的总结 RecyclerView,意思为可回收的view,那么相对于listview,他的缓存复用肯定是一大优化。 具体而言,当一个列表项被移出屏幕后,RecyclerView并不会销毁其视图&a…...
向量数据库FAISS之五:原理(LSH、PQ、HNSW、IVF)
1.Locality Sensitive Hashing (LSH) 使用 Shingling MinHashing 进行查找 左侧是字典,右侧是 LSH。目的是把足够相似的索引放在同一个桶内。 LSH 有很多的版本,很灵活,这里先介绍第一个版本,也是原始版本 Shingling one-hot …...
速盾:CDN缓存的工作原理是什么?
CDN(内容分发网络)是一种将内容分发到全球不同地理位置的网络架构,以提供更快速、可靠的内容传输。其核心原理是利用缓存技术,将数据内容分布到离用户最近的边缘节点上。当用户请求内容时,CDN将根据用户的IP地址&#…...
使用 Elastic AI Assistant for Search 和 Azure OpenAI 实现从 0 到 60 的转变
作者:来自 Elastic Greg Crist Elasticsearch 推出了一项新功能:Elastic AI Assistant for Search。你可以将其视为 Elasticsearch 和 Kibana 开发人员的内置指南,旨在回答问题、引导你了解功能并让你的生活更轻松。在 Microsoft AI Services…...