Mybatis(2)Mybatis简单查询(参数传递)

观前提醒:

如果你是第一次点击这篇博客,需要你回看Mybatis系列的这个博客:
Mybatis(1)Mybatis 入门

这篇博客的代码,都是需要自己敲一下的。
建议你看着我说的知识点,自己尝试一下,创建 Springboot项目,使用 Mybatis框架,访问数据库。

这里使用的数据库是 MySQL。
图形化工具:Navicat

sql文件获取:https://gitee.com/mrbgvhbhjv/java-ee-course
在这里插入图片描述

1. 配置日志(打印日志)(很实用的操作)

打印日志,我们需要在 yml配置文件中,加入配置代码:

# 配置打印 MyBatis⽇志
mybatis:
  configuration: 
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

添加 日志配置 之后,运行上一篇博客的测试代码,测试结果:
在这里插入图片描述

在这里插入图片描述
preparing:给数据库输入的 sql语句
parameters:数据库返回的数据(包括 列的名称,每一行的数据,总的记录数)

可以说:配置上 mybatis的日志 之后,测试的案例,结果显示,就会更加清晰。

问题:为什么有的属性为空?

我们可以看到,我们配置日志之后,日志显示的查询结果,每一行数据的列,都是有值的。
但是,我们使用对象接收的数据,部分是为 NULL 的。
为什么?

答:类中的属性,没有和指定的表,指定的字段对应上(映射)。
后续,我们会介绍几种方式,来解决这个问题。

2. 参数传递(最简单的查询):

查询,我们使用的 @Select注解。

这个注解,是 Mybatis框架 提供的注解。

2.1 一个参数:

2.1.1 根据 id 查询记录

1.写死id数字

写死id数字,select * from user_info where id = 2
在这里插入图片描述

2.占位符,绑定参数:

使用 “#{}”,{} 里面,存放方法的参数。
在这里插入图片描述

在这里插入图片描述

返回值为 UserInfo时:

在这里插入图片描述

2.1.2 接口测试方式:

1. 使用 Test方式:

在这里插入图片描述
在这里插入图片描述

2. 通过接口的方式,使用 URL 的方式:

在这里插入图片描述

代码:
在这里插入图片描述

2.1.3 方法参数 和 #{} 括号中的字符 不匹配(只有一个值,没得选):

试一试,把 #{} 括号中的字符,改成 id1,再次运行结果:
在这里插入图片描述

把 #{} 括号中的字符,改成 aaa,再次运行结果:

在这里插入图片描述

结论:方法的参数只有一个,没得选,就拿这个参数的值,作为 #{} 括号中的字符。

2.1.4 返回值不同:

1. List:

select * from user_info 测试这条语句,返回一个 List:
在这里插入图片描述

2. UserInfo对象:

select * from user_info 测试这条语句,使用 UserInfo对象 作为返回值。

代码:
在这里插入图片描述

运行结果:会报错
在这里插入图片描述

结论:

使用对象接收查询结果,要么只有一条数据,要么是 null(没有数据)。
使用 List 接收查询结果,任意数据都可以。

建议分析返回结果,使用对应的类型接收:
返回结果为 1 条记录:使用 对象或者List 都可以。
返回结果记录数 > 1:使用 List

如果你嫌麻烦,建议:一股脑的使用 List 接收。

2.2 两个参数(username 和 password ):

2.2.1 两种情况:

1. username 和 password 写死(没人会这样写):

在这里插入图片描述

2.占位符,绑定参数(掌握这种):

根据 username 和 password 查询:
在这里插入图片描述
测试代码:
在这里插入图片描述
stream的打印方式(适合查询结果有多条记录的时候使用),建议学习一下。

正常打印:
在这里插入图片描述

改变方法中,两个参数的顺序:
在这里插入图片描述

结论:方法参数,不会影响 select语句 中,参数的值。
前提是,你不要知道这个地方,该填密码,你却填写 username。
这就不是程序的问题了,是人为的了。

2.2.2 解释 password 加 `` 的原因:

在 Mysql 中,password 属于是一个关键字,和 insert 、select、delete 这种一样,属于关键字。
使用关键字作为 字段名,进行 sql语句 编写的时候,建议加上 ``。

就比如 :

select * from user_info where username=#{username} and `password`=#{password}

关键字加上 ``,能避免出错。

2.2.3 方法参数 和 #{} 括号中的字符 不匹配:

在这里插入图片描述

结果:
在这里插入图片描述

之前方法只有一个参数的时候,是可以的,因为没得选,只能用这个参数,填充到 sql语句中。

但是,有两个参数,Springboot 就会分不清楚用哪一个变量了。

根据错误信息,使用参数:
在这里插入图片描述
这种方式,别用!!!
原因:可读性差,容易出错。

提出来,只是证明:mybatis 会给我们生成默认的参数名称。

2.2.4 总结:

使用两个参数查询的时候,方法参数#{} 括号中的字符 建议匹配上,一一对应

在这里插入图片描述

3. 参数绑定(@Param):

使用@Param,我们可以进行参数的绑定。
在这里插入图片描述

知道怎么用就行。

4. 总结:

查询数据,使用的是 @Select注解。

  1. 打印 Mybatis日志:

打印日志,我们需要在 yml配置文件中,加入配置代码:

# 配置打印 MyBatis⽇志

mybatis:
  configuration: 
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  1. 参数传递
  • 传递单个参数:参数名 和 占位符的名字,不相同也能赋值。(建议是一样的名字,一一对应)
  • 传递多个参数:方法参数名 和 占位符的名字,要求必须 一一对应。
  • 参数绑定:@Param注解

在这里插入图片描述

最后,如果这篇博客能帮到你的,请你点点赞,有写错了,写的不好的,欢迎评论指出,谢谢!
下一篇博客:Mybatis(3)Mybatis基础操作:增加 & 解决映射问题

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐