博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis部分
阅读量:4623 次
发布时间:2019-06-09

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

 

*** resultType 和 resultMap 的区别

  MyBatis 中在查询进行 select 映射的时候,返回类型可以用resultType,也可以用 resultMap;

  resultType 是直接表示返回类型的(PO 类),而resultMap 则是对外部 ResultMap 的引用(在 po.xml 中配置的映射 key-->value 关系),但是 resultType 跟 resultMap 不能同时存在。

  在 MyBatis 进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map 里面的,其中键是属性名,值则是其对应的值。

  当提供的返回类型属性是 resultType 时,MyBatis 会将 Map 里面的键值对取出赋给 resultType 所指定的对象对应的属性。所以其实 MyBatis 的每一个查询映射的返回类型都是 ResultMap,只是当提供的返回类型属性是 resultType 的时候,MyBatis 对自动的给把对应的值赋给 resultType 所指定对象的属性。当提供的返回类型是 resultMap 时,因为 Map 不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象。

  由于 returnType 中返回的 PO 中的属性默认作为 key 值,所以必须保证 PO 中的属性和数据库表中的字段一致,要不就要配置映射关系。

 

***Mybatis 中“#”与“$”区别

  #相当于对数据加上双引号,$相当于直接显示数据。

  1、#将传入的参数值都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #age#,传入的值是 27,那么解析成 sql 时的值为 order by "27", 如果传入的值是regdate,则解析成的 sql 为 order by "regdate",它写入的是你传进去的值。

  2、$将传入的属性直接显示生成在 sql 中。如:order by $age$,如果传入的值是 27,那么解析成 sql 时的值为 order by age,如果传入的值是 name,则解析成的 sql 为 order by regdate,它显示的是你传入的属性片段,而不是属性值。这是一个很危险的做法,如果在验证中加一个" or 1=1" 那就可能恒成立了。

  3、#是可以防止语句注入的,但$却不能防止语句注入,比较危险;如果可以用#号的地方就尽量不要用$。

 

转载于:https://www.cnblogs.com/swifthua/p/7699089.html

你可能感兴趣的文章
Guava官方文档-RateLimiter类
查看>>
css2----清除浮动
查看>>
为HTML添加图片登录按钮
查看>>
Vuejs模板绑定
查看>>
Archlinux/Manjaro使用笔记-报错:一个或多个 PGP 签名无法校验!的解决方法
查看>>
P3161 [CQOI2012]模拟工厂
查看>>
keepalived+haproxy实现高可用
查看>>
centos6 python安装sqlite解决No module named
查看>>
layui数据表格自定义每页条数limit
查看>>
sendmail报错Relaying denied
查看>>
阿里中间件技术及双十一实践--中间件总体介绍
查看>>
DNS简介
查看>>
charactercontroller里simplemove函数与move函数的介绍
查看>>
update join
查看>>
复杂链表的复制
查看>>
利用docker-machine安装swarm
查看>>
javascript字符类型操作函数
查看>>
thinkphp批量删除的实现
查看>>
请求SpringBoot 服务接口时的中文乱码问题
查看>>
忆少年(七绝)
查看>>