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带参查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java中的CountDownLatch、CyclicBarrier和semaphore实现原理解读
这篇文章主要介绍了Java中的CountDownLatch、CyclicBarrier和semaphore实现原理详解,CountDownLatch中调用await方法线程需要等待所有调用countDown方法的线程执行,这就很适合一个业务需要一些准备条件,等准备条件准备好之后再继续执行,需要的朋友可以参考下2023-12-12Spring Boot中的SpringSecurity基础教程
Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它实际上是保护基于spring的应用程序的标准Spring Security是一个框架,侧重于为Java应用程序提供身份验证和授权,这篇文章主要介绍了Spring Boot中的SpringSecurity学习,需要的朋友可以参考下2023-01-01rabbitmq使用springboot实现direct模式(最新推荐)
这篇文章主要介绍了rabbitmq使用springboot实现direct模式,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-07-07利用consul在spring boot中实现分布式锁场景分析
这篇文章通过场景分析给大家介绍如何利用consul在spring boot中实现简单的分布式锁功能,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2021-09-09Centos 7 安装 OpenJDK 11 两种方式及问题小结
这篇文章主要介绍了Centos 7 安装 OpenJDK 11 两种方式,第一种方式使用yum安装,第二种方式使用tar解压安装,每种方法给大家介绍的非常详细,需要的朋友可以参考下2021-09-09
最新评论