使用
元素: 可以根据条件来动态生成 SQL 片段。例如:
< select id = " findByCondition" parameterType = " map" resultType = " User" >
SELECT * FROM users
< where>
< if test = " name != null" >
AND name = #{name}
if >
< if test = " age != null" >
AND age = #{age}
if >
where >
select >
代码解释如下:
标签定义了一个查询语句,并指定了它的唯一标识符(id)、输入参数类型(parameterType)和结果类型(resultType)。 SELECT * FROM users 是实际的 SQL 查询语句,表示从名为 “users” 的表中选取所有列的数据。 标签是 MyBatis 提供的一个用于构建动态 SQL 的元素,它会在生成的 SQL 语句中添加 “WHERE” 关键字,并且只会在至少有一个条件满足时添加。 标签是 标签中的子元素,用于判断某个条件是否成立。它的 “test” 属性用于指定一个条件表达式。 如果 test="name != null" 成立,那么会在生成的 SQL 语句中添加一个 “AND name = #{name}” 的条件。 如果 test="age != null" 成立,那么会在生成的 SQL 语句中添加一个 “AND age = #{age}” 的条件。 这样,在实际执行查询时,如果传入的参数中有 “name”,那么会根据 “name” 的值添加相应的查询条件;同样地,如果传入的参数中有 “age”,那么会根据 “age” 的值添加相应的查询条件。
使用 元素: 类似于 switch 语句,根据条件选择一个分支进行处理。 <select id="findByCondition" parameterType="map" resultType="User">
SELECT * FROM users
<where>
<choose>
<when test="name != null">
AND name = #{name}
when>
<when test="age != null">
AND age = #{age}
when>
<otherwise>
AND 1=1
otherwise>
choose>
where>
select>
代码解释: 这段代码使用了 MyBatis 中的动态 SQL 元素 元素,也称为 // 构造。这样的构造允许你在 SQL 查询中根据条件动态地生成不同的部分。 包含了多个 元素,每个 元素对应一个条件判断,如果条件满足,就会生成相应的 SQL 查询条件。如果所有条件都不满足,就会执行 部分。 简单来说,这个查询语句的意思是:
如果传入的参数 name 不为 null,则添加条件 AND name = #{name} 到查询语句中。
如果传入的参数 age 不为 null,则添加条件 AND age = #{age} 到查询语句中。
如果以上条件都不满足(即都为 null),则添加条件 AND 1=1 到查询语句中。这个条件相当于一个恒为真的条件,因此不会影响查询结果。
使用 元素: 可以根据条件来剪切 SQL 片段的开始或结尾,以防止出现多余的关键字。 <select id="findByCondition" parameterType="map" resultType="User">
SELECT * FROM users
<where>
<trim prefix="AND (" suffix=")" prefixOverrides="OR">
<if test="name != null">
OR name = #{name}
if>
<if test="age != null">
OR age = #{age}
if>
trim>
where>
select>
上述代码使用了 MyBatis 的动态 SQL 元素中的 元素,用于构建更复杂的条件语句。 元素用于构建一个以 AND 为前缀和 ) 为后缀的条件片段,同时在生成条件语句时去除可能多余的 OR。 简单来说,这个查询语句的意思是:
如果传入的参数 name 不为 null,则将 OR name = #{name} 添加到条件片段中。
如果传入的参数 age 不为 null,则将 OR age = #{age} 添加到条件片段中。
元素的 prefix 属性指定前缀,suffix 属性指定后缀,prefixOverrides 属性指定需要去除的前缀。在这个例子中,prefix 是 AND (,suffix 是 ),prefixOverrides 是 OR。这样,如果有至少一个条件满足,就会生成类似 AND ( condition1 OR condition2 ) 的查询语句。如果没有条件满足,就会生成 AND (),这不会影响查询结果。
使用 元素: 可以用来遍历集合或数组参数,生成多个相同的 SQL 片段。 <select id="findByIds" parameterType="list" resultType="User">
SELECT * FROM users
WHERE id IN
<foreach item="id" collection="list" open="(" separator="," close=")">
#{id}
foreach>
select>
这段代码是一个 MyBatis 的动态 SQL 查询语句,用于根据传入的一组 id 值查询对应的用户信息。这个查询语句利用了 元素,允许在 SQL 查询中动态地生成 IN 子句。
具体来说,这个查询语句的意思是:
查询 users 表中的所有列(SELECT *)。
使用 WHERE 子句进行过滤,条件是 id 值在传入的 list 参数中。
元素用于循环遍历传入的 list 参数,将每个 id 值包装在 ( 和 ) 之间,并使用 , 作为分隔符。
在这个查询语句中, 元素的属性含义如下:
item:指定在每次循环中使用的变量名,这里是 id。
collection:指定要遍历的集合参数的名字,这里是 list。
open:指定循环的开始字符,这里是 (。
separator:指定循环每个元素之间的分隔符,这里是 ,。
close:指定循环的结束字符,这里是 )。
这样,如果传入一个列表参数 list,比如 [1, 2, 3],就会生成类似 SELECT * FROM users WHERE id IN (1, 2, 3) 的查询语句,从而查询对应的用户信息。
这些动态 SQL 的特性使得 MyBatis 在构建灵活和动态的查询条件时非常方便,避免了硬编码大量重复的 SQL 语句。
二、MyBatis的条件查询操作
在学习了上面的几个动态SQL的常用元素,现在我们来尝试一下编写一下我们自己项目的动态SQL。
1.编写一个使用的动态SQl查询语句,若有账号名称Account则按账号名称Account查询,若有网站名WebsiteName则用WebsiteName查询,若俩个都有则俩个都匹配的才查询。
PasswordMSMapper.xml中编写动态sql语句:
①首先进行单条件查询测试,若Account不为空:
②也是单条件查询测试,若WebsiteName不为空:
③若是俩个条件都满足呢?Account和WebsiteName都不为空:
④若是俩个条件都不满足呢?Account和WebsiteName都为空:
可以看到Mybatis是会根据我们输入的查询条件进行拼接生成动态的SQL。
2.那么我们继续尝试编写的动态sql语句,情景时:若有账号名Account,则优先使用账号名进行查询。若无账户名,有网站名WebsiteName,那么就按网站名搜索。若账号名,网站名都无,那么就采用默认查询passwordms表中的所有信息。
在使用元素时,只要test属性中的表达式为true,就会执行元素中的条件语句,但是在实际应用中,有时只需要从多个选项中选择一个去执行。这时候使用就是非常合适的,如果使用则是不合适的。
PasswordMSMapper.xml中编写动态sql语句:
那么去编写我们的测试类,根据不同的输入情况,查看是否满足我们的需求?
①Account不为空,WebsiteName为空的情况:
②Account不为空,WebsiteName不为空的情况(结果和上面的一样):
③Account为空,WebsiteName不为空的情况:
④Account为空,WebsiteName也为空的情况:
可以看到Mybatis是会根据我们输入的查询条件进行拼接生成动态的SQL。
3.那么我们继续尝试编写、的动态sql语句,情景时:在sql中where 后面直接跟and 或者 or之类的关键字都是错误的,会导致我们的SQL语句运行不成功
在这个示例中我们写了个 prefix="AND (" suffix=")" prefixOverride="AND", 在条件中Account满足时,程序会自动在AND Account=#{Account}前面、后面,添加上前后缀生成新的语句: AND (AND Account=#{Account}), 若是WebsiteName也满足的话,新的sql语句为: AND (AND Account=#{Account} AND WebsiteName = #{WebsiteName} )
我们写的prefixOverrides=“AND”,会自动将()里面的多余的前缀AND去除,即生成: AND ( Account=#{Account} AND WebsiteName = #{WebsiteName} )
看到这里是不是觉得那外面还有一个where呢?where AND (Account=#{Account} AND WebsiteName = #{WebsiteName})也是错的对不?实际上 会自动帮我们去除()外多余的AND和OR防止SQL语句出错。
因此这个流程下来我们的语句就变成了: where ( Account=#{Account} AND WebsiteName = #{WebsiteName} ) 我们去输入测试类看看就知道是不是了
①Account不为空,WebsiteName也不为空:
②Account为空,WebsiteName不为空:
根据我们上面讲的流程:那么推测生成的动态sql语句应该是:
where ( WebsiteName=#{WebsiteName} )
③Account、WebsiteName都为空:
根据我们上面讲的流程:那么推测生成的动态sql语句应该是:
Select * from passwordms,因为if里面的条件每一个成立,所以where也不会添加进去,但是会自动删除语句中多余的AND或OR
可以看到Mybatis是会根据我们输入的查询条件进行拼接生成动态的SQL,并且正确无误。
三、Mybatis的更新操作
4.那么我们继续尝试编写、的动态sql语句,情景时:如果想要更新某一个对象,就需要发送所有的字段给持久化对象,然而在实际应用中,大多数情况下都是更新某一个或几个字段。如果更新的每一条数据都要将其所有的属性都更新一遍,那么执行效率是非常差的。为了解决更新数据的效率问题,MyBatis提供了元素。
除了可以用元素来进行更新操作外,也使用元素来进行更新操作, 在映射文件中使用元素和元素组合进行update语句动态SQL组装时,如果元素内包含的内容都为空,则会出现SQL语法错误。因此,在使用元素进行字段信息更新时,要确保传入的更新字段不能都为空。
除此以外还可以跟前面的元素联合起来一起使用。其中, 元素,suffixOverrides属性指定去除的元素所包含内容的后缀为逗号 。
好那么我们来编写我们的Mapper文件:
接下来进行测试类测试:
①:更新多个字段的情况:
可以看到嗷,正常数据更新了,但是呢,其实是有问题的,不管数据是不是更原来的一样,都会对数据库进行一次更新的操作。
因此我们还需要再改改,还需要加一个数据库对比的判断,详细代码如下:
isDataEqual()方法如下:
// 判断两个对象的数据是否相等
private boolean isDataEqual(PasswordMS oldData, PasswordMS newData) {
return Objects.equals(oldData.getAccount(), newData.getAccount())
&& Objects.equals(oldData.getWebsiteName(), newData.getWebsiteName());
}
那么保持参数条件不变的情况下继续进行测试:
可以看到测试成功,正确提示!
②尝试看看单参数字段修改的情况:
③若是无参数那么就会报错,所以一定要确保更新的参数必须要有,不能全为空。
好的那么更新操作就学到这里了。
四、使用Mybatis的动态SQL进行复杂操作
使用 元素可以在 MyBatis 中对集合进行迭代操作,通常用于构建 IN 条件的查询语句。
元素的属性
属性
说明
item
表示集合中每一个元素进行迭代时的别名。该属性为必选。
index
在List和数组中,index是元素的序号,在Map中,index是元素的key。该属性可选。
open
表示foreach语句代码的开始符号,一般和close=“)”合用。常用在in条件语句中。该属性可选。
separator
表示元素之间的分隔符,例如,在条件语句中,separator=“,”会自动在元素中间用“,”隔开,避免手动输入逗号导致SQL错误,错误示例如in(1,2,)。该属性可选。
close
表示foreach语句代码的关闭符号,一般和open="("合用。常用在in条件语句中。该属性可选。
collection
用于指定遍历参数的类型。注意,该属性必须指定,不同情况下,该属性的值是不一样的。
属性的取值
在遍历参数时,属性的值是必须指定的。不同情况下,该属性的取值也是不一样的,主要有以下三种情况:List类型、数值类型、Map类型。
若入参为单参数且参数类型是一个List,collection属性值为list。
若入参为单参数且参数类型是一个数组,collection属性值为array。
若传入参数为多参数,就需要把参数封装为一个Map进行处理,collection属性值为Map。若传入参数为多参数,就需要把参数封装为一个Map进行处理,collection属性值为Map。
5.那么我们继续尝试编写的动态sql语句,情景时:要从数据表passwordms中查询出id为1、2、3的账号信息,就可以利用数组作为参数,存储id的属性值1、2、3,并通过元素迭代数组完成账号信息的批量查询操作。
好那么我们来编写我们的Mapper文件:
<select id="findByIds" parameterType="list" resultType="PasswordMS">
SELECT * FROM passwordms
WHERE id IN
<foreach item="id" collection="list" open="(" separator="," close=")">
#{id}
foreach>
select>
在我们的代码中,findByIds 是查询的 ID,parameterType 设置为 list 表示传入的参数是一个 List,resultType 设置为 PasswordMS 表示返回结果是 PasswordMS 类型的对象。
编写测试类:
输入的参数类型为同一种,查询1-3的账号信息
@Test
void findByIds() {
SqlSession session = MyBatisUtil.createSqlSession();
List<Integer> idList = Arrays.asList(1, 2, 3); // 要查询的 id 列表
// 传入参数查询,返回结果
List<PasswordMS> passwordMSList = session.selectList("findByIds", idList);
for (PasswordMS s : passwordMSList) {
logger.info("id:" + s.getId() + ",账号:" + s.getAccount() + ",密码:" + s.getPassword() + ",网站名:" + s.getWebsiteName() + ",网站网址:" + s.getWebsiteURL() + ",网站缩略图:" + s.getWebsiteImage() + ",账号描述:" + s.getAccountDescription());
}
// 关闭 session
session.close();
}
可以看出,通过使用 元素就能够方便地在 MyBatis 中对集合进行迭代操作,构建需要的查询条件。
总结
这是第三天对SSM框架的学习,深入学习了MyBatis的动态SQL,它允许我们根据不同的条件在 SQL 查询中动态地构建、拼接和执行 SQL 语句。动态 SQL 可以帮助你编写更加灵活、可复用和动态的数据库查询语句,适用于各种复杂的业务场景。 想要跟着学习的可以去我的资源里面找对应的文件下载,我的md文件也会发上去,项目文件会上传可以自己跟着学习一下。
PS:sql语句自己编写┗|`O′|┛ 嗷~~
作者:Stevedash
发表于:2023年8月23日 16点28分
注:本文内容基于个人学习理解,如有错误或疏漏,欢迎指正。感谢阅读!如果觉得有帮助,请点赞和分享。
你可能感兴趣的:(JAVA企业级应用开发必学框架,SSM框架的学习,sql,学习,spring,mybatis)
Java后端微服务架构下的数据库分库分表:Sharding-Sphere
微赚淘客机器人开发者联盟@聚娃科技
架构java微服务
Java后端微服务架构下的数据库分库分表:Sharding-Sphere大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!随着微服务架构的广泛应用,数据库层面的扩展性问题逐渐凸显。Sharding-Sphere作为一个分布式数据库中间件,提供了数据库分库分表的能力,帮助开发者解决数据水平拆分的问题。数据库分库分表概述数据库分库分表是将数据分布到不同的数据库和表中,以
Java后端分布式系统的服务路由:智能DNS与服务网格
微赚淘客机器人开发者联盟@聚娃科技
java开发语言
Java后端分布式系统的服务路由:智能DNS与服务网格大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在分布式系统中,服务路由是确保请求高效、稳定地到达目标服务的关键技术。智能DNS和服努网格是两种不同的服务路由实现方式。服务路由概述服务路由负责将请求根据一定的策略分发到不同的服务实例或集群。智能DNS智能DNS通过域名解析将请求指向最佳的服务节点,通常基于地理位
Java中如何进行分布式系统设计?
微赚淘客机器人开发者联盟@聚娃科技
java开发语言
Java中如何进行分布式系统设计?大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们来讨论如何在Java中进行分布式系统设计。分布式系统是指多个计算节点通过网络相互连接,共同完成某个任务的系统。它具有高可用性、扩展性和容错性等优点,是现代大规模应用系统的重要组成部分。1.分布式系统的基本概念分布式系统涉及多个计算节点,这些节
AI时代前端开发的学习能力:与时俱进的挑战与机遇
前端
在飞速发展的科技浪潮中,前端开发领域正经历着翻天覆地的变化。得益于AI写代码工具的兴起,低代码/无代码开发模式日益普及,各种新技术、新框架、新工具层出不穷,这无疑对前端工程师的学习能力提出了更高的要求。本文将探讨AI时代前端工程师所需的学习能力,以及如何应对这些挑战与机遇,最终在AI浪潮中立于不败之地。AI如何改变前端开发模式传统的软件开发流程往往需要大量的代码编写和调试,耗时费力。而AI的介入,
微软 LayoutLMv3:通过统一文本和图像掩码进行文档人工智能预训练
人工智能
LayoutLMv3:通过统一文本和图像掩码进行文档人工智能预训练LayoutLMv3应用统一的文本-图像多模态Transformer来学习跨模态表示。Transformer具有多层架构,每层主要由多头自注意力机制和逐位置全连接前馈网络组成。Transformer的输入是文本嵌入$Y=y_{1:L}$和图像嵌入$X=x_{1:M}$序列的连接,其中$L$和$M$分别是文本和图像的序列长度。通过Tr
DeepSeek 指导手册从入门到精通
长久的梦
DeepSeekDeepSeek技术架构解析DeepSeek代码重构应用DeepSeek提示词模板DeepSeek联网搜索技巧DeepSeek未来趋势DeepSeek开源的意义DeepSeek性能优化方法
目录正文第⼀章:准备篇(30分钟上手)❄️1.1三分钟创建你的AI伙伴❄️1.2认识你的AI控制台第⼆章:基础对话篇(像交朋友⼀样学交流)❄️2.1有效提问的五个⻩⾦法则❄️2.2新⼿必学的10个魔法指令第三章:效率⻜跃篇(⽂件处理与复杂任务)❄️3.1五分钟学会⽂档分析❄️3.2让AI帮你写代码第四章:场景实战篇⸺解决真实世界问题❄️4.1学术论⽂全流程辅助(从开题到答辩)❄️阶段⼀:开题攻坚❄
React 前端框架开发入门:从零开始构建你的第一个应用
2401_89793006
热门话题react.js前端框架前端
React前端框架开发入门:从零开始构建你的第一个应用React是当前最流行的前端框架之一,由Facebook(Meta)开发并开源。它采用组件化开发的模式,使UI变得更易管理和复用。本文将带你从零开始,掌握React的基础知识,并构建你的第一个React应用!1.什么是React?React是一个用于构建用户界面的JavaScript库,主要用于构建单页应用(SPA)。其核心特点包括:✅组件化开
three.js 低代码, 组态,封装编辑器实现降本增效
2201_75964656
编辑器智慧城市低代码javascript前端
学习基础three.js案例预览地址:https://z2586300277.github.io/three-cesium-examples国内站点预览:http://threehub.cngithub地址:https://github.com/z2586300277/three-cesium-examples开发历程预览查看https://z2586300277.github.io/three-
团队领导者指南:如何选择和应用项目管理方法论
项目管理软件
项目管理方法论是用于规划、执行和控制项目的系统化框架和流程。不同的方法论适用于不同类型的项目和团队需求。以下是几种常见的项目管理方法论:1.瀑布模型(Waterfall)●特点:线性顺序的项目管理方法,项目分为多个阶段(如需求分析、设计、开发、测试、部署),每个阶段完成后才能进入下一个阶段。●适用场景:需求明确、变更较少的项目,如建筑、制造业等。●优点:结构清晰,易于理解和执行。●缺点:缺乏灵活性
【深度学习】常见模型-GPT(Generative Pre-trained Transformer,生成式预训练 Transformer)
IT古董
深度学习人工智能深度学习gpttransformer
GPT(GenerativePre-trainedTransformer)1️⃣什么是GPT?GPT(GenerativePre-trainedTransformer,生成式预训练Transformer)是由OpenAI开发的基于Transformer解码器(Decoder)的自回归(Autoregressive)语言模型。它能够通过大量无监督数据预训练,然后微调(Fine-tuning)以适应特
从负数绝对值的计算来看Ruby的一个“奇葩”行为
计算一个数的绝对值是非常基础的操作,几乎所有主流的编程语言都内置了相应的函数或方法。在PHP、Python、SQL等语言中,直接调用abs()函数即可,例如abs(-1)。到了Java、C#这类面向对象的语言中,abs()通常是Math类的静态方法,调用时要加上前缀Math.,即Math.abs(-1)。Go语言就要稍微麻烦一点了,因为math包中的Abs()函数仅支持float64类型的参数,如
kotlin标准库里面也有很多java类
yzpyzp
kotlinandroidjava
Kotlin标准库中确实存在许多与Java类直接关联或基于Java类封装的结构,但这并不是“问题”,而是Kotlin与JVM生态深度兼容和互操作性的体现。以下从技术原理和设计哲学的角度详细解释:一、Kotlin与JVM的底层关系Kotlin代码最终会编译成JVM字节码,因此它必须与Java类库无缝协作。Kotlin标准库的设计原则之一就是兼容Java生态,其内部实现会直接或间接依赖Java标准库中
kotlin-kapt
yzpyzp
kotlinandroid
kotlin-kaptkotlin-kapt是Kotlin的一个插件,专门用于处理注解处理器(AnnotationProcessor)。以下是对该插件的详细解释和指南:kotlin-kapt是什么?kotlin-kapt是Kotlin官方提供的一个插件,用于在Kotlin项目中支持注解处理。KAPT(KotlinAnnotationProcessingTool)是JavaAPT(Annotatio
攻克AWS认证机器学习工程师(AWS Certified Machine Learning Engineer) - 助理级别认证:我的成功路线图
硅基创想家
AI-人工智能与大模型aws机器学习云计算AWS认证
引言当我决定考取AWS认证机器学习工程师-助理(AWSCertifiedMachineLearningEngineer—Associate)级别证书时,我就预料到这将是一段充满挑战但回报颇丰的旅程。跟你说吧,它在这两方面都没让我失望。这项考试面向的是不仅理解机器学习原理,还对AWS生态系统有扎实基础认知的专业人士。如果你还未达到AWS认证解决方案架构师-助理级别的水平,那你得先夯实这些基础。一个不
Tritonserver 在得物的最佳实践
运维
一、Tritonserver介绍Tritonserver是Nvidia推出的基于GPU和CPU的在线推理服务解决方案,因其具有高性能的并发处理和支持几乎所有主流机器学习框架模型的特点,是目前云端的GPU服务高效部署的主流方案。Tritonserver的部署是以模型仓库(ModelRepository)的形式体现的,即需要模型文件和配置文件,且按一定的格式放置如下,根目录下每个模型有各自的文件夹。.
Kubernetes (K8S)决定弃用 Docker!Kubernetes (K8S)学习详解
熙媛
学习笔记javadockerjenkinslinux服务器
确实如此。Kubernetes现已弃用Docker!!!目前,Kubernetes中的Docker支持功能现已弃用,并将在之后的版本中被删除。Kubernetes之前使用的是一个名为dockershim的模块,用以实现对Docker的CRI支持。但Kubernetes社区发现了与之相关的维护问题,因此建议大家考虑使用包含CRI完整实现(兼容v1alpha1或v1)的可用容器运行时。简而言之,Doc
【JavaScript fetch API】简介和使用
williamdsy
前端javascript开发语言ecmascriptfetchapi简单使用
fetch是一个现代的JavaScriptAPI,用于获取资源,例如从网络服务器获取数据。它提供了一种比传统的XMLHttpRequest更简洁、更易于使用的机制来进行网络请求。fetch基于Promise,这使得异步操作更容易处理。核心概念:fetch(url,[options]):这是fetchAPI的核心函数。它接受一个URL作为第一个参数,可选地接受一个包含请求配置的options对象作为
python同花顺股票实时数据_如何获取实时的股票数据?
weixin_39575648
python同花顺股票实时数据
Ref===>tushare系统:Ubuntu15.04Python:2.7环境包:Anaconda,仅供娱乐...最近在学习Python语言,刚好也想学学炒股,因此学习了一些基础知识后,打算做一些股票相关的demo练手,第一个要解决的问题当然是数据采集。翻遍了网络,看了一些朋友的代码片段(尤其感谢tushare的作者),知道了向API请求数据的格式大概是这样的:http://api.financ
react中网络请求应该什么时候请求
逆袭的菜鸟X
前端面试集锦react.js前端javascript
在React中,进行网络请求的最佳时机通常是组件挂载之后,因为你需要确保组件已经渲染到DOM中,然后再发起异步请求以获取数据。网络请求通常应该放在以下生命周期方法中:1.类组件:对于类组件,最常用的生命周期方法是componentDidMount,它会在组件第一次渲染之后被调用。示例:importReact,{Component}from'react';classMyComponentextend
[Android Studio]SQLScout插件安装破解
weixin_33755847
移动开发数据库开发工具
以下内容为原创,欢迎转载,转载请注明来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5972138.html[AndroidStudio]SQLScout插件安装破解0.写在前面想当初很长一段时间内不想用AndroidStudio而喜欢用IntellijIDEA(旗舰版)其中一个原因就是因为IntellijIDEA(旗舰版)自带DatabaseExp
微软 LayoutLMv3:通过统一文本和图像掩码进行文档人工智能预训练
人工智能
LayoutLMv3:通过统一文本和图像掩码进行文档人工智能预训练LayoutLMv3应用统一的文本-图像多模态Transformer来学习跨模态表示。Transformer具有多层架构,每层主要由多头自注意力机制和逐位置全连接前馈网络组成。Transformer的输入是文本嵌入$Y=y_{1:L}$和图像嵌入$X=x_{1:M}$序列的连接,其中$L$和$M$分别是文本和图像的序列长度。通过Tr
AI前端开发学习资源与途径:开启你的智能化前端之旅
前端
随着人工智能技术的飞速发展,AI写代码工具已经不再是遥不可及的梦想,它正深刻地改变着前端开发的模式。AI赋能前端开发,不仅提高了开发效率,也降低了学习门槛,为更多开发者打开了通往智能化前端世界的大门。然而,学习AI前端开发也面临着诸多挑战,需要系统学习和持续实践。本文将为你详细介绍AI前端开发的学习途径、资源以及实践经验,助你开启这段精彩的旅程。AI前端开发的兴起及重要性近年来,人工智能技术在各个
AI时代的前端开发:拥抱变化,迎接挑战
前端
近年来,人工智能(AI)技术的飞速发展深刻地改变着各个行业,前端开发领域也不例外。面对AI带来的冲击和挑战,开发者们需要积极拥抱变化,学习新技能,才能在竞争激烈的市场中立于不败之地。本文将探讨AI时代前端开发面临的新挑战,以及如何利用AI赋能前端开发,提高效率,应对技术更新迭代。关键词:AI写代码工具AI时代前端开发的新挑战AI技术的快速发展,为前端开发带来了前所未有的机遇,同时也带来了新的挑战。
DeepSeek 实现原理探析
rockmelodies
人工智能aideepseek深度学习
DeepSeek实现原理探析引言DeepSeek是一种基于深度学习的智能搜索技术,它通过结合自然语言处理(NLP)、信息检索(IR)和机器学习(ML)等多领域的技术,旨在提供更加精准、智能的搜索结果。本文将深入探讨DeepSeek的实现原理,分析其核心技术及其在实际应用中的表现。一、DeepSeek的核心技术自然语言处理(NLP)词嵌入(WordEmbedding):DeepSeek使用如Word
颠覆传统Java性能瓶颈:Quarkus+GraalVM原生镜像实战解析
桂月二二
java开发语言
引言:云原生时代的Java困境在容器化与Serverless架构大行其道的今天,传统Java应用的启动速度与内存消耗已成为制约其发展的关键瓶颈。当Node.js应用在300ms内完成冷启动时,SpringBoot应用可能还在JVM预热阶段。本文将揭秘如何通过Quarkus框架与GraalVM原生编译技术,打造启动时间findByOrderNumber(StringorderNumber){retu
JavaScript Fetch
noPermission
JavaScriptjavascript前端开发语言
一、什么是fetch?在前端的发展历程中用于请求网络资源的方式主要有三种:从原生的XMLHttpRequest到jQuery的Ajax再到现在主流的axios,其中Ajax和axios都是对XMLHttpRequest的封装(本质上都是使用XMLHttpRequest方法获取网络资源),这些封装库让开发者对XMLHttpRequest的使用变得更简单高效。然而fetch的推出使开发者对网络资源的异
Android studio 打包 uni App
前端小小小学生
uni-app前端androiduni-appandroidstudio
Androidstudio打包uniAppHBuilderX本身有原生App云打包功能,本身没什么需求可以直接使用,如果需要多次打包,云打包每次链接只能提供5次下载机会,而且要时间排队打包,所以学习了一下Androidstudio工具打包,下面是使用方法,仅供参考:1.安装Androidstudio下载Androidstudio下载地址:http://www.android-studio.org/
docker部署mysql5.7
a cool fish(无名)
docker容器运维
1.拉取MySQL5.7镜像打开终端或命令行,执行以下命令来拉取MySQL5.7的Docker镜像:dockerpullmysql:5.72.运行MySQL容器使用以下命令来运行MySQL容器,并将其端口映射到主机的端口上,以便外部用户可以访问:dockerrun--namemysql57-eMYSQL_ROOT_PASSWORD=my-secret-pw-p3306:3306-dmysql:5.
JAVA架构师需要掌握的常用架构模式有哪些?
猿享天开
Java开发从入门到精通java架构开发语言
引言Java架构师必须掌握常用技术组合及其选型逻辑。技术组合的选择直接影响系统的可扩展性、性能和维护成本。以下是当前主流技术组合、选型原则及常用架构应用的详细说明:一、当前主流技术组合及其应用场景1.基础开发框架技术组合应用场景核心优势SpringBoot+MyBatis+MySQL中小型单体应用、快速迭代业务开发效率高、ORM轻量、数据库兼容性强SpringBoot+JPA+PostgreSQL
Django视图与URLs路由详解
m0_74824802
面试学习路线阿里巴巴django数据库sqlite
在DjangoWeb框架中,视图(Views)和URLs路由(URLrouting)是Web应用开发的核心概念。它们共同负责将用户的请求映射到相应的Python函数,并返回适当的响应。本篇博客将深入探讨Django的视图和URLs路由系统,提供实际的代码示例和操作指导,确保读者能够具体而实际地了解如何使用这些功能来构建健壮的Web应用。目录Django视图与URLs路由详解一、理解Django视图
jQuery 键盘事件keydown ,keypress ,keyup介绍
107x
jsjquerykeydownkeypresskeyup
本文章总结了下些关于jQuery 键盘事件keydown ,keypress ,keyup介绍,有需要了解的朋友可参考。
一、首先需要知道的是: 1、keydown() keydown事件会在键盘按下时触发. 2、keyup() 代码如下 复制代码
$('input').keyup(funciton(){
AngularJS中的Promise
bijian1013
JavaScriptAngularJSPromise
一.Promise
Promise是一个接口,它用来处理的对象具有这样的特点:在未来某一时刻(主要是异步调用)会从服务端返回或者被填充属性。其核心是,promise是一个带有then()函数的对象。
为了展示它的优点,下面来看一个例子,其中需要获取用户当前的配置文件:
var cu
c++ 用数组实现栈类
CrazyMizzz
数据结构C++
#include<iostream>
#include<cassert>
using namespace std;
template<class T, int SIZE = 50>
class Stack{
private:
T list[SIZE];//数组存放栈的元素
int top;//栈顶位置
public:
Stack(
java和c语言的雷同
麦田的设计者
java递归scaner
软件启动时的初始化代码,加载用户信息2015年5月27号
从头学java二
1、语言的三种基本结构:顺序、选择、循环。废话不多说,需要指出一下几点:
a、return语句的功能除了作为函数返回值以外,还起到结束本函数的功能,return后的语句
不会再继续执行。
b、for循环相比于whi
LINUX环境并发服务器的三种实现模型
被触发
linux
服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器。按处理方式来分有循环服务器和并发服务器。
1 循环服务器与并发服务器模型
在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务端的程序就提出了特殊的要求。
目前最常用的服务器模型有:
·循环服务器:服务器在同一时刻只能响应一个客户端的请求
·并发服务器:服
Oracle数据库查询指令
肆无忌惮_
oracle数据库
20140920
单表查询
-- 查询************************************************************************************************************
-- 使用scott用户登录
-- 查看emp表
desc emp
ext右下角浮动窗口
知了ing
JavaScriptext
第一种
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/
浅谈REDIS数据库的键值设计
矮蛋蛋
redis
http://www.cnblogs.com/aidandan/
原文地址:http://www.hoterran.info/redis_kv_design
丰富的数据结构使得redis的设计非常的有趣。不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与。redis的DBA需要熟悉数据结构,并能了解使用场景。
maven编译可执行jar包
alleni123
maven
http://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven
<build>
<plugins>
<plugin>
<artifactId>maven-asse
人力资源在现代企业中的作用
百合不是茶
HR 企业管理
//人力资源在在企业中的作用人力资源为什么会存在,人力资源究竟是干什么的 人力资源管理是对管理模式一次大的创新,人力资源兴起的原因有以下点: 工业时代的国际化竞争,现代市场的风险管控等等。所以人力资源 在现代经济竞争中的优势明显的存在,人力资源在集团类公司中存在着 明显的优势(鸿海集团),有一次笔者亲自去体验过红海集团的招聘,只 知道人力资源是管理企业招聘的 当时我被招聘上了,当时给我们培训 的人
Linux自启动设置详解
bijian1013
linux
linux有自己一套完整的启动体系,抓住了linux启动的脉络,linux的启动过程将不再神秘。
阅读之前建议先看一下附图。
本文中假设inittab中设置的init tree为:
/etc/rc.d/rc0.d
/etc/rc.d/rc1.d
/etc/rc.d/rc2.d
/etc/rc.d/rc3.d
/etc/rc.d/rc4.d
/etc/rc.d/rc5.d
/etc
Spring Aop Schema实现
bijian1013
javaspringAOP
本例使用的是Spring2.5
1.Aop配置文件spring-aop.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmln
【Gson七】Gson预定义类型适配器
bit1129
gson
Gson提供了丰富的预定义类型适配器,在对象和JSON串之间进行序列化和反序列化时,指定对象和字符串之间的转换方式,
DateTypeAdapter
public final class DateTypeAdapter extends TypeAdapter<Date> {
public static final TypeAdapterFacto
【Spark八十八】Spark Streaming累加器操作(updateStateByKey)
bit1129
update
在实时计算的实际应用中,有时除了需要关心一个时间间隔内的数据,有时还可能会对整个实时计算的所有时间间隔内产生的相关数据进行统计。
比如: 对Nginx的access.log实时监控请求404时,有时除了需要统计某个时间间隔内出现的次数,有时还需要统计一整天出现了多少次404,也就是说404监控横跨多个时间间隔。
Spark Streaming的解决方案是累加器,工作原理是,定义
linux系统下通过shell脚本快速找到哪个进程在写文件
ronin47
一个文件正在被进程写 我想查看这个进程 文件一直在增大 找不到谁在写 使用lsof也没找到
这个问题挺有普遍性的,解决方法应该很多,这里我给大家提个比较直观的方法。
linux下每个文件都会在某个块设备上存放,当然也都有相应的inode, 那么透过vfs.write我们就可以知道谁在不停的写入特定的设备上的inode。
幸运的是systemtap的安装包里带了inodewatch.stp,位
java-两种方法求第一个最长的可重复子串
bylijinnan
java算法
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class MaxPrefix {
public static void main(String[] args) {
String str="abbdabcdabcx";
Netty源码学习-ServerBootstrap启动及事件处理过程
bylijinnan
javanetty
Netty是采用了Reactor模式的多线程版本,建议先看下面这篇文章了解一下Reactor模式:
http://bylijinnan.iteye.com/blog/1992325
Netty的启动及事件处理的流程,基本上是按照上面这篇文章来走的
文章里面提到的操作,每一步都能在Netty里面找到对应的代码
其中Reactor里面的Acceptor就对应Netty的ServerBo
servelt filter listener 的生命周期
cngolon
filterlistenerservelt生命周期
1. servlet 当第一次请求一个servlet资源时,servlet容器创建这个servlet实例,并调用他的 init(ServletConfig config)做一些初始化的工作,然后调用它的service方法处理请求。当第二次请求这个servlet资源时,servlet容器就不在创建实例,而是直接调用它的service方法处理请求,也就是说
jmpopups获取input元素值
ctrain
JavaScript
jmpopups 获取弹出层form表单
首先,我有一个div,里面包含了一个表单,默认是隐藏的,使用jmpopups时,会弹出这个隐藏的div,其实jmpopups是将我们的代码生成一份拷贝。
当我直接获取这个form表单中的文本框时,使用方法:$('#form input[name=test1]').val();这样是获取不到的。
我们必须到jmpopups生成的代码中去查找这个值,$(
vi查找替换命令详解
daizj
linux正则表达式替换查找vim
一、查找
查找命令
/pattern<Enter> :向下查找pattern匹配字符串
?pattern<Enter>:向上查找pattern匹配字符串
使用了查找命令之后,使用如下两个键快速查找:
n:按照同一方向继续查找
N:按照反方向查找
字符串匹配
pattern是需要匹配的字符串,例如:
1: /abc<En
对网站中的js,css文件进行打包
dcj3sjt126com
PHP打包
一,为什么要用smarty进行打包
apache中也有给js,css这样的静态文件进行打包压缩的模块,但是本文所说的不是以这种方式进行的打包,而是和smarty结合的方式来把网站中的js,css文件进行打包。
为什么要进行打包呢,主要目的是为了合理的管理自己的代码 。现在有好多网站,你查看一下网站的源码的话,你会发现网站的头部有大量的JS文件和CSS文件,网站的尾部也有可能有大量的J
php Yii: 出现undefined offset 或者 undefined index解决方案
dcj3sjt126com
undefined
在开发Yii 时,在程序中定义了如下方式:
if($this->menuoption[2] === 'test'),那么在运行程序时会报:undefined offset:2,这样的错误主要是由于php.ini 里的错误等级太高了,在windows下错误等级
linux 文件格式(1) sed工具
eksliang
linuxlinux sed工具sed工具linux sed详解
转载请出自出处:
http://eksliang.iteye.com/blog/2106082
简介
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾
Android应用程序获取系统权限
gqdy365
android
引用
如何使Android应用程序获取系统权限
第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:
1. 在应用程序的AndroidManifest.xml中的manifest节点
HoverTree开发日志之验证码
hvt
.netC#asp.nethovertreewebform
HoverTree是一个ASP.NET的开源CMS,目前包含文章系统,图库和留言板功能。代码完全开放,文章内容页生成了静态的HTM页面,留言板提供留言审核功能,文章可以发布HTML源代码,图片上传同时生成高品质缩略图。推出之后得到许多网友的支持,再此表示感谢!留言板不断收到许多有益留言,但同时也有不少广告,因此决定在提交留言页面增加验证码功能。ASP.NET验证码在网上找,如果不是很多,就是特别多
JSON API:用 JSON 构建 API 的标准指南中文版
justjavac
json
译文地址:https://github.com/justjavac/json-api-zh_CN
如果你和你的团队曾经争论过使用什么方式构建合理 JSON 响应格式, 那么 JSON API 就是你的 anti-bikeshedding 武器。
通过遵循共同的约定,可以提高开发效率,利用更普遍的工具,可以是你更加专注于开发重点:你的程序。
基于 JSON API 的客户端还能够充分利用缓存,
数据结构随记_2
lx.asymmetric
数据结构笔记
第三章 栈与队列
一.简答题
1. 在一个循环队列中,队首指针指向队首元素的 前一个 位置。
2.在具有n个单元的循环队列中,队满时共有 n-1 个元素。
3. 向栈中压入元素的操作是先 移动栈顶指针&n
Linux下的监控工具dstat
网络接口
linux
1) 工具说明dstat是一个用来替换 vmstat,iostat netstat,nfsstat和ifstat这些命令的工具, 是一个全能系统信息统计工具. 与sysstat相比, dstat拥有一个彩色的界面, 在手动观察性能状况时, 数据比较显眼容易观察; 而且dstat支持即时刷新, 譬如输入dstat 3, 即每三秒收集一次, 但最新的数据都会每秒刷新显示. 和sysstat相同的是,
C 语言初级入门--二维数组和指针
1140566087
二维数组c/c++指针
/*
二维数组的定义和二维数组元素的引用
二维数组的定义:
当数组中的每个元素带有两个下标时,称这样的数组为二维数组;
(逻辑上把数组看成一个具有行和列的表格或一个矩阵);
语法:
类型名 数组名[常量表达式1][常量表达式2]
二维数组的引用:
引用二维数组元素时必须带有两个下标,引用形式如下:
例如:
int a[3][4]; 引用:
10点睛Spring4.1-Application Event
wiselyman
application
10.1 Application Event
Spring使用Application Event给bean之间的消息通讯提供了手段
应按照如下部分实现bean之间的消息通讯
继承ApplicationEvent类实现自己的事件
实现继承ApplicationListener接口实现监听事件
使用ApplicationContext发布消息
按字母分类:
ABCDEFGHIJKLMNOPQRSTUVWXYZ其他
首页 -
关于我们 -
站内搜索 -
Sitemap -
侵权投诉
版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.