栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Mybatis】单表多表查询,动态SQL使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Mybatis】单表多表查询,动态SQL使用

文章目录
  • 单表查询操作
    • 参数占位符#{}和${}
      • ${} VS #{}
    • SQL 注入
    • like模糊查询
  • 多表查询操作
    • 一对一多表查询
    • 一对多多表查询
  • 动态SQL使用
    • if标签
    • trim标签
    • where标签
    • set标签
    • foreach标签

单表查询操作 参数占位符#{}和${}
  • #{}:相当于JDBC里面替换占位符的操作方式(#{}->“”).相当于预编译处理(预编译处理可以防止SQL注入问题)
  • ${}:相当于直接替换(desc这种关键字),但这种不能预防SQL注入
select * from userinfo where username='${name}'
${} VS #{}
  1. ${}是直接替换,#{}是预执行;
  2. ${} 会存在SQL 注入问题,#{}不存在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进行字符串拼接
   
        select a.*,u.id from articleinfo as a left join userinfo as u on a.uid = u.id;
    
    
        select u.*,a.id a_id,a.title a_title from userinfo u left join articleinfo a on u.id=a.uid
 
动态SQL使用 if标签
  • 注册分为必填和选填,如果在添加用户的时候有不确定的字段传入,就需要使用动态标签if来判断
//p是传递过来的参数名,并不是表的字段名
 
        insert into userinfo(username,password,
        
         photo,
        
         state)
        values(#{username},#{password},
        
            #{p},
        
       #{state})
 
trim标签
  • trim标签的属性:
  • prefix:表示整个语句块,以prefix的值作为前缀
  • suffix:表示整个语句块,以suffix的值作为后缀
  • prefixOverrides:去掉最前面的符合条件的字符
  • suffixOverrides:去掉最后面的符合条件的字符
 
        insert into userinfo
        
            
                username,
            
            
                password,
            
            
                photo,
            
            
                state,
            
        
        values
        
            
                #{username},
            
            
                #{password},
            
            
                #{p},
            
            
                #{state},
            
        
    
where标签
  • where标签首先可以帮助我们生成where,如果有查询条件,那么就生成where,如果没有查询条件,就会忽略where
  • 其次where标签可以判断第一个查询条件前面有没有and,如果有则会删除