博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBatis---动态SQL
阅读量:5102 次
发布时间:2019-06-13

本文共 3175 字,大约阅读时间需要 10 分钟。

很多时候查询/修改会根据不同数据执行不同的sql语句,一般情况下,我们需要对sql进行拼装。在MyBatis中可以通过动态SQL实现,就避免了拼装SQL

if语句:满足条件,则执行语句

choose when 条件一,when 条件二......otherwise相当于if()else if()...else(),如果when的条件不满足,则会执行otherwise代码块中的SQL语句。

值得注意的是下面的例子中有两个id为selectIf的查询,两个传递的参数不同,一个是基础数据类型,一个是类对象。传参为基础数据类型,那么在判断、#后面传递参数的时候使用_parameter;传参为类对象,则使用类中对应的属性

        

 以上代码,每次使用条件时都添加了1=1,这样其实是不正确的,但我们需要条件,所以where和set就出来了。where用于删除没必要的and(在执行第一个条件时,是不需要and的),set用于update,在修改字段值时,没个字段后面都有一个“,”但是最后一个后面不应该有“,”而set便用于去除最后一个逗号

 trim即格式化SQL代码,trim有四个属性,这四个属性都配套使用

  • prefix:前缀增加
  • suffix:后缀增加
  • prefixOverrides:自动判断前置
  • suffixOverrides:自动判断后置
    
  update student  
    
      name=#{name},    
    
      zhuangtai=#{zhuangtai},    
  

foreach

foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组。foreach 语句用于循环访问集合以获取所需信息

基础数据类型的list:where标记之后输出的sql语句WHERE id in ( ? , ? )

 

@Test List
selectList = new ArrayList<>();selectList.add(1);selectList.add(2);List
jikeUsers = sqlSession.selectList("selectForeach",selectList);for(JikeUser jikeUser : jikeUsers)  System.out.println(jikeUser.getUserName());

 

类对象的list:where标记之后输出的sql语句WHERE (username like ? and password = ?) or (username like ? and password = ?)

 

@Test List
selectList = new ArrayList<>();selectList.add(new JikeUser("jike00100", "666666"));selectList.add(new JikeUser("author001", "123456"));List
jikeUsers = sqlSession.selectList("selectForeach1",selectList);for(JikeUser jikeUser : jikeUsers)  System.out.println(jikeUser.getUserName());

 

数组:where标记之后输出的sql语句WHERE id in ( ? , ? )

 

@Test int[] selectList = {1,2};List
jikeUsers = sqlSession.selectList("selectForeach",selectList);for(JikeUser jikeUser : jikeUsers) {  System.out.println(jikeUser.getUserName());

 

HashMap:where标记之后输出的sql语句WHERE userName like "%"?"%" and id in ( ? , ? )

 

@Test List
ids = new ArrayList<>();ids.add(1);ids.add(2);HashMap
hashMap = new HashMap<>();hashMap.put("ids", ids);hashMap.put("name", "jike00100");List
jikeUsers = sqlSession.selectList("selectForeach2",hashMap);for(JikeUser jikeUser : jikeUsers)System.out.println(jikeUser.getUserName());

 

由以上例子可以得出foreach中collection的参数一定是集合或数组等

 

转载于:https://www.cnblogs.com/xiaobaizhiqian/p/8060067.html

你可能感兴趣的文章
软件包的使用
查看>>
linux中启动与终止lnmp的脚本
查看>>
BZOJ 1304: [CQOI2009]叶子的染色
查看>>
gdb中信号的处理[转]
查看>>
学习Javascript闭包(Closure)
查看>>
LeetCode【709. 转换成小写字母】
查看>>
toString()和toLocaleString()有什么区别
查看>>
【mybatis】学习笔记之conf.xml与mapper.xml配置
查看>>
Python基础学习Day3 数据类型的转换、int、str、bool、字符串的常用方法、for循环...
查看>>
Controller比较两个对象discs、outlets中的元素是否相等。相同则相应的checkbox为checked...
查看>>
Android中在布局中写ViewPager无法渲染出来的问题
查看>>
简单shellcode编写
查看>>
centos7配置yum源
查看>>
winform textbox提示历史记录
查看>>
SSM整合(spring mybatis)图书
查看>>
Linux学习笔记--终端命令
查看>>
关于电脑桌面图标消失并且右键无法点击的情况
查看>>
JAVA窗口2
查看>>
【Alpha】第八次Scrum meeting
查看>>
学习进度条11
查看>>