MyBatis带参查询的方法详解
#{}占位符
类似于jdbc中通过preparedstatement进行操作的方式, 会将sql语句中需要参数的位置使用?进行占位,后续由传进来的参数进行参数的绑定。?处绑定的都是值,不能指定表的列,转换成sql时表名会被当成字符串,会出错,防止sql注入。
select username,age,password from 'tb_user'
简单类型参数
简单类型指的是: 基本数据类型, 包装类型, string, java.sql.*。当参数是简单类型时, mybatis会忽略sql语句中参数的个数和占位符的名称, 然后将参数进行自动绑定. parametertype属性可以定义参数的类型, 如果定义, 传参时要求参数类型必须和指定的类型一致, 否则抛出classcastexception。
<select id="selbasetype" resulttype="pojo.user" parametertype="java.lang.integer"> select * from tb_users where id=#{id} </select>
user user=sqlsession.selectone("selbasetype",1);
map类型参数
当参数是map集合时, sql语句中的#{}里应该写map集合的key值,mybatis会通过key只找到value然后进行参数绑定。如果key不存在, 不会报错,会使用null进行参数绑定。
<select id="selbymap" resulttype="pojo.user"> select * from tb_users where username=#{username} and password=#{password} </select>
map<string,string> map=new hashmap<>(); map.put("username","zhangsan"); map.put("password","123456"); user user=sqlsession.selectone("selbymap",map);
对象类型参数传递
当参数是对象类型时,sql语句中的#{}里应该写对象的getter方法对应的属性名。当getter方法不存在时, 抛出异常。
<select id="selbyobject" resulttype="pojo.user"> select * from tb_users where username=#{username} and password=#{password} </select>
user user1=new user(); user1.setusername("lisi"); user1.setpassword("123456"); user user=sqlsession.selectone("selbyobject",user1);
${}
类似于jdbc中通过statement进行操作的方式, 会直接将传递的参数和sql语句进行字符串的拼接。 一般当sql语句结构不确定时使用。
当表名不确定,条件不确定,排序规则不确定的时候,不能使用#{},应该换做${}。对于简单数据类型,应尽量使用#{},避免错误。
${}需要加''传入的参数才能变成字符串,不然会被当成列名。
select * from tb_users where username='${username}' and password='${password}'
如果${123}会当成整型数字替换占位,此时传入的参数无效。
到此这篇关于mybatis带参查询的文章就介绍到这了,更多相关mybatis带参查询内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: Premiere怎么做动态水印? pr移动水印的制作方法
下一篇: 详解Nginx 工作原理
推荐阅读
-
mybatis如何通过接口查找对应的mapper.xml及方法执行详解
-
java执行SQL语句实现查询的通用方法详解
-
mybatis防止SQL注入的方法实例详解
-
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
-
面向对象的知识掌握之带参方法及方法重载
-
mybatis防止SQL注入的方法实例详解
-
详解Spring Boot中MyBatis的使用方法
-
面向对象的知识掌握之带参方法及方法重载
-
适合新手朋友们的几种京东快递查询方法图文详解
-
序列化表单为json对象,datagrid带额外参提交一次查询 后台用Spring data JPA 实现带条件的分页查询 多表关联查询