mybatis中的一些使用

news/2024/11/28 20:50:21/

#{}与${}的区别

@Delete("delete from emp where id = #{id}")
//生成预编译SQL语句,效率更高,将#{id}替换为“?”,也更安全,防止SQL注入,#不能出现在''中,因此不能用于模糊查询
@Delete("delete from emp where id = ${id}")
//将id拼接在sql语句中,每次都要生成新语句,效率慢,而且有SQL注入的安全风险,$可以出现在''中,可以用于模糊查询

他俩的区别与Java JDBC中PreparedStatement和Statement的区别一样

返回并拿到操作的数据的主键

@Options(keyProperty = “id”,useGeneratedKeys = true)

useGeneratedKeys = true表示我们要获取返回的主键
keyProperty = “id”,将返回来的主键封装进往实体类的哪个属性,此处为id

#配置mybatis的日志,指定输出到控制台

mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

#开启mybatis的驼峰命名自动映射开关 ab_cd -> abCd

当数据表的字段名与实体类的属性名不一致时,mybatis不能完成自动封装。比如dept_id 与deptId
在application.properties文件中配置,或者为字段取别名,再或者使用@result和@results注解
mybatis.configuration.map-underscore-to-camel-case=true

在进行模糊查询时,由于#不能放进""或 ’ '内,所以无法完成预编译SQL语句,$可以放进 ’ ’ 内,但有SQL注入的风险,所以可以采用concat函数来解决

@Select("select * from emp where name like concat('%',#{name},'%') and gender=#{gender}

动态SQL语句重要标签

<if test="条件">语句</if> 
<where></where> <!--可以去掉多余的and,or等关键字,若if都不满足,则where本身也去掉!-->
<set></set><!--可以去掉多余的逗号--><foreach collection="数组/集合名" item="遍历的元素" separator="分隔符" open="遍历开始前拼接的SQL片段" close="遍历结束后拼接的SQL片段">#{}</foreach>
<!--主要用于批量操作 -->
如:
接口方法:void deleteById(Integer[] ids);
SQL语句:delete from emp where id in (18,30,24);
<delete id="deleteById">delete from emp where id in<foreach collection="ids" item="id" separator="," open="(" close=")">#{id}</foreach>
</delete>定义:
<sql id="唯一标识">需要重复使用的SQL语句片段</sql>
引用:
<include refid="需要使用的sql的id" />

http://www.ppmy.cn/news/105002.html

相关文章

代码随想录算法训练营第五十六天 | 编辑距离2

583. 两个字符串的删除操作 文档讲解&#xff1a;代码随想录 (programmercarl.com) 视频讲解&#xff1a;动态规划之子序列&#xff0c;还是为了编辑距离做铺垫 | LeetCode&#xff1a;583.两个字符串的删除操作_哔哩哔哩_bilibili 状态&#xff1a;不会做。 思路 动态规划一 …

简单认识OSI(计算机网络分层)七层模型

前言 学校上课讲的太笼统啥也不是&#xff0c;自己学的太玄学似懂非懂突然在看到了一篇公众文文章。文章从初始到现在&#xff0c;步步为营的遇到一个解决一个前人的问题&#xff0c;有了细致入微的讲述&#xff0c;把之前学的死东西都连起来了。 如果让你来设计网络https://m…

java.awt.datatransfer.Clipboard剪切板获取String字符串文本

java.awt.datatransfer.Clipboard剪切板获取String字符串文本 有两种方法获取 直接从Clipboard获得 (String) systemClipboard.getData(DataFlavor.stringFlavor);从Clipboard获得Transable再获得String (String) systemClipboard.getContents(null).getTransferData(DataFlav…

效率至少提升数倍的office技巧

在现代办公室&#xff0c;WPS Office已成为无可替代的工具之一。然而&#xff0c;许多办公室员工却未能充分发掘WPS Office的强大功能和技巧。在快节奏的工作环境中&#xff0c;掌握一些WPS Office的技巧&#xff0c;将帮助员工们提高工作效率、改善文件处理和团队协作能力。下…

SpringCloudAlibaba下篇(GateWay,Skywalking)(超级无敌认真好用,万字收藏篇!!!!)

文章目录 SpringCloudAlibaba下篇(GateWay,Skywalking)1 GateWay1.1 什么是网关1.2 GateWay介绍1.3 GataWay的基本使用1.4 GataWay整合Nacos1.5 断言路由工厂1.5.1 内置断言路由工厂1.5.2 自定义断言路由工厂 1.6 过滤器工厂1.6.1 内置局部过滤器工厂1.6.2 自定义局部过滤器1.6…

基于Selenium+Python的web自动化测试框架

一、什么是Selenium&#xff1f; Selenium是一个基于浏览器的自动化测试工具&#xff0c;它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分&#xff1a;Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE&#xff1a;Firefo…

华为OD机试真题B卷 Java 实现【统计字符】,附详细解题思路

一、题目描述 输入一行字符&#xff0c;分别统计出包含英文字母、空格、数字和其它字符的个数。 数据范围&#xff1a;输入的字符串长度满足 1 \le n \le 1000 \1≤n≤1000 。 二、输入描述 输入一行字符串&#xff0c;可以有空格。 三、输出描述 统计其中英文字符&#…

AI一点通:李彦宏说未来50%人和提示工程打交道,吴恩达最新提示工程课程总结!

越来越多的人意识到掌握提示工程的重要性&#xff0c;这种使用语言&#xff08;例如英语&#xff09;进行编码的新方法。 一些大型科技公司的首席执行官甚至预测&#xff0c;未来一半的工作将以即时工程为基础。 那么如何有效地与prompty engineering合作呢&#xff1f;最近&a…