mybatis中#{}和${}的区别详解
2017-05-11 11:11
183 查看
一:在mybatis中最主要的一个特性就是动态sql:
1、 程序员通过直接编写SQL语句,可以直接对SQL进行性能的优化;
2、 学习门槛低,学习成本低。只要有SQL基础,就可以学习mybatis,而且很容易上手;
3、 由于直接编写SQL语句,所以灵活多变,代码维护性更好。
4、 不能支持数据库无关性,即数据库发生变更,要写多套代码进行支持,移植性不好。
5、 需要编写结果映射。
6、 需求多变的互联网项目,例如电商项目。
二:在mybatis中#{}表示一个占位符:
1、#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号
2、#在很大程度上可以防止sql注入
3、例如#{id}:#{}中的id表示输入的参数名称,如果输入参数是简单类型,那么#{}中的参数可以任意。
4、能用#{}就别用${}
在mybatis中${}表示一个拼接符:
1、${}将传入的数据直接显示生成在sql中。
2、如果使用${},而你传入的是字符串,比如中文、英文。就必须这样:'${}',不然会报(Unknown column 'TT' in 'where clause')的错误,当然传入数字没问题。
3、${value}: ${}中value表示输入的参数名称,如果输入的参数是简单类型,那么${}中的值只能是value
4、${}存在sql注入的风险,慎用!但是在特殊场景下必须使用${},比如order by 语句后面要跟动态列,就得使用${colname}.
1、 程序员通过直接编写SQL语句,可以直接对SQL进行性能的优化;
2、 学习门槛低,学习成本低。只要有SQL基础,就可以学习mybatis,而且很容易上手;
3、 由于直接编写SQL语句,所以灵活多变,代码维护性更好。
4、 不能支持数据库无关性,即数据库发生变更,要写多套代码进行支持,移植性不好。
5、 需要编写结果映射。
6、 需求多变的互联网项目,例如电商项目。
二:在mybatis中#{}表示一个占位符:
1、#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号
2、#在很大程度上可以防止sql注入
3、例如#{id}:#{}中的id表示输入的参数名称,如果输入参数是简单类型,那么#{}中的参数可以任意。
4、能用#{}就别用${}
在mybatis中${}表示一个拼接符:
1、${}将传入的数据直接显示生成在sql中。
2、如果使用${},而你传入的是字符串,比如中文、英文。就必须这样:'${}',不然会报(Unknown column 'TT' in 'where clause')的错误,当然传入数字没问题。
3、${value}: ${}中value表示输入的参数名称,如果输入的参数是简单类型,那么${}中的值只能是value
4、${}存在sql注入的风险,慎用!但是在特殊场景下必须使用${},比如order by 语句后面要跟动态列,就得使用${colname}.
相关文章推荐
- MyBatis中#{}和${}的区别详解
- MyBatis中#{}和${}的区别详解
- Mybatis的动态sql详解,区别于传统的sql拼写
- MyBatis中#{}和${}的区别详解
- MyBatis中#{}和${}的区别详解
- MyBatis中#{}和${}的区别详解
- spring aop面向切面详解,以及heibernate和mybatis的区别(缓存)
- SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)的区别(详解)
- Bind和Eval的区别详解(转)
- div+css中id和class的区别运用详解
- [转]Bind和Eval的区别详解
- Web服务器和应用程序服务器区别详解
- .net/c#中栈和堆的区别及代码在栈和堆中的执行流程详解之一
- 交换机中的堆叠与级连区别详解
- 无线路由、AP、网桥之区别详解篇
- [转]Bind和Eval的区别详解
- Bind和Eval的区别详解(ZT)
- df 和du 的区别 linux磁盘命令详解
- 17个之多!Windows Vista各版本功能区别详解
- HTTP_HOST 和 SERVER_NAME 的区别详解