当前位置: 首页 > news >正文

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;

        开启延迟加载时针对于当前的所有的分步查询,如果哪一步不需要延迟加载可通过associationcollection中的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的相关环境配置和核心配置文件及其模板的设置和生成&#xff0c;而在这篇文章中荔枝会着重梳理MyBatis多种查询情况、特殊SQL执行以及两表联查时映射关系的处理。希望对需要的小伙伴有帮助~~~ 文章目录 前言 一、多种查询情况 1.1 查…...

腾讯云服务器镜像TencentOS Server操作系统详细介绍

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

Docker 中下载各版本的 CentOS、CentOS Steam 方式

如果你跟我一样&#xff0c;想要在docker下载centos的镜像&#xff0c;但是无奈访问不了 https://hub.docker.com/&#xff0c;于是不知道有哪些tag可以下载&#xff0c;该如何办呢&#xff1f; 方法如下&#xff0c;以供参考。 访问&#xff1a;https://quay.io/repository/…...

多线程使用HashMap,HashMap和HashTable和ConcurrentHashMap区别(面试题常考),硬盘IO,顺便回顾volatile

一、回顾&#x1f49b; 谈谈volatile关键字用法 volatile能够保证内存可见性&#xff0c;会强制从主内存中读取数据&#xff0c;此时如果其他线程修改被volatile修饰的变量&#xff0c;可以第一时间读取到最新的值。 二、&#x1f499; HashMap线程不安全没有锁,HashTable线程…...

专线连接交换机设置 – 如何实现高效率的网络连接?

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

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()方法可以将数据以键值对的方式存储到本地存储中&#xff1a; wx.setStorageSync(demo, demo123);获取数据&#xff1a;使用wx.getStorageSync()方法可以从本地存储中获…...

题解:ABC317C - Remembering the Days

题解&#xff1a;ABC317C - Remembering the Days 题目 链接&#xff1a;Atcoder。 链接&#xff1a;洛谷。 难度 算法难度&#xff1a;B。 思维难度&#xff1a;B。 调码难度&#xff1a;C。 综合评价&#xff1a;普及-。 算法 深度优先搜索。 思路 先建图&#x…...

【CSS】简记CSS效果:通过transition(动画过渡属性)实现侧边栏目滑入滑出

需求 在资金明细的页面中&#xff0c;点击按钮时筛选区域从左侧滑出&#xff0c;完成筛选点击确认后调用接口完成数据查询&#xff0c;筛选区域滑入左侧&#xff1b; 基于微信小程序页面实现 wxml代码 <view><!-- 操作按钮 --><button type"primary&qu…...

LeetCode——最大子数组和(中等)

题目 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4] 输出&#x…...

Zookeeper集成SpringBoot

Curator 是 Apache ZooKeeper 的Java客户端库。 Zookeeper现有常见的Java API如&#xff1a;原生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是一种基于二进制的序列化协议&#xff0c;它具有简单、高效的特点&#xff0c;适用于网络传输和存储数据。Hessian在Dubbo中被广泛使用&#xff0c;因为它可以在不同的编程语言之间进行对象的序列化和反序列化。 除了Hessian…...

攻防世界-What-is-this

原题 解题思路 解压后文件 没有后缀&#xff0c;不知道是什么文件。用notepad打开找不到flag。 尝试当成压缩包解压。 用stegsolve以打开图片1&#xff0c; 合成两张图片。...

[C++]构造与毁灭:深入探讨C++中四种构造函数与析构函数

个人主页&#xff1a;北海 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C/C&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;大家一起学习交流&#xff01;&#x1f9…...

【跟小嘉学 Rust 编程】二十一、网络编程

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…...

一文了解聚合支付

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

118.杨辉三角

一、题目 118. 杨辉三角 - 力扣&#xff08;LeetCode&#xff09; 二、代码 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中如果渲染列表&#xff0c;一般使用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.查看状态&#xff08;可以看到状态为&#xff1a;inactive&#xff0c;也就是没有启动ntp服务&#xff09; [rootlocalhost]$ systemctl status ntpd ● ntpd.service - Network Time ServiceLoaded: loaded (/usr/lib/…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...