【Mybatis篇】动态SQL的详细带练
🧸安清h:个人主页
🎥个人专栏:【计算机网络】
🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。
文章目录
🎯一.动态SQL简单介绍
🚦动态SQL的基本概念
🎯二.条件查询操作
🚦数据库准备
🚦POJO类准备
🚦创建映射文件(元素)
🚦修改核心配置文件
🚦创建MybatisUtil工具类
🚦创建接口类
🚦修改测试类
✨,,元素
✨更新操作
✨复杂查询操作
🍔元素简单介绍
🍔元素迭代List
🍔元素迭代数组
🍔元素迭代Map
🎯总结
🎯一.动态SQL简单介绍
动态SQL是MyBatis框架中一个非常强大的特性,它允许开发者在构建SQL语句时根据条件动态地生成不同的SQL片段。这样做的好处是可以避免硬编码查询逻辑,简化数据库查询的复杂度,同时提高代码的可读性和维护性。
🚦动态SQL的基本概念
动态SQL并不是一个新的概念,它指的是在运行时根据条件构建SQL语句,而不是使用静态的SQL语句。MyBatis通过一系列的动态SQL标签来实现这一功能,这些标签包括:
<if>
:根据条件动态拼接SQL。<choose>
、<when>
、<otherwise>
:类似于Java中的switch-case语句。<trim>
、<where>
、<set>
:用于处理SQL语句的不同部分,如自动添加WHERE,并去除多余的AND。<foreach>
:用于处理集合,生成IN查询。
🎯二.条件查询操作
🚦数据库准备
在数据库mybatis下,创建一个customer表,并向其中插入几条数据,代码如下:
create table customer(id int(32) primary key auto_increment,username varchar(50),jobs varchar(50),phone varchar(16)
);insert into customer values ('1','joy','teacher','122222222');
insert into customer values ('2','jack','teacher','133333333');
insert into customer values ('3','tom','worker','1267567567');
🚦POJO类准备
一般放在pojo包里,这里我直接在java包中建立了,类中声明id,username,jobs,phone属性,以及属性相对应get/set方法。
public class Customer {private Integer id;private String username;private String jobs;private String phone;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getJobs() {return jobs;}public void setJobs(String jobs) {this.jobs = jobs;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}@Overridepublic String toString() {return "Customer{" +"id=" + id +", username='" + username + '\'' +", jobs='" + jobs + '\'' +", phone='" + phone + '\'' +'}';}
}
🚦创建映射文件(<if>元素)
if元素中的test属性多用于条件判断语句中,用于判断真假,在此处,我们对用户姓名和工作都做了非空判断,如果传入的查询条件非空就进行动态SQL组装。
<?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="CustomerMapper"><select id="QueryByNameAndJobs" parameterType="Customer" resultType="Customer">select * from customerwhere 1=1<if test="username!=null and username!=''">and username like concat('%',#{username},'%')</if><if test="jobs!=null and jobs!=''">and jobs=#{jobs}</if></select>
</mapper>
🚦修改核心配置文件
在核心配置文件mybatis-config.xml中引入CustomerMapper.xml映射文件,代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 配置文件的根元素 -->
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql:///mybatis?characterEncoding=utf-8"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><mappers><mapper resource="CustomerMapper.xml"/></mappers>
</configuration>
🚦创建MybatisUtil工具类
这段代码的目的是为了封装MyBatis的初始化过程,并提供一个全局访问点来获取SqlSession
,使得在应用的其他部分可以很方便地使用MyBatis进行数据库操作,而不需要关心SqlSessionFactory
的创建和配置细节。这样做可以减少代码重复,提高代码的可维护性。
public class MybatisUtil {private static SqlSessionFactory sqlSessionFactory=null;static {try {Reader reader= Resources.getResourceAsReader("mybatis-config.xml");sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);} catch (IOException e) {throw new RuntimeException(e);}}public static SqlSession getSession(){return sqlSessionFactory.openSession();}
}
🚦创建接口类
public interface CustomerMapper {List<Customer> QueryByNameAndJobs(Customer customer);
}
🚦修改测试类
在测试类MybatisTest中,编写测试方法testQuery,该方法用于通过姓名和工作查询客户信息。
public class MybatisTest {@Testpublic void testQuery(){SqlSession sqlSession=MybatisUtil.getSession();CustomerMapper customerMapper=sqlSession.getMapper(CustomerMapper.class);Customer customer=new Customer();customer.setUsername("jack");customer.setJobs("teacher");List<Customer> list=customerMapper.QueryByNameAndJobs(customer);for(Customer c:list){System.out.println(c);}sqlSession.close();}
}
✨<choose>,<when>,<otherwise>元素
在MyBatis的动态SQL中,
<choose>
,<when>
,<otherwise>
元素组合用于条件分支选择,类似于Java中的if-else
或switch
语句。这些元素允许在SQL语句中根据不同的条件执行不同的SQL片段。以下是这些元素的基本用法:
<choose>
元素表示一个条件选择块的开始,它本身不生成任何SQL语句。<when>
元素表示一个条件分支,它内部包含一个test
属性,该属性用于指定条件表达式。如果test
属性中的表达式计算为true
,则该分支内的SQL会被包含在最终的SQL语句中。<otherwise>
元素表示在所有<when>
条件都不满足时执行的分支。它类似于switch
语句中的default
分支。
(1)在映射文件CustomerMapper.xml中,添加使用 <choose>,<when>,<otherwise>实现以下场景:
- 在客户名称不为空时,只根据客户名称查找。
- 客户名称为空,客户职业不为空时,只根据客户职业查找。
- 客户名称和客户职业都为空时,查询出所有电话不为空的客户信息。
<?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="CustomerMapper"><select id="findByWhere" parameterType="Customer" resultType="Customer">select * from customer where 1=1<choose><when test="username!=null and username!=''">and username like concat('%',#{username},'%')</when><when test="jobs!=null and jobs!=''">and jobs=#{jobs}</when><otherwise>and phone is not null</otherwise></choose></select>
</mapper>
上述使用<choose>元素进行SQL拼接,当第一个<when>元素中的条件为真时,只动态组装第一个<when>元素内的SQL片段并执行,否则就继续向下判断第二个<when>元素中的条件是否为真,以此类推,直到某个<when>元素中的条件为真,结束判断。当前面所有的<when>元素中的条件都不为真时,则动态组装<otherwise>元素内的SQL片段并执行。
(2)在测试类MybatisTest中,编写测试方法findByWhere(),具体代码如下:
public class MybatisTest {@Testpublic void findByWhere(){SqlSession sqlSession=MybatisUtil.getSession();CustomerMapper customerMapper=sqlSession.getMapper(CustomerMapper.class);Customer customer=new Customer();customer.setUsername("jack");customer.setJobs("teacher");List<Customer> list=customerMapper.findByWhere(customer);for(Customer c:list){System.out.println(c);}sqlSession.close();}
}
不同的查询结果如下:
1.客户姓名不为空时
2.客户姓名为空,客户职业不为空时
3.客户姓名和客户职业都为空时
✨更新操作
在MyBatis中,<set>
标签用于构建动态SQL语句中的UPDATE
操作,它允许根据条件动态地更新表中的列。<set>
标签会自动地为你插入的每个列添加逗号分隔,并且会忽略空格,使得构建动态更新语句更加方便。
<set>
标签通常与<if>
标签结合使用,以便在运行时根据条件动态地构建更新的列和值。以下是一个基本的示例:
(1)在映射文件CustomerMapper.xml中,使用<set>元素执行更新操作的动态SQL:
<update id="updateCustomerBySet" parameterType="Customer">update customer<set><if test="username!=null and username!=''">username=#{username},</if><if test="jobs!=null and jobs!=''">jobs=#{jobs}</if><if test="phone!=null and phone!=''">phone=#{phone}</if></set>where id=#{id}</update>
(2)在CustomerMapper接口中添加如下操作:
public interface CustomerMapper {int updateCustomerBySet(Customer customer);
}
(3)在测试类MybatisTest中编写测试方法testUpdate(),具体实现代码如下:
@Testpublic void testUpdate(){SqlSession sqlSession=MybatisUtil.getSession();CustomerMapper customerMapper=sqlSession.getMapper(CustomerMapper.class);Customer customer=new Customer();customer.setId(3);customer.setPhone("123456789");int rows=customerMapper.updateCustomerBySet(customer);if(rows>0){System.out.println("您修改成功了"+rows+"条数据");}else{System.out.println("您修改失败了!");}sqlSession.commit();sqlSession.close();}
(4)修改成功后就可以看到:
在表中的数据如下图:
✨复杂查询操作
🍔<foreach>元素简单介绍
在MyBatis中,
<foreach>
标签用于遍历集合,常用于构建IN
条件子句或批量操作(如批量插入、更新、删除)。<foreach>
标签可以处理集合或数组类型的参数,为每个元素生成SQL片段,并将这些片段组合起来。
属性 描述 collection
指定要遍历的集合或数组
item
指定集合中每个元素的别名,可以在遍历块内部使用
index
指定集合中每个元素的索引或键的别名,可以在遍历块内部使用
open
指定遍历输出的开始符号
close
指定遍历输出的结束符号
separator
指定遍历元素之间的分隔符
nullable
指定是否允许collection为空值
🍔<foreach>元素迭代List
(1)在映射文件CustomerMapper.xml中,添加使用<foreach>元素迭代List执行批量查询操作,具体代码如下:
<select id="findByArray" resultType="Customer">select * from Customer where id in<foreach item="id" collection="list" open="(" separator="," close=")">#{id}</foreach></select>
(2)在测试类MybatisTest中编写测试方法testforeach(),具体实现代码如下:
@Testpublic void testforeach(){SqlSession sqlSession=MybatisUtil.getSession();Customer customer=new Customer();List<Integer> ids = new ArrayList<Integer>();ids.add(2);ids.add(3);List<Customer> list=sqlSession.selectList("CustomerMapper.findByArray",ids);for(Customer c:list){System.out.println(c);}sqlSession.close();}
(3)在接口CustomerMapper 中添加以下代码:
List<Customer> findByArray(String customerMapper, List<Integer> ids);
(4)查询结果如下图:
🍔<foreach>元素迭代数组
(1)在映射文件CustomerMapper.xml中,添加使用<foreach>元素迭代数组执行批量查询操作,具体代码如下:
<select id="findByList" resultType="Customer">select * from Customer where id in<foreach item="id" collection="list" open="(" separator="," close=")">#{id}</foreach></select>
(2)在测试类MybatisTest中编写测试方法testforeach(),具体实现代码如下:
@Testpublic void testforeach(){SqlSession sqlSession=MybatisUtil.getSession();Customer customer=new Customer();Integer[] ids={1,2};List<Customer> list=sqlSession.selectList("CustomerMapper.findByList",ids);for(Customer c:list){System.out.println(c);}sqlSession.close();}
🍔<foreach>元素迭代Map
由于Mybatis传入参数均为一个参数,如果传入参数为多个参数,例如,查询出性别为男性且职业为教师的所有客户信息,此时,需要把这些参数封装成一个Map集合进行处理。
(1)在映射文件CustomerMapper.xml中,添加使用<foreach>元素迭代Map执行批量查询操作,具体代码如下:
<select id="findByMap" parameterType="java.util.Map" resultType="Customer">select * from customer where jobs=#{jobs} and id in<foreach item="roleMap" index="index" collection="id" open="(" separator="," close=")">#{roleMap}</foreach></select>
(2)在测试类MybatisTest中编写测试方法testforeach(),具体实现代码如下:
@Testpublic void testforeach(){SqlSession sqlSession=MybatisUtil.getSession();List<Integer> ids=new ArrayList<Integer>();ids.add(1);ids.add(2);ids.add(3);Map<String,Object> map=new HashMap<String, Object>();map.put("id",ids);map.put("jobs","teacher");List<Customer> list=sqlSession.selectList("CustomerMapper.findByMap",map);for(Customer c:list){System.out.println(c);}sqlSession.close();}
🎯总结
以上就是今天要讲的内容了,主要在<if>,<choose>,<when>,<otherwise>,<foreach>方面做了重点的讲解,非常感谢您的阅读,如果这篇文章对您有帮助,那将是我的荣幸。我们下期再见啦🧸!
相关文章:
【Mybatis篇】动态SQL的详细带练
🧸安清h:个人主页 🎥个人专栏:【计算机网络】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 文章目录 🎯一.动态SQL简单介绍 🚦动态S…...
【MyBatis-Plus】 学习记录 常用功能及代码生成器使用
文章目录 1. 环境准备2. 创建基础实体类3. 编写 Mapper 接口4. Service 层5. 控制器层6. 分页功能7. 条件构造器8. 配置乐观锁9. 常见问题10. 代码生成器1. 创建数据库表2. 引入依赖3. 配置数据库连接4. 编写代码生成器5. 运行代码生成器6. 查看生成的代码 MyBatis-Plus 是一个…...
HalconDotNet实现OCR详解
文章目录 一、基于字符分割的 OCR二、基于模板匹配的 OCR三、基于深度学习的 OCR四、基于特征提取的 OCR五、基于区域建议的 OCR 一、基于字符分割的 OCR 字符分割是 OCR 中的一个重要步骤。首先,对包含文本的图像进行预处理,如去噪、二值化等操作&#…...
手搓一个Agent#Datawhale 组队学习Task3
书接上回,首先回顾一下Task2的一些补充: Task2主要任务是从零预训练一个tiny-llama模型,熟悉一下Llama的模型架构和流程。然后测试一下模型的效果。总的来说,因为某些未知的原因,loss一直没有降下去,导致最…...
基于SpringBoot+Vue+MySQL的在线酷听音乐系统
系统展示 用户前台界面 管理员后台界面 系统背景 随着互联网技术的飞速发展,网络已成为人们日常生活中不可或缺的一部分。在线音乐服务因其便捷性和丰富性,逐渐成为用户获取音乐内容的主要渠道。然而,传统的音乐播放平台往往存在歌曲资源有限…...
大数据实时数仓Hologres(一):Hologres 简单介绍
文章目录 Hologres 简单介绍 一、什么是实时数仓 Hologres 二、产品优势 1、专注实时场景 2、亚秒级交互式分析 3、统一数据服务出口 4、开放生态 5、MaxCompute查询加速 6、计算存储分离架构 三、应用场景 搭建实时数仓 四、产品架构 1、Shared Disk/Storage &am…...
【鸿蒙HarmonyOS NEXT】数据存储之分布式键值数据库
【鸿蒙HarmonyOS NEXT】数据存储之分布式键值数据库 一、环境说明二、分布式键值数据库介绍三、示例代码加以说明四、小结 一、环境说明 DevEco Studio 版本: API版本:以12为主 二、分布式键值数据库介绍 KVStore简介: 分布式键值数据库…...
基于springboot+小程序的儿童预防接种预约管理系统(疫苗1)(源码+sql脚本+视频导入教程+文档)
👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 本儿童预防接种预约微信小程序可以实现管理员和用户。 1、管理员功能有个人中心,用户管理,儿童信息管理,疫苗信息管理,儿童接种管理&#x…...
计算物理精解【8】-计算原理精解【5】
文章目录 logistic模型多元回归分析多元回归分析概览1. 多元回归的概念与重要性2. 多元回归在实际应用中的例子3. 多元回归在预测和解释数据中的优势和局限性4. 多元回归的优缺点及改进建议 多元线性回归分析详解一、原理二、性质三、计算四、例子与例题五、应用场景六、优缺点…...
【Linux】 tcp | 解除服务器对tcp连接的限制 | 物联网项目配置
一、修改tcp连接限制 1、编辑 vi /etc/sysctl.conf 2、内容 net.ipv4.tcp_keepalive_intvl 75 net.ipv4.tcp_keepalive_probes 9 net.ipv4.tcp_keepalive_time 7200 net.ipv4.ip_local_port_range 1024 65535 net.ipv4.ip_conntrack_max 20000 net.ipv4.tcp_max_tw_bucket…...
如何隐藏Windows10「安全删除硬件」里的USB无线网卡
本方法参照了原文《如何隐藏Windows10「安全删除硬件」里的USB无线网卡》里面的方法,但是文章中的描述我的实际情况不太一样,于是我针对自己的实际情况进行了调整,经过测试可以成功隐藏Windows10「安全删除硬件」里的USB无线网卡。 先说一下…...
【QT Quick】基础语法:导入外部JS文件及调试
在 QML 中,可以使用 JavaScript 来实现业务逻辑的灵活性和简化开发。接下来我们会学习如何导入 JavaScript 文件,并在 QML 中使用它,同时也会介绍如何调试这些 JavaScript 代码。 导入 JavaScript 文件 在 QML 中导入 JavaScript 文件的方式…...
【质优价廉】GAP9 AI算力处理器赋能智能可听耳机,超低功耗畅享未来音频体验!
当今世界,智能可听设备已经成为了流行趋势。随后耳机市场的不断成长起来,消费者又对AI-ANC,AI-ENC(环境噪音消除)降噪的需求逐年增加,但是,用户对于产品体验的需求也从简单的需求,升…...
用Flutter几年了,Flutter每个版本有什么区别?
用Flutter几年了,你知道Flutter每个版本有什么区别吗?不管是学习还是面试我们可能都需要了解这个信息。 Flutter 每个版本的用法基本都是一样的,每隔几天或者几周就会更新一个版本, 2018 年 12 月 5 日发布了1.x 版本&#…...
解决Qt每次修改代码后首次运行崩溃,后几次不崩溃问题
在使用unique_ptr声明成员变量后,我习惯性地在初始化构造列表中进行如下构造: 注意看,我将m_menuBtnGroup的父类指定为ui->center_menu_widget,这便是导致崩溃的根本原因,解决办法便是先用this初始化,后…...
语言的变量交换
不用第三个变量交换两个变量在面试题或者笔试题中无数次被提到,事实上,有些答案是理论性的,不是准确的。以整型为例,如下对比不同交换方式的差异。 不同的交换方式 利用中间变量c a; 00C02533 8B 45 F8 mov eax,dword ptr [a] 0…...
【muduo源码分析】「阻塞」「非阻塞」「同步」「异步」
欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 引言何为「muduo库」安装muduo库阻塞、非阻塞、同步、异步数据准备数据准备 引言 从本篇博客开始,我会陆续发表muduo库源码分析的相关文章。感谢大家的持续关注!!…...
顶顶通呼叫中心中间件-机器人话术挂机后是否处理完成事件
前言 问题:机器人放音的过程中,如果用户直接挂机就会继续匹配下一个流程,如果匹配上的是放音节点,还会进行放音,那么在数据库表中就会多出一条放音记录。 解决方法 一、话术添加一个全局挂机节点 需要在话术中添加一…...
Springboot Mybatis 动态SQL
动态SQL <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"com.wzb.SqlImprove2024…...
ORM的了解
什么是ORM?为什么要用ORM?-CSDN博客 C高级编程(99)面向资源的设计思想(ORM)_c orm-CSDN博客 ORM:Object-Relational-Mapping 对象关系映射 -------------------------- 我想对数据库中的表A进行增删改…...
关于大模型的10个思考
9月28日,第四届“青年科学家50论坛”在南方科技大学举行,美国国家工程院外籍院士沈向洋做了《通用人工智能时代,我们应该怎样思考大模型》的主题演讲,并给出了他对大模型的10个思考。 以下是他10个思考的具体内容: 1…...
CFR( Java 反编译器)---> lambda 表达式底层实现机制
一、安装教程 CFR(Class File Reader)是一个流行的Java反编译器,它可以将编译后的.class文件或整个.jar文件转换回Java源代码。以下是CFR的下载和使用教程: 下载CFR 访问CFR的官方网站或GitHub仓库:CFR的最新版本和所…...
《C++多态性:开启实际项目高效编程之门》
在 C的广阔编程世界中,多态性是一个强大而富有魅力的特性。它为程序员提供了极大的灵活性和可扩展性,使得代码能够更加优雅地应对复杂的业务需求。在实际项目中,理解和正确应用 C的多态性至关重要,它可以显著提高代码的质量、可维…...
UDS_5_输入输出控制功能单元
目录 一. 0x2F服务 一. 0x2F服务 InputOutputControlByIdentifier(0x2F)服务 用于替换服务器输入信号的值或内部功能控制电子系统的某个输出(执行器) •请求报文 A_Data Byte Parameter Name Cvt Byte Value #1 InputOutputControlByIdentifier Request SID M 0x2F dataI…...
CAD快捷键
CAD快捷键 功能快捷键描述直线L点PO多段线PL多用于描边构造线XL无限长直线射线RAY样条曲线SPL绘制光滑曲线–––圆弧A圆C矩形REC正多边形POL–––填充H圆角F倒角CHA–––打断BR分解X合并J–––创建块B插入块I 功能快捷键描述移动M复制CO擦除E修剪TR延伸EX拉伸S镜像MI偏移…...
Spring6梳理12——依赖注入之注入Map集合类型属性
以上笔记来源: 尚硅谷Spring零基础入门到进阶,一套搞定spring6全套视频教程(源码级讲解)https://www.bilibili.com/video/BV1kR4y1b7Qc 12 依赖注入之注入Map集合类型属性 12.1 创建Student类和Teacher类 Student类中创建了run…...
基于SpringBoot校园失物招领系统设计与实现
文未可获取一份本项目的java源码和数据库参考。 本课题的作用、意义,在国内外的研究现状和发展趋势,尚待研究的问题 作用:本课题的目的是使失物招领信息管理清晰化,透明化,便于操作,易于管理。通过功能模…...
推荐4款2024年热门的PDF转ppt工具
有时候,我们为了方便,需要将PDF里面的内容直接转换的PPT的格式,既方便自己演示和讲解,也让我们可以更加灵活的进行文件的编辑和修改。如果大家不知道要如何进行操作的话,我可以为大家推荐几个比窘方便实用的PDF转换工具…...
[深度学习]卷积神经网络CNN
1 图像基础知识 import numpy as np import matplotlib.pyplot as plt # 图像数据 #imgnp.zeros((200,200,3)) imgnp.full((200,200,3),255) # 可视化 plt.imshow(img) plt.show() # 图像读取 imgplt.imread(img.jpg) plt.imshow(img) plt.show() 2 CNN概述 卷积层convrelu池…...
从零开始,Docker进阶之路(三):Docker镜像与命令
一、Docker核心名词 镜像文件、容器、仓库 镜像:简单理解为就是一个安装包,里面包含容器所需要运行的基础文件和配置信息,比如:redis镜像、mysql镜像等。 镜像的来源方式: 1.自己做镜像,比如自己开发微服…...
响应式网站是怎么做的/如何提高百度搜索排名
什么是主键 主键(primary key)是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。 所谓的复合主键 就是指你表的主键含有一个以上的字段组成。 如果表里没有可以当唯一主键,可以使用复合主键,确定一条记录的唯一性。 创建主键两…...
淄博高端网站建设公司/google chrome
2019独角兽企业重金招聘Python工程师标准>>> 最近在写android程序,要经常用到BaseAdapter,用多了觉得很不好用,代码很多冗余。于是网上找个好的替代品,发现有一个叫做easy-adapter的库,试用了下觉得很好用&…...
怎么做免费的网站空间/宜昌网站seo收费
https://www.luogu.org/problem/show?pid1205 大大大大大大枚举! 通过纸上画图来找各个情况中点与点的对应坐标关系。 还需要注意的问题:题目要求序号尽量靠前。 #include<iostream> #include<cstdio> #include<cstring> #include&…...
废品网站怎么做/2345网址导航应用
148. 排序链表 思路: 归并排序调用过程: 过程: ①分割:找到链表的中间节点,不断的分割,直到金生一个节点为止。 ②合并:实质是多次运用 "两个有序链表合并"的过程。 链表找中间节点…...
做网站入什么科目/自媒体平台app下载
6月1日,《网络安全法》正式开始实施。作为我国第一部全面规范网络空间安全管理问题的基础性法律,这部法律的实施引发外媒关注,部分欧美相关企业、有政府背景的行业协会、政府部门以及主流媒体,对《网络安全法》表示了不同程度的担…...
有什么好的提供外链网站/最新营销模式
PHPsocket函数讲解PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。大家知道phpsocket函数…...