Mybatis----多表查询
创始人
2024-01-16 16:37:37

目录

返回类型

resultType

resultMap

1、字段映射

 2、多表查询

 动态SQL

if标签

 where标签

 set标签

 choose(when,otherwise) 语句

trim标签

for-each标签

 SQL片段


返回类型

resultType

Mybatis在查询时,一定要指定返回类型;而其他操作,默认返回修改数目

在正常情况下,我们查询使用resultType返回查询结果是可以的

但是,也有其他情况是resultType不能解决的

如果说,类和数据库的参数不匹配,那么查询出来的结果在填充到类对象时,就会找不到对应的字段,(数据库的结果根据数据库列名和类字段名称进行匹配赋值)

数据库的列名是class_id,而类字段是 stu_class,mybatis不能将这两个联系起来,这时就需要使用resultMap

resultMap

1、数据库列名和类字段名称不匹配,可以使用resultMap来配置映射关系

2、resultMap可以用来处理多表联查

1、字段映射


namespace 绑定xml文件实现的接口 包名+类名  <-->



这时,我们来运行单元测试:

 2、多表查询

一个学生属于一个班级,一对一

1、创建Class类,Student类增加Class类的变量

@Data
public class Class {private Integer class_id;private String class_name;
}
@Data
public class Student {private Integer id;private String name;private Integer class_id;private Class stu_class;
}


namespace 绑定xml文件实现的接口 包名+类名  <-->


 一个班级可以有多个学生 一对多

@Data
public class Student {private Integer id;private String name;private Integer class_id;
}
@Data
public class Class {private Integer class_id;private String class_name;private List list;
}


namespace 绑定xml文件实现的接口 包名+类名  <-->

 动态SQL

如果有比较复杂的业务,我们需要写复杂的 SQL 语句,往往需要拼接,而拼接 SQL ,稍微不注意,由于引号,空格等缺失可能都会导致错误。

那么怎么去解决这个问题呢?这就要使用 mybatis 动态SQL,通过 if, choose, when, otherwise, trim, where, set, foreach等标签,可组合成非常灵活的SQL语句,从而在提高 SQL 语句的准确性的同时,也大大提高了开发人员的效率。

if标签

根据name和class_id来查询学生信息



namespace 绑定xml文件实现的接口 包名+类名  <-->

 如果class_id为空,那么就是select * from student where name=#{name} and class_id=null;

 如果name为空,那么就是select * from student where name= and class_id=#{class_id};这是错误的写法,我们这时就要用到if标签



namespace 绑定xml文件实现的接口 包名+类名  <-->

  如果class_id为空,那么就是select * from student where name= #{name}; 

 如果name为空,那么就是select * from student where  and class_id=#{class_id};这是错误的写法,要使用到where标签

 where标签

where标签就是为sql加上where关键字,且会自动的多余的and、or关键字,当所有的条件都不成立的时候,where标签也不会生成

去掉前面的and,不会去掉后面的and



namespace 绑定xml文件实现的接口 包名+类名  <-->

 set标签

set元素会动态前置SET关键字,同时也会自动抹去where查询条件前多余的逗号,避免因为使用条件语句在生成赋值语句的后面留下不需要的逗号



namespace 绑定xml文件实现的接口 包名+类名  <-->update studentid=#{id},name=#{name}

 choose(when,otherwise) 语句

有时候,我们不想用到所有的查询条件,只想选择其中的一个,查询条件有一个满足即可,使用 choose 标签可以解决此类问题,类似于 Java 的 switch 语句



namespace 绑定xml文件实现的接口 包名+类名  <-->

when相当于if,otherwise相当于else

也就是说,这里我们有三个条件,id,name,class_id,只能选择一个作为查询条件

如果 id 不为空,那么查询语句为:select * from student where  id=?

如果 id 为空,那么看name 是否为空,如果不为空,那么语句为 select * from student where  name=?;

如果 name 为空,那么查询语句为 select * from student where class_id=?

trim标签

用于去掉某些内容

  • prefix表示语句块,以prefix值为前缀
  • suffix表示语句块,以suffix值为后缀
  • prefixOverrides表示语句块,要去除的前缀
  • suffixOverrides表示语句块,要去除的后缀

用 trim 改写上面的 if+where 语句

 

 用 trim 改写上面的 set 语句



namespace 绑定xml文件实现的接口 包名+类名  <-->








update studentid=#{id},name=#{name},

for-each标签

 这样写的时候,就要多次 id=#{id},可以使用foreach标签实现循环



namespace 绑定xml文件实现的接口 包名+类名  <-->


delete  from studentid=#{id}

 SQL片段

如果某一SQL的使用频率很高,我们可以把他单独定义,提供代码复用率

1、定义SQL

   select * from studentid=#{id}

2、引用SQL

 

 

上一篇:(不幸的)命运

下一篇:Java 计算相关

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...