MybatisXml操作

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},'%')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值