做门户网站源码,石家庄房产信息网站,南阳网站制作价格,个人网站需要建站群吗一、概述
mapper映射文件是mybatis中最重要的部分#xff0c;涉及到的细节也非常多。
1.1、parameterType
表示输入参数的类型。例如#xff1a;
select idgetUserById parameterTypeinteger resultTypeorg.star.entity.model.UserDO涉及到的细节也非常多。
1.1、parameterType
表示输入参数的类型。例如
select idgetUserById parameterTypeinteger resultTypeorg.star.entity.model.UserDOselect id,username,address from user where id #{id}
/select
二、$ vs #
2.1、概述 mybatis中当我们在xxxMapper.xml中引用变量时默认使用的是 # 如上所示但是除了 # 之外我们也可以使用 $ 来应用变量如下所示 select idgetUserById parameterTypeinteger resultTypeorg.star.entity.model.UserDO select id,username,address from user where id ${id} /select 在旧版本的MyBatis中如果使用$来引用一个变量那么这个变量需要通过Param取别名但是在新版本的MyBatis中无论是 $ 还是 #如果只有一个参数可以不用取别名如下所示 public interface UserMapper { /** * 根据id查询用户 * param id * return */ UserDO getUserById(Integer id); } 2.2、区别
2.2.1、使用 $ 打印的日志 2.2.2、使用 # 打印的日志 通过观察两者打印的日志信息可以很明显的看到 $引用的变量在执行时SQL直接拼接好了没有参数。而 # 引用的变量使用了预编译的方式。在传统的jdbc调用中sql的执行我们可以通过字符串拼接或者占位符的方式来解决参数传递问题。在mybatis中当然也支持在mybatis中$传递的参数相当于jdbc中的字符串拼接而#则相当于jdbc中的占位符。 2.3、如何选择 一般来说由于参数拼接的方式存在sql注入的风险因此日常开发中我们大多使用#的方式进行传值但是在一些特殊的场景下又不得不使用这种方式。有的sql拼接实际上可以通过数据库函数的方式来解决例如模糊查询代码如下 select idgetUserByUsername parameterTypestring resultTypeorg.star.entity.model.UserDO select id,username,address from user where username like concat(%,#{username},%) /select 但是有的sql无法使用#来拼接例如传递一个动态字段进来假设我想查询所有的数据需要排序查询但是排序的字段不确定需要通过参数传入这种场景下就只能使用$来解决了例如有如下方法 ListUserDO listAllUser(String search);