springboot整合mybatisplus实现关联表查询(四)

您所在的位置:网站首页 springbootmybatisplus多对多 springboot整合mybatisplus实现关联表查询(四)

springboot整合mybatisplus实现关联表查询(四)

2023-11-28 01:03| 来源: 网络整理| 查看: 265

写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!

通过前面三篇学习,了解了MP基本的CURD操作和分页查询,但是到目前为止我们仅限于单表操作,而实际中通常都是多表关联查询使用的比较多,这一篇就记录一下多表的关联查询。关联查询和单表查询其实差不多,在处理一对一,一对多等的方式上也跟Mybatis一样,不太清楚的可以看下之前整理的博客springboot整合mybatis使用collection查询 一对多 多对一 多对多查询

新建Wife类与User类关联:

@Data public class Wife { private int wifeId; private int userId; private String wifeName; }

新建UserWifeDto表示关联查询返回的数据:

@Data public class UserWifeDto { private Integer userId; private String userName; private Integer age; private String wifeName; }

UserMapper中新建查询方法:

@Select("select u.*,w.wife_name from t_user u left join t_wife w on u.user_id = w.user_id where u.user_id = #{userId}") UserWifeDto selectUserWife(UserQueryModel userQueryModel);

新建测试类RelationSelectTest,添加测试方法:

@Test public void test(){ UserQueryModel userQueryModel = new UserQueryModel(); userQueryModel.setUserId(1); UserWifeDto userDto = userMapper.selectUserWife(userQueryModel); System.out.println(userDto); }

执行结果:

如上测试:UserMapper中将查询sql直接写在了方法上,其实像是这种简单的关联查询直接使用@Select注解的方式还是更简单的,当然也可以在xml中写查询语句,如下也是一样的:

UserMapper中新建查询方法:

@Test public void test1(){ UserQueryModel userQueryModel = new UserQueryModel(); userQueryModel.setUserId(1); UserWifeDto userDto = userMapper.selectUserWifeXml(userQueryModel); System.out.println(userDto); }

UserMapper.xml中:

select u.*,w.wife_name from t_user u left join t_wife w on u.user_id = w.user_id where u.user_id = #{userId}

上面虽然实现了关联查询,但是只是查询了Wife中的一个属性wifeName,如果有很多字段的时候,这样还是不太方便的,接下来将使用做关联查询,对于和标签的使用不熟悉的小伙伴可以去Mybatis的官网查看文档,或者看之前整理的博客springboot整合mybatis使用association做关联查询 一对一查询 

修改下UserWifeDto,将wifeName改为Wife对象:

@Data public class UserWifeDto { private Integer userId; private String userName; private Integer age; // private String wifeName; private Wife wife; }

UserMapper中新增selectUserWifeXmlByAss方法:

UserWifeDto selectUserWifeXmlByAss(UserQueryModel userQueryModel);

UserMapper.xml中:

select u.*,w.* from t_user u left join t_wife w on u.user_id = w.user_id where u.user_id = #{userId}

测试类RelationSelectTest中新增测试方法:

@Test public void test2(){ UserQueryModel userQueryModel = new UserQueryModel(); userQueryModel.setUserId(1); UserWifeDto userDto = userMapper.selectUserWifeXmlByAss(userQueryModel); System.out.println(userDto); }

执行结果:

上面的查询使用了association做的关联查询,而且页面没有分页,并且查询条件只是来自单表的,接下来测试将加上分页,并且查询条件也来自多张表,顺便用下标签回顾一下它的使用,这样更接近于实际场景。

新增Order类:

@Data @TableName(value = "t_orders") public class Order { private int orderId; private int userId; private String number; }

UserMapper中新增测试方法selectOrdersPage: 

Page selectOrdersPage(Page page, UserQueryModel userQueryModel);

UserMapper.xml中:

select u.*,od.* from t_user u left join t_orders od on u.user_id = od.user_id u.user_id = #{userQueryModel.userId} and od.number #{userQueryModel.number}

数据库中添加测试数据:

测试类中添加测试方法:

@Test public void testPage1(){ Page page = new Page(1,3); UserQueryModel queryModel = new UserQueryModel(); queryModel.setUserId(1); queryModel.setNumber("100000"); Page userOrdersDtoPage = userMapper.selectOrdersPage(page,queryModel); System.out.println(userOrdersDtoPage.getRecords() + "---" + userOrdersDtoPage.getTotal()); }

执行结果:

补充:查询参数为对象,对象中包含集合属性使用遍历

UserQueryModel查询对象中加入List类型查询参数ageList:

@Data public class UserQueryModel { private Integer userId; private String userName; private Integer age; private String number; private List ageList; }

UserMapper中添加方法:

Page selectUsersByAges(Page page, UserQueryModel userQueryModel);

数据库中修改下测试数据:

CurdTest中增加测试方法:

@Test public void selectUsersByAges(){ Page page = new Page(1,3); List ageList = new ArrayList(); ageList.add(10); ageList.add(15); UserQueryModel queryModel = new UserQueryModel(); queryModel.setAgeList(ageList); Page userPage = userMapper.selectUsersByAges(page, queryModel); System.out.println(userPage.getPages() + "---" + userPage.getTotal() + "---" + userPage.getRecords()); }

执行结果如下:



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3