java框架 - MyBatis映射器

本文详细介绍了MyBatis中#{ }和${ }的区别,#{ }提供预编译处理,防止SQL注入,而${ }则可能导致SQL注入。文中还探讨了模糊查询的最佳做法,并列举了在Mapper中传递多个参数的不同方法,包括顺序传参法、@Param注解法、Map传参法和Java Bean传参法。此外,文章讲解了MyBatis如何进行批量操作,使用foreach标签的注意事项,以及ExecutorType.BATCH模式。最后,讨论了MyBatis的主键获取、字段名映射、Mapper接口的编写方式、接口绑定的实现以及动态SQL的使用等核心概念。
摘要由CSDN通过智能技术生成
  1. #{}和KaTeX parse error: Expected 'EOF', got '#' at position 7: {}的区别 #̲{}是占位符,预编译处理;{}是拼接符,字符串替换,没有预编译处理。
    Mybatis在处理#{}时,#{}传入参数是以字符串传入,会将SQL中的#{}替换为?号,调用
    PreparedStatement的set方法来赋值。
    #{} 可以有效的防止SQL注入,提高系统安全性;KaTeX parse error: Expected 'EOF', got '#' at position 15: {} 不能防止SQL 注入 #̲{} 的变量替换是在DBMS …{} 的变量替换是在 DBMS 外
  2. 模糊查询like语句该怎么写
    1 ’%${question}%’ 可能引起SQL注入,不推荐
    2 “%”#{question}"%" 注意:因为#{…}解析成sql语句时候,会在变量外侧自动加单引号’ ',所以
    这里 % 需要使用双引号" ",不能使用单引号 ’ ',不然会查不到任何结果。
    3 CONCAT(’%’,#{question},’%’) 使用CONCAT()函数,(推荐)
    4 使用bind标签(不推荐)
  3. 在mapper中如何传递多个参数
    方法1:顺序传参法在这里插入图片描述

#{}里面的数字代表传入参数的顺序。
这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错。
方法2:@Param注解传参法在这里插入图片描述

#{}里面的名称对应的是注解@Param括号里面修饰的名称。
这种方法在参数不多的情况还是比较直观的,(推荐使用)。
方法3:Map传参法在这里插入图片描述

#{}里面的名称对应的是Map里面的key名称。
这种方法适合传递多个参数,且参数易变能灵活传递的情况。(推荐使用)。
方法4:Java Bean传参法
#{}里面的名称对应的是User类里面的成员属性。
这种方法直观,需要建一个实体类,扩展不容易,需要加属性,但代码可读性强,业务逻辑处理方
便,推荐使用。(推荐使用)。
20. Mybatis如何执行批量操作
使用foreach标签
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach标签的属性主
要有item,index,collection,open,separator,close。
item   表示集合中每一个元素进行迭代时的别名,随便起的变量名;
index   指定一个名字,用于表示在迭代过程中,每次迭代到的位置,不常用;
open   表示该语句以什么开始,常用“(”;
separator 表示在每次进行迭代之间以什么符号作为分隔符,常用“,”;
close   表示以什么结束,常用“)”。
在使用foreach的时候最关键的也是最容易出错的就是collectio

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值