MyBatis —— 多种查询及映射关系
前言
上一篇文章中荔枝梳理了有关MyBatis的相关环境配置和核心配置文件及其模板的设置和生成,而在这篇文章中荔枝会着重梳理MyBatis多种查询情况、特殊SQL执行以及两表联查时映射关系的处理。希望对需要的小伙伴有帮助~~~
文章目录
前言
一、多种查询情况
1.1 查询单条数据
1.2 查询多条数据
1.3 特殊SQL的执行
1.3.1 模糊查询
1.3.2 批量删除
1.3.3 动态设置表名
1.3.4 获取自增主键
二、自定义映射
2.1 解决字段名和属性名不一致的三种方案
2.2 多对一的映射关系
2.2.1 通过级联属性赋值解决多对一映射
2.2.2 通过association解决多对一映射问题
2.2.3 association分步查询解决多对一映射问题
2.2.4 延迟加载
2.3 一对多映射关系
2.3.1 Collection解决一对多映射关系
2.3.2 分步查询解决一对多映射关系
总结
一、多种查询情况
在MyBatis中,对于数据库的查询来说,如果查询出来的数据只有一条,可以通过实体类对象或者集合(list、map)来接收,如果查询的数据有多条,则一定不能通过实体类来接收,否则会抛出异常TooManyResultException。
1.1 查询单条数据
实体类对象:
User getUserById(@Param("id") Integer id);
list集合:
List<User> getAllUser(@Param("id") Integer id);
map集合
Map<String,Object> getUserByIdToMap(@Param("id") Integer id);
1.2 查询多条数据
list集合:
List<User> getAllUser(@Param("id") Integer id);
map集合:
List<Map<String,Object>> getAllUserToMap(@Param("id") Integer id);
或者借助@MapKey注解
@MapKey("id") //把查询到的数据的某一个字段作为key,查询到的所有数据作为值value
Map<String,Object> getAllUserToMap2(@Param("id") Integer id);
1.3 特殊SQL的执行
在MyBatis中,大多数的查询都可以使用#{}的格式来获取参数,但是有一些特殊SQL的执行则不能直接采用#{}的格式。
1.3.1 模糊查询
采用${}格式
<mapper namespace="com.crj.mapper.SQLMapper">
<!-- List<User> getUserByLike(@Param("username") String username);--><select id="getUserByLike" resultType="User">select * from t_user where username like '%${username}%'</select>
</mapper>
采用concat拼接并采用#{}
<mapper namespace="com.crj.mapper.SQLMapper">
<!-- List<User> getUserByLike(@Param("username") String username);--><select id="getUserByLike" resultType="User">select * from t_user where username like concat('%',#{username},'%')</select>
</mapper>
采用" "拼接SQL
<mapper namespace="com.crj.mapper.SQLMapper">
<!-- List<User> getUserByLike(@Param("username") String username);--><select id="getUserByLike" resultType="User">select * from t_user where username like "%"#{username}"%"</select>
</mapper>
1.3.2 批量删除
在执行批量删除的时候为什么不能使用#{}?这是因为#{}会自动加上单引号从而导致SQL异常无法实现批量删除的功能。
<!-- int deleteMore(@Param("ids") String ids);--><delete id="deleteMore">delete from t_user where id in (${ids})</delete>
1.3.3 动态设置表名
在数据库执行完水平分表之后,MyBatis在执行数据操作的时候就需要动态设置表名从而实现分表查询。这里因为表名是不能加单引号的,所以这里还是采用${}的形式来实现动态分表查询。
<!-- List<User> getUserByTableName(@Param("tableName") String tableName);--><select id="getUserByTableName" resultType="User">select * from ${tableName} where id=1</select>
1.3.4 获取自增主键
插入数据时使用自增主键需要设置insert标签的两个属性:
- useGeneratedKeys:设置当前标签中的SQL使用了自增主键
- keyProperty:将自增的主键的值赋值给传输到映射文件中参数的某个属性
<!-- void insertUser(User user);--><insert id="insertUser" useGeneratedKeys="true" keyProperty="id">insert into t_user values (null,#{username},#{password})</insert>
二、自定义映射
在之前我们使用resultType要求字段名和属性名一致,使用的是一种默认的自动创建的映射关系。但是当字段名和属性名不一致的时候或者处理一对多和多对一的映射关系的时候,我们需要自定义映射关系resultMap。
2.1 解决字段名和属性名不一致的三种方案
- 为字段起别名,保持与属性名一致
<select id="getAllEmp" resultType="Emp">select eid,emp_name empName from t_emp
</select>
- 在核心配置文件中借助setting标签中的mapUnderscoreToCameCase
<!--设置mybatis的全局设置--><settings>
<!-- mapUnderscoreToCameCase:将下划线映射到驼峰命名,默认是false不支持--><setting name="mapUnderscoreToCameCase" value="true"/></settings>
通过将mapUnderscoreToCameCase属性值设置为true,开启mybatis将下划线映射为驼峰命名的功能
- 使用resultMap来自定义映射
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.crj.mybatis.mapper.EmpMapper">
<!-- List<Emp> getAllEmp();--><resultMap id="empResultMap" type="Emp"><!--使用resultMap后建议要把所有字段名和属性之间的关系都声明出来--><id property="eid" column="eid"/><result column="emp_name" property="empName"/> <!--注意这里的映射关系--><result column="age" property="age"/><result column="sex" property="sex"/></resultMap><select id="getAllEmp" resultMap="empResultMap">select * from t_emp</select>
</mapper>
id:唯一标识,不能重复
type:设置映射关系中的实体类类型
这里有两个子标签:id和result。
id:设置主键的映射关系
result:设置普通字段的映射关系
属性 :
property:设置映射关系中的属性名,必须是type属性所设置的实体类类型的属性名
column:设置映射关系中的字段名,是SQL语句查询出的字段名
2.2 多对一的映射关系
这里有员工和部门两张表,分别为二者创建实现类Emp和Dept。在多对一的映射关系中,我们考虑的是多个员工同属于一个部门。
package com.crj.mybatis.pojo;public class Emp {private Integer eid;private String empName;private Integer age;private String sex;private String email;private Dept dept;@Overridepublic String toString() {return "Emp{" +"eid=" + eid +", empName='" + empName + '\'' +", age=" + age +", sex='" + sex + '\'' +", email='" + email + '\'' +", dept=" + dept +'}';}public Dept getDept() {return dept;}public void setDept(Dept dept) {this.dept = dept;}public Emp(Integer eid, String empName, Integer age, String sex, String email) {this.eid = eid;this.empName = empName;this.age = age;this.sex = sex;this.email = email;}public Emp(){}public Integer getEid() {return eid;}public void setEid(Integer eid) {this.eid = eid;}public String getEmpName() {return empName;}public void setEmpName(String empName) {this.empName = empName;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}
}
2.2.1 通过级联属性赋值解决多对一映射
<resultMap id="getEmpAndDept" type="Emp"><id property="eid" column="eid"/><result column="emp_name" property="empName"/><result column="age" property="age"/><result column="sex" property="sex"/><result column="did" property="dept.did"/><result column="dept_name" property="dept.deptName"/></resultMap><!-- Emp getEmpAndDept(@Param("eid") Integer eid);--><select id="getEmpAndDept" resultMap="getEmpAndDept">select * from t_emp left join t_dept on t_emp.did=t_dept.did where t_emp.eid = #{eid}</select>
2.2.2 通过association解决多对一映射问题
其中,对于association中的属性我们需要了解:
- property:需要处理多对一映射关系的属性名
- javaType: 该属性的类型
<resultMap id="getEmpAndDept" type="Emp"><id property="eid" column="eid"/><result column="emp_name" property="empName"/><result column="age" property="age"/><result column="sex" property="sex"/><association property="dept" javaType="Dpet"><id property="did" column="did"></id><result property="deptName" column="dept_name"></result></association></resultMap>
2.2.3 association分步查询解决多对一映射问题
此时association中的property属性的含义不变,但还有两个比较重要的属性需要设置相应的属性值
- select:设置分步查询的sql的唯一标识(一般是设置多对一中一处的mapper接口全类名.方法名)
- column:设置分布查询的条件,在这个例子中,分布查询是依据两个表之间的关系也就是did来实现的。
- fetchType:当开启了全局的延迟加载之后,可以通过此属性手动控制延迟加载的效果
分步查询的第一步:查询员工信息
EmpMapper.java
package com.crj.mybatis.mapper;import com.crj.mybatis.pojo.Emp;
import org.apache.ibatis.annotations.Param;import java.util.List;public interface EmpMapper {/*** 通过分布查询员工以及员工所对应的部门信息* 分布查询第一步:查询员工信息*/Emp getEmpAndDeptByStepOne(@Param("eid") Integer eid);
}
EmpMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.crj.mybatis.mapper.EmpMapper">
<!-- 分步查询,两表联查--><resultMap id="empAndDeptByStepResultMap" type="Emp"><id property="eid" column="eid"/><result column="emp_name" property="empName"/><result column="age" property="age"/><result column="sex" property="sex"/><association property="dept" select="com.crj.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwo" column="did"></association></resultMap>
<!-- Emp getEmpAndDeptByStepOne(@Param("eid") Integer eid);--><select id="getEmpAndDeptByStepOne" resultMap="empAndDeptResultMapTwo">select * from t_emp where eid = #{eid}</select></mapper>
分步查询第二步:根据查询到的员工信息中的did来查询相应的部门信息
DpetMapper.java
package com.crj.mybatis.mapper;import com.crj.mybatis.pojo.Dept;
import org.apache.ibatis.annotations.Param;public interface DeptMapper {/*** 通过分布查询员工以及员工所对应的部门信息* 分布查询第二步:通过did查询员工所对应的部门*/Dept getEmpAndDeptByStepTwo(@Param("did") Integer did);}
DeptMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.crj.mybatis.mapper.DeptMapper">
<!-- Dept getEmpAndDeptByStepTwo(@Param("did") Integer did);--><select id="getEmpAndDeptByStepTwo" resultType="Dept">select * from t_dept where did = #{did}</select>
</mapper>
需要注意的是,分步查询在实际的应用场景中使用的会比较多。
注意:为什么更推荐使用分步查询呢?
这是因为通过分步查询我们可以实现MyBatis的延迟加载(懒加载 )功能,通过分步查询我们可以做到需要查询什么信息就执行什么SQL语句,比如我们仅需要查询员工信息而不需要部门的内容时,通过延迟加载我们只会执行EmpMapper中的SQL语句,同时分步查询也实现了两种不同的查询功能的隔离。MyBatis中默认是不会开启延迟加载的功能滴,
2.2.4 延迟加载
要想实现延迟加载的功能,就必须在全局配置文件中开启相应的延迟加载的开关:
- lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载,默认true;
- aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对像的所有属性。否则,每个属性会按需加载,默认false;
开启延迟加载时针对于当前的所有的分步查询,如果哪一步不需要延迟加载可通过association和collection中的fetchType属性设置当前的分步查间是否使用延迟加载,fetchType="lazy(延迟加载) l eager(立即加载)'
<settings>
<!-- 开启延迟加载--><setting name="lazyLoadingEnabled" value="true"/></settings>
2.3 一对多映射关系
2.3.1 Collection解决一对多映射关系
Dpet.java
//一对多的映射关系private List<Emp> emps;
DeptMapper.java
/*** 以部门为主表来获取部门中所有的员工信息*/Dept getDeptAndEmp(@Param("did") Integer did);
DeptMapper.xml
<resultMap id="deptAndEmpResultMap" type="Dept"><id property="did" column="did"></id><result property="deptName" column="dept_name"></result><!--注意区分ofType和association中属性javaType的区别--><collection property="emps" ofType="Emp"><id property="did" column="did"></id><result property="empName" column="emp_name"></result><result property="age" column="age"></result><result property="sex" column="sex"></result><result property="email" column="email"></result></collection></resultMap>
<!-- Dept getDeptAndEmp(@Param("did") Integer did);--><select id="getDeptAndEmp" resultMap="deptAndEmpResultMap">select * from t_dept left join t_emp on t_dept.did = t_emp.did where t_dept.did = #{did}</select>
2.3.2 分步查询解决一对多映射关系
分步查询的第一步:查询部门信息
DeptMapper.java
package com.crj.mybatis.mapper;import com.crj.mybatis.pojo.Dept;
import org.apache.ibatis.annotations.Param;public interface DeptMapper {/*** 分步查询处理一对多的关系* 第一步:查询部门信息*/Dept getDeptAndEmpByStepOne(@Param("did") Integer did);}
DeptMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.crj.mybatis.mapper.DeptMapper"><resultMap id="deptAndEmpByStepResultMap" type="Dept"><id property="did" column="did"></id><result property="deptName" column="dept_name"></result><collection property="emps" select="com.crj.mybatis.mapper.EmpMapper.getDeptAndEmpByStepTwo" column="did"></collection></resultMap>
<!-- Dept getDeptAndEmpByStepOne(@Param("did") Integer did);--><select id="getDeptAndEmpByStepOne" resultMap="deptAndEmpByStepResultMap">select * from t_dept where did = #{did}</select>
</mapper>
分步查询第二步:根据查询到的员工信息中的did来查询相应的部门信息
EmpMapper.java
package com.crj.mybatis.mapper;import com.crj.mybatis.pojo.Emp;
import org.apache.ibatis.annotations.Param;import java.util.List;public interface EmpMapper {/*** 分步查询处理一对多的关系* 第二步:根据did查询员工信息*/List<Emp> getDeptAndEmpByStepTwo();
}
EmpMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.crj.mybatis.mapper.EmpMapper"><!-- List<Emp> getDeptAndEmpByStepTwo();--><select id="getDeptAndEmpByStepTwo" resultType="Emp">select * from t_emp where did = #{did}</select></mapper>
总结
弄清楚两种映射关系以及相应的文件依赖关系和处理无疑时学习的重点,荔枝学习的时候也是感觉好像懂了,但复盘的时候还是有很多概念明显没有弄清楚。最近荔枝的学习状态有点波动,可能是摆烂了两周的缘故。。。接下来荔枝也会调整状态滴,继续学习Java后端技术栈并作出相应的Blog输出。最近看了丙哥的文章,喜欢一句话分享给大家:你知道的越多,你不知道的越多。共勉共勉哈哈哈哈~~~
今朝已然成为过去,明日依然向往未来!我是小荔枝,在技术成长的路上与你相伴,码文不易,麻烦举起小爪爪点个赞吧哈哈哈~~~ 比心心♥~~~
相关文章:
MyBatis —— 多种查询及映射关系
前言 上一篇文章中荔枝梳理了有关MyBatis的相关环境配置和核心配置文件及其模板的设置和生成,而在这篇文章中荔枝会着重梳理MyBatis多种查询情况、特殊SQL执行以及两表联查时映射关系的处理。希望对需要的小伙伴有帮助~~~ 文章目录 前言 一、多种查询情况 1.1 查…...

腾讯云服务器镜像TencentOS Server操作系统详细介绍
腾讯云TencentOS Server镜像是腾讯云推出的Linux操作系统,完全兼容CentOS生态和操作方式,TencentOS Server操作系统为云上运行的应用程序提供稳定、安全和高性能的执行环境,TencentOS可以运行在腾讯云CVM全规格实例上,包括黑石物理…...

Docker 中下载各版本的 CentOS、CentOS Steam 方式
如果你跟我一样,想要在docker下载centos的镜像,但是无奈访问不了 https://hub.docker.com/,于是不知道有哪些tag可以下载,该如何办呢? 方法如下,以供参考。 访问:https://quay.io/repository/…...

多线程使用HashMap,HashMap和HashTable和ConcurrentHashMap区别(面试题常考),硬盘IO,顺便回顾volatile
一、回顾💛 谈谈volatile关键字用法 volatile能够保证内存可见性,会强制从主内存中读取数据,此时如果其他线程修改被volatile修饰的变量,可以第一时间读取到最新的值。 二、💙 HashMap线程不安全没有锁,HashTable线程…...

专线连接交换机设置 – 如何实现高效率的网络连接?
专线链接交换机设置 – 如何实现高效率的网络连接? 什么是专线连接交换机? 在现代互联网中,网络连接的快速和高效是至关重要的。尤其是对于需要大量数据传输和保证网络稳定性的企业和组织来说,专线连接交换机是一项非常重要的技…...

C#,数值计算——Midexp的计算方法与源程序
1 文本格式 using System; namespace Legalsoft.Truffer { public class Midexp : Midpnt { public new double func(double x) { return funk.funk(-Math.Log(x)) / x; } public Midexp(UniVarRealValueFun funcc, double aa, d…...
微信小程序使用本地存储方法wx.setStorageSync()和wx.getStorageSync()
微信小程序的本地存储可以使用wx.setStorageSync()和wx.getStorageSync()方法实现 使用wx.setStorageSync()方法可以将数据以键值对的方式存储到本地存储中: wx.setStorageSync(demo, demo123);获取数据:使用wx.getStorageSync()方法可以从本地存储中获…...
题解:ABC317C - Remembering the Days
题解:ABC317C - Remembering the Days 题目 链接:Atcoder。 链接:洛谷。 难度 算法难度:B。 思维难度:B。 调码难度:C。 综合评价:普及-。 算法 深度优先搜索。 思路 先建图&#x…...

【CSS】简记CSS效果:通过transition(动画过渡属性)实现侧边栏目滑入滑出
需求 在资金明细的页面中,点击按钮时筛选区域从左侧滑出,完成筛选点击确认后调用接口完成数据查询,筛选区域滑入左侧; 基于微信小程序页面实现 wxml代码 <view><!-- 操作按钮 --><button type"primary&qu…...
LeetCode——最大子数组和(中等)
题目 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 1: 输入:nums [-2,1,-3,4,-1,2,1,-5,4] 输出&#x…...
Zookeeper集成SpringBoot
Curator 是 Apache ZooKeeper 的Java客户端库。 Zookeeper现有常见的Java API如:原生JavaAPI、Curator、ZkClient等。 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"…...

ModaHub魔搭社区:星环科技致力于打造更优越的向量数据库
在数字化时代,数据成为了最重要的资源之一。随着人工智能、大数据等技术的不断发展,向量数据库成为了处理这类数据的关键工具。星环科技作为一家专注于数据存储和管理技术的公司,其重要目标就是将向量数据库打造得更为优越。 在星环科技,有一个专注于向量数据库的团队。这个…...
Dubbo默认使用什么序列化框架?还有哪些?
Dubbo默认使用的序列化框架是Hessian 2.0。Hessian是一种基于二进制的序列化协议,它具有简单、高效的特点,适用于网络传输和存储数据。Hessian在Dubbo中被广泛使用,因为它可以在不同的编程语言之间进行对象的序列化和反序列化。 除了Hessian…...

攻防世界-What-is-this
原题 解题思路 解压后文件 没有后缀,不知道是什么文件。用notepad打开找不到flag。 尝试当成压缩包解压。 用stegsolve以打开图片1, 合成两张图片。...

[C++]构造与毁灭:深入探讨C++中四种构造函数与析构函数
个人主页:北海 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏✨收录专栏:C/C🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!ǹ…...
【跟小嘉学 Rust 编程】二十一、网络编程
系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…...

一文了解聚合支付
第四方支付是相对于第三方支付而提出的概念,又被称为“聚合支付”是指通过聚合第三方支付平台、合作银行、等多种支付工具进行的综合支付服务。 简言而之,把支付接口聚合到一个平台上面,来给商家或者个人来提供支付服务。 第四方支付集中了各…...

118.杨辉三角
一、题目 118. 杨辉三角 - 力扣(LeetCode) 二、代码 class Solution { public:vector<vector<int>> generate(int numRows) {vector<vector<int>>data(numRows);for(int i0;i<numRows;i){data[i].resize(i1);//扩容data[i]…...

第7节——渲染列表+Key作用
一、列表渲染 我们再react中如果渲染列表,一般使用map方法进行渲染 import React from "react";export default class LearnJSX2 extends React.Component {state {infos: [{name: "张三",age: 18,},{name: "李四",age: 20,},{nam…...
NTP服务器时间配置
简介 ntp服务器是一个同步时间都服务器。 开启ntpd 1.查看状态(可以看到状态为:inactive,也就是没有启动ntp服务) [rootlocalhost]$ systemctl status ntpd ● ntpd.service - Network Time ServiceLoaded: loaded (/usr/lib/…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...