- 单表查询操作
- 参数占位符#{}和${}
- ${} VS #{}
- SQL 注入
- like模糊查询
- 多表查询操作
- 一对一多表查询
- 一对多多表查询
- 动态SQL使用
- if标签
- trim标签
- where标签
- set标签
- foreach标签
- #{}:相当于JDBC里面替换占位符的操作方式(#{}->“”).相当于预编译处理(预编译处理可以防止SQL注入问题)
- ${}:相当于直接替换(desc这种关键字),但这种不能预防SQL注入
select * from userinfo where username='${name}'
${} VS #{}
- ${}是直接替换,#{}是预执行;
- ${} 会存在SQL 注入问题,#{}不存在SQL注入问题
UserInfo userInfo = userMapper.login("admin","' or 1='1");
mysql> select * from userinfo where username = 'admin' and password ='' or 1='1'; +----+----------+----------+-------+---------------------+---------------------+-------+ | id | username | password | photo | createtime | updatetime | state | +----+----------+----------+-------+---------------------+---------------------+-------+ | 1 | admin | admin | | 2021-12-06 17:10:48 | 2021-12-06 17:10:48 | 1 | +----+----------+----------+-------+---------------------+---------------------+-------+ 1 row in set (0.00 sec)like模糊查询
- 用concat进行字符串拼接
多表查询操作 一对一多表查询
- 一对一的多表查询:
- 需要设置resultMap中有个association标签,property对应实体类的属性名,resultMap是关联属性的字典映射(必须要设置),columnPrefix是设置前缀,当多表查询中有相同的字段的话,就会报错
一对多多表查询
- collection标签,用法同association
动态SQL使用 if标签select u.*,a.id a_id,a.title a_title from userinfo u left join articleinfo a on u.id=a.uid
- 注册分为必填和选填,如果在添加用户的时候有不确定的字段传入,就需要使用动态标签if来判断
//p是传递过来的参数名,并不是表的字段名trim标签insert into userinfo(username,password, photo, state) values(#{username},#{password},#{p}, #{state})
- trim标签的属性:
- prefix:表示整个语句块,以prefix的值作为前缀
- suffix:表示整个语句块,以suffix的值作为后缀
- prefixOverrides:去掉最前面的符合条件的字符
- suffixOverrides:去掉最后面的符合条件的字符
where标签insert into userinfo values username, password, photo, state, #{username}, #{password}, #{p}, #{state},
- where标签首先可以帮助我们生成where,如果有查询条件,那么就生成where,如果没有查询条件,就会忽略where
- 其次where标签可以判断第一个查询条件前面有没有and,如果有则会删除
set标签select * from userinfo username=#{username} and password=#{password}
和where的使用基本一样
可以自动帮助你处理最后一个逗号,并且自动写set
foreach标签update blog title=#{newTitle}, author=#{newAuthor}, views = #{newViews} id=#{id} and title=#{title} and author=#{author} and views = #{views}
- foreach属性:
- collection:参数集合的名字
- item:给接下来要遍历的集合起的名字
- open:加的前缀是什么
- close:加的后缀是什么
- separator:每次遍历之间间隔的字符串
delete from userinfo where id in #{item}
先赞后看,养成习惯!!!^ _ ^♥♥♥
每天都更新知识点哦!!!
码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘记关注我哦!



