mybatis plus 多表查询_MyBatis的多表查询

37b734ba2309ca4ba123ba4145a09d5e.png
teacher表

66634a544c46f5ce7f6527ad1f738c63.png
student表

多对一

结果嵌套

1:创建mybatis配置文件(mybatis-config.xml)

<?xml version="1.0" encoding="UTF-8" ?>
  • 这里使用了properties文件,可以不使用
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc
username=root
password=1234

2:创建工具类(MybatisUtils.java)用于获取SqlSession对象

public 
  • String resource ="mybatis-config.xml" 为“包名+文件名”,此处mybatis配置文件直接放在src下,省略包名

3:创建实体类对象

public 
  • 从Student入手的多对一查询,需要在Student中添加一个Teacher类属性用于存放teacher表
public 

4:创建mapper映射文件用于书写SQL语句

<?xml version="1.0" encoding="UTF-8" ?>
  • 从Student入手的多对一查询,需要在Student实体类中添加一个Teacher类属性,同时在mapper映射文件中使用resultMap标签,在其内使用association标签。association表示关联对象,其内的property属性表示数据库中的表,JavaType表示对应的实体类
  • 数据库中的两个表的列名是相同的,为避免混乱,在查询时最好使用别名,如下(不使用也可,如上)
<?xml version="1.0" encoding="UTF-8" ?>

5:创建Dao(StudentDao.java)

public 

测试类

public 

测试结果

1  张一  1  1  张三
2  李二  1  1  张三
3  王三  1  1  张三

查询嵌套

1:mapper映射文件中association标签的另一种使用方法

<?xml version="1.0" encoding="UTF-8" ?>
  • association标签中property属性表示数据库中的表,column属性表示外键,JavaType属性表示实体类,select属性表示对应表的查询语句
  • select属性表示对应表的查询语句,用“包名+文件名表示”,一般对于另一表的查询会写在另一个mapper映射文件之内。也可以写在同一文件内,若写在同一文件内,则包名可省略
  • 结果嵌套对数据库查询一次,查询嵌套对数据库查询两次,所以结果嵌套的效率会更高,但查询嵌套看起来会更清爽点
<?xml version="1.0" encoding="UTF-8" ?>

测试类

public 

测试结果

1  张一  0  1  张三
2  李二  0  1  张三
3  王三  0  1  张三
  • 此处Student的tid无法查询,原因未知

一对多

结果嵌套

1:创建mybatis配置文件(mybatis-config.xml)

2:创建工具类(MybatisUtils.java)用于获取SqlSession对象

3:创建实体类对象

package 
  • 因为是从Teacher入手的一对多查询,所以Teacher实体类中需要有list集合的Student属性
package 

4:创建mapper映射文件(teacher-mapper.xml)用于书写SQL语句

<?xml version="1.0" encoding="UTF-8" ?>
  • select s.id sid,s.name sname,s.tid stid,t.id tid,t.name tname from student s,teacher t where s.tid=t.id and t.id=1
  • 由于Teacher实体类中使用的是关于Student的集合,所以在映射文件中的resultMap中需要使用collection标签而不是association标签
  • collection标签中,property属性表示数据库中的表,ofType属性表示实体类
  • 若数据库中两个表的列名是相同的,则在查询时,SQL语句最好要使用别名,便于在resultMap标签中标明清楚(如上),否则容易出现问题(原因未明)

5:Dao(TeacherDao.java)

public 

测试类

public 

测试结果

1  张三
1  张一  1
2  李二  1
3  王三  1

查询嵌套

1:mapper映射文件(teacher-mapper.xml)

<?xml version="1.0" encoding="UTF-8" ?>

2:Dao

public 

测试类

public 

测试结果

0  张三
1  张一  1
2  李二  1
3  王三  1
  • 由于在mapper映射文件的resultMap标签的collection标签中使用了column="id",导致测试结果中Teacher的id无法获取(原因未知)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值