Mybatis(2)Mybatis简单查询(参数传递)
Mybatis(2)Mybatis简单查询(参数传递)
文章目录
- Mybatis(2)Mybatis简单查询(参数传递)
- 观前提醒:
- 1. 配置日志(打印日志)(很实用的操作)
- 问题:为什么有的属性为空?
- 2. 参数传递(最简单的查询):
- 2.1 一个参数:
- 2.1.1 根据 id 查询记录
- 1.写死id数字
- 2.占位符,绑定参数:
- 2.1.2 接口测试方式:
- 1. 使用 Test方式:
- 2. 通过接口的方式,使用 URL 的方式:
- 2.1.3 方法参数 和 #{} 括号中的字符 不匹配(只有一个值,没得选):
- 2.1.4 返回值不同:
- 1. List:
- 2. UserInfo对象:
- 2.2 两个参数(username 和 password ):
- 2.2.1 两种情况:
- 1. username 和 password 写死(没人会这样写):
- 2.占位符,绑定参数(掌握这种):
- 2.2.2 解释 password 加 `` 的原因:
- 2.2.3 方法参数 和 #{} 括号中的字符 不匹配:
- 2.2.4 总结:
- 3. 参数绑定(@Param):
- 4. 总结:
观前提醒:
如果你是第一次点击这篇博客,需要你回看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注解。
- 打印 Mybatis日志:
打印日志,我们需要在 yml配置文件中,加入配置代码:
# 配置打印 MyBatis⽇志
mybatis:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
- 参数传递
- 传递单个参数:参数名 和 占位符的名字,不相同也能赋值。(建议是一样的名字,一一对应)
- 传递多个参数:方法参数名 和 占位符的名字,要求必须 一一对应。
- 参数绑定:@Param注解

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









