MyBatis带参查询的方法详解

 更新时间:2020年11月20日 15:07:13   作者:基础不牢,地动山摇  
这篇文章主要介绍了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带参查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot个性化启动Banner设置方法解析

    SpringBoot个性化启动Banner设置方法解析

    这篇文章主要介绍了SpringBoot个性化启动Banner设置方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • spring cloud如何修复zuul跨域配置异常的问题

    spring cloud如何修复zuul跨域配置异常的问题

    最近的开发过程中,使用spring集成了spring-cloud-zuul,在配置zuul跨域的时候遇到了问题,下面这篇文章主要给大家介绍了关于spring cloud如何修复zuul跨域配置异常的问题,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • IntelliJ IDEA中Scala、sbt、maven配置教程

    IntelliJ IDEA中Scala、sbt、maven配置教程

    这篇文章主要介绍了IntelliJ IDEA中Scala、sbt、maven配置教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 关于解决iReport4.1.1无法正常启动或者闪退或者JDK8不兼容的问题

    关于解决iReport4.1.1无法正常启动或者闪退或者JDK8不兼容的问题

    在安装使用iReport的过程中遇到一个问题,我的iReport始终不能打开,困扰了我好久。接下来通过本文给大家介绍iReport4.1.1无法正常启动或者闪退或者JDK8不兼容的问题,需要的朋友可以参考下
    2018-09-09
  • 为何Java单例模式我只推荐两种

    为何Java单例模式我只推荐两种

    这篇文章主要给大家介绍了关于Java单例模式推荐的两种模式,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • Java进阶教程之运行时类型识别RTTI机制

    Java进阶教程之运行时类型识别RTTI机制

    这篇文章主要介绍了Java进阶教程之运行时类型识别RTTI机制,在Java运行时,RTTI维护类的相关信息,比如多态(polymorphism)就是基于RTTI实现的,需要的朋友可以参考下
    2014-09-09
  • 利用Maven入手Spring Boot第一个程序详解

    利用Maven入手Spring Boot第一个程序详解

    这篇文章主要给大家介绍了关于如何利用Maven入手Spring Boot第一个程序的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-02-02
  • java中Statement 与 PreparedStatement接口之间的关系和区别

    java中Statement 与 PreparedStatement接口之间的关系和区别

    这篇文章主要介绍了java中Statement 与 PreparedStatement接口之间的关系和区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 如何用struts调用支付宝接口

    如何用struts调用支付宝接口

    以下为大家介绍如何用struts调用支付宝接口的例子。
    2013-04-04
  • Java正则表达式实现在文本中匹配查找换行符的方法【经典实例】

    Java正则表达式实现在文本中匹配查找换行符的方法【经典实例】

    这篇文章主要介绍了Java正则表达式实现在文本中匹配查找换行符的方法,结合具体实例分析了java正则匹配查找换行符的实现技巧与匹配模式相关操作注意事项,需要的朋友可以参考下
    2017-04-04

最新评论