MybatisXml操作
接收传参
Javabean和普通多个参数
。在简单的传递参数的过程中,传递一个参数的时候,mybatis不会做任何处理,一一对应,而传递多个参数的时候mybatis会将参数进行map封装处理:一个值对应两个map项,例如:传递两个参数分别为id和username,在传递到mapper.xml的时候
id==》{key:“args0”,value:id的值}
username==》{key:“args1”,value:username的值}
在传入Javabean和多个普通类型参数的时候,Mybatis会进行封装map处理
javabean:例如传入{age=13,name=“张三”}
使用Javabean属性名直接获取
age=#{age}
name=#{name}
或者,传入的参数名字和mapper接收的名字相同:
<select id="selectRole" resultType="Role"> select * from role where id=#{id} and rolename=#{name} </select>
Role selectRole(int id,String name);
(role的属性)int id String rolename但是这里换成了name 只要一一对于就可以获取。
多个Javabean和集合类型和数组类型
多个普通数值传入的时候,Mybatis会进行List集合处理封装为map: {key:"list":value:username}
例如传入List<String>
List<String> list = new ArrayList<String>(); list.add("zhangsan"); list.add("lisi");
接收参数的时候:
username=#{list[0]}
username=#{list[1]}
多个Javabean传入的时候,Mybatis会进行如下处理:
使用@param注解对Javabean进行分别起别名
@param(“emp”)Emp emp
empid=#{emp.id}
或者
emp.id=#{param1.id}(第一个Javabean)
如果数组传入的时候Mybatis会进行array集合处理封装为map: {key:"array":value:age}
age1=#{array[0]}
age2=#{array[1]}
结果处理
如果返回一行数据,可以用POJO或者map类型来接收,但最好用POJO(有属性规范)
如果返回多行数据,可以用List<pojo>或者List<map>来接收,resoultType指定List里面的泛型类型就可以了
基础类型或者包装类型直接返回别名就可以了
例如:
List<Map<String,Object>> queryall();
<select id="queryall" resultType="Map"> select * from role </select>
List<Map<String,Object>> roleList = mapper.queryall(); System.out.println(roleList);
resoultmap详情前往 https://mp.csdn.net/mp_blog/creation/editor/118443833
提示:以下是本篇文章正文内容,下面案例可供参考
二、动态SQL
1.if
业务场景:在我们生活中很多业务常常遇到动态搜索的情况,比如搜索民宿,根据位置,价格,面积等等情况动态搜索,参数等信息可以根据我们需求改变,这里就涉及到了我们Mybatis常说的动态SQL。
例如前端将用户选择之后的结果封装为一个dto数据类型,但是用户并没有全部选择:
如果在dto类型Javabean中指定某个字段,并没有将返回结果bean的属性全部对应,那么就需要动态的获取dto所提供的属性条件来匹配返回结果bean
这个时候:
test里面写入if条件一般不使用&&进行链接
但是这样写的话and字段的问题没有解决
这时候加上<where>,将<if>语句包裹起来就可以了
where
会自动在所有条件的前面加where关键字,会自动去掉and或者ro
trim 是包含where的
choose when
选择一个条件的时候选择choose和when,otherwise标签
foreach
where标签会在有条件的情况下自动添加where,没有条件的时候不会添加
open:循环前语句,确定有条件的时候只写前括号就可以,有可能没条件就加上where语句再用where标签包裹
close:循环后语句
separator:中间分隔符,会自动去除最后一个结尾的分隔符
item:将数组或者集合拆分后的名字,用于foreach标签内获取
index:下标索引,索引名不重要,需要用到的时候
collection:需要循环的集合的参数名字
set标签
在传入Javabean参数的时候更新数据库的时候,有时候只需要更新这个Javabean的一个属性字段,但是,传入的Javabean只设置了一个字段的话,在更新操作的时候会将其他属性置为空,不利于更新
如果使用if标签来对相应有字段的语句进行分割判断,value中的逗号不会去除,会造成错误
在这个情况下载if标签前添加trim,最后将逗号去除,再将if语句包裹起来就解决了
这时候使用set标签就可以解决
bind标签
在做模糊查询的时候一般用到like
mysql的语句是将空格作为分割
所以使用like ‘%’ #{username} ‘%’ 可以实现模糊查询
可以使用concat:like CONCAT('%',#{keyWord},'%')