Mybatis查询你需要了解的
最简单的查询在第一篇已经记录了,在这里不赘述
1、一个参数的查询
在Controller中新增 通过ID去查找具体的学生
Mapper层新增:
XML新增:
前端新建详情页:
访问:
2、多个参数的查询
controller新增: 参数为id和姓名
mapper新增:
XML新增:
访问:
注意点:
1、mapper中不使用@Param注解来声明参数时,必须使用使用 #{}方式。如果使用 ${} 的方式,会报错。如果使用了则 #{} 或 ${} 的方式都可以。但是使用@Param时需要注意,在XML中引用的是@Param()括号中的参数名,如果不使用也需要注意XML中应和mapper中参数名保持一致。
2、#{}是预编译处理,$ {}是字符串替换 我们知道,SQL注入是发生在编译的过程中,因为恶意注入了某些特殊字符,最后被编译成了恶意的执行操作。而预编译机制则可以很好的防止SQL注入。
3、不写parameterType 注意此时不可也不必再写参数类型了
3、复杂类型参数查询
controller新增: 需要传入多个ID作为条件查询
mapper新增: 注意此处没有使用@Param注解
XML新增:
访问:
注意点:
1、foreach标签:foreach是对一个集合进行遍历,通常是在构建 IN 条件语句的时候。
2、collection: 标签中的这个属性很容易出错,单独拿出来说一下
4、多参数+复杂类型
想一下,数据一览表上的查询框可能会有多个,而它们的类型还不一样,此时我们就需要使用Map了
controller新增:特别设计了一个数组参数,可以把上一条中的也试一次
mapper新增:
XML新增:
访问:
注意点:
1、<where>标签 如果上面的SQL写成这样
这么写的问题是:当没有sname参数,却有age参数的时候
sql就会变成:select * from student and age > 10 ..... 这样肯定是错的
<where>标签会进行自动判断
如果任何条件都不成立,那么就在sql语句里就不会出现where关键字
如果有任何条件成立,会自动去掉多出来的 and 或者 or。
扩展: 这里的姓名模糊查询,还可以使用<bind>标签,方便后续使用,上一篇中也提到Oracle和Mysql中模糊查询写法是不一样的,这样也可以避免更换数据库带来一些麻烦
- 点赞
- 收藏
- 关注作者
评论(0)