mybatisplus多表查询分页

一、不用vo的mybatisplus多表查询分页

mybatisplus是一个基于mybatis的增强工具,它提供了很多方便的查询操作。在进行多表查询分页时,我们可以通过使用mybatisplus提供的Wrapper,来进行多表条件查询。

首先,我们需要引入mybatisplus和分页插件的依赖:

“`

com.baomidou
mybatis-plus-boot-starter
最新版本

com.baomidou
mybatis-plus-extension
最新版本

com.baomidou
mybatis-plus
最新版本

com.github.pagehelper
pagehelper
最新版本

“`

然后,定义实体类,并在实体类中使用@TableField注解来指定映射关系:

“`
@Data
public class User implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String username;
private String password;

@TableField(exist = false)
private List roles;
@TableField(exist = false)
private Integer pageNum;
@TableField(exist = false)
private Integer pageSize;


}
“`

接着,在mapper接口中定义查询方法,使用@Select注解,并将查询条件通过Wrapper进行设置:

“`
@Select(“select u.*, r.role_name\n” +
“from user u\n” +
“left join user_role ur on u.id = ur.user_id\n” +
“left join role r on ur.role_id = r.id\n” +
“${ew.customSqlSegment}”)
List getUserPageList(@Param(Constants.WRAPPER) Wrapper wrapper);
“`

最后,在Service中调用mapper方法,将条件设置到Wrapper中,并使用PageHelper进行分页操作:

“`
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;

@Override
public List getUserPageList(Integer pageNum, Integer pageSize, String username, String roleName) {
Page page = PageHelper.startPage(pageNum, pageSize);
LambdaQueryWrapper wrapper = new LambdaQueryWrapper();
wrapper.eq(User::getUsername, username)
.nested(i -> i.eq(Role::getRoleName, roleName));
List userList = userMapper.getUserPageList(wrapper);
userList.forEach(user -> user.setRoles(userMapper.getUserRoles(user.getId())));
return userList;
}
}
“`

二、mybatisplus多表查询

在进行多表查询时,我们可以使用mybatisplus提供的Wrapper来设置多个表的条件查询。在Wrapper中,我们可以使用innerJoin、leftJoin和rightJoin方法来进行联表查询操作。

首先,我们需要定义实体类,并在实体类中使用@TableField注解来指定映射关系:

“`
@Data
public class User implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String username;
private String password;

@TableField(exist = false)
private List roles;

}

@Data
public class Role implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String roleName;


}
“`

接着,在mapper接口中定义查询方法,使用@Select注解,并将查询条件通过Wrapper进行设置:

“`
@Select(“select u.*, r.role_name\n” +
“from user u\n” +
“left join user_role ur on u.id = ur.user_id\n” +
“left join role r on ur.role_id = r.id\n” +
“${ew.customSqlSegment}”)
List getUserList(@Param(Constants.WRAPPER) Wrapper wrapper);
“`

最后,在Service中调用mapper方法,将条件设置到Wrapper中,即可获取到对应的查询结果:

“`
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;

@Override
public List getUserList(String roleName) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper();
wrapper.nested(i -> i.eq(Role::getRoleName, roleName));
List userList = userMapper.getUserList(wrapper);
userList.forEach(user -> user.setRoles(userMapper.getUserRoles(user.getId())));
return userList;
}
}
“`

三、mybatisplus自定义sql查询

在有些情况下,我们需要自定义一些复杂的SQL语句来进行查询。这时,我们可以使用mybatisplus提供的SqlInjector来进行自定义SQL查询。

首先,我们需要实现一个继承了AbstractMethod的类,并在其中定义自己的SQL方法:

“`
@Component
public class UserSqlInjector extends AbstractMethod {
@Override
public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo, SqlMethod sqlMethod) {
String sql = “select * from user where username = #{username}”;
SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
return addSelectMappedStatementForTable(mapperClass, sqlMethod.getMethod(), sqlSource, tableInfo);
}
}
“`

然后,在mapper接口中定义查询方法,并使用@SqlParser注解来告诉mybatisplus,该方法不需要进行自动分页处理:

“`
@SqlParser(filter = true)
List selectUserByUsername(@Param(“username”) String username);
“`

最后,在Service中调用mapper方法即可:

“`
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;

@Override
public List selectUserByUsername(String username) {
return userMapper.selectUserByUsername(username);
}
}
“`

四、mybatisplus多表分页

在进行多表分页查询时,我们可以使用mybatisplus提供的Page对象和Wrapper条件来进行分页操作。

首先,我们需要定义实体类,并在实体类中使用@TableField注解来指定映射关系:

“`
@Data
public class User implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String username;
private String password;

@TableField(exist = false)
private List roles;

}

@Data
public class Role implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String roleName;

@TableField(exist = false)
private List users;

}
“`

接着,在mapper接口中定义查询方法,使用@Select注解,并将查询条件通过Wrapper进行设置:

“`
@Select(“select u.*, r.role_name\n” +
“from user u\n” +
“left join user_role ur on u.id = ur.user_id\n” +
“left join role r on ur.role_id = r.id\n” +
“${ew.customSqlSegment}”)
List getUserPageList(@Param(Constants.WRAPPER) Wrapper wrapper);
“`

最后,在Service中调用mapper方法,将条件设置到Wrapper中,并使用PageHelper进行分页操作:

“`
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;

@Override
public List getUserPageList(Integer pageNum, Integer pageSize, String roleName) {
Page page = PageHelper.startPage(pageNum, pageSize);
LambdaQueryWrapper wrapper = new LambdaQueryWrapper();
wrapper.nested(i -> i.eq(Role::getRoleName, roleName));
List userList = userMapper.getUserPageList(wrapper);
userList.forEach(user -> user.setRoles(userMapper.getUserRoles(user.getId())));
return userList;
}
}
“`

五、mybatisplus多表连接查询

在进行多表连接查询时,我们可以使用mybatisplus提供的Wrapper来进行设置多个表的条件查询。在Wrapper中,我们可以使用innerJoin、leftJoin和rightJoin方法来进行联表查询操作。

首先,我们需要定义实体类,并在实体类中使用@TableField注解来指定映射关系:

“`
@Data
public class User implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String username;
private String password;

@TableField(exist = false)
private List roles;

}

@Data
public class Role implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String roleName;

@TableField(exist = false)
private List users;

}
“`

接着,在mapper接口中定义查询方法,使用@Select注解,并将查询条件通过Wrapper进行设置:

“`
@Select(“select u.*, r.role_name\n” +
“from user u\n” +
“left join user_role ur on u.id = ur.user_id\n” +
“left join role r on ur.role_id = r.id\n” +
“${ew.customSqlSegment}”)
List getUserList(@Param(Constants.WRAPPER) Wrapper wrapper);
“`

最后,在Service中调用mapper方法,将条件设置到Wrapper中,即可获取到对应的查询结果:

“`
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;

@Override
public List getUserList(String roleName) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper();
wrapper.nested(i -> i.eq(Role::getRoleName, roleName));
List userList = userMapper.getUserList(wrapper);
userList.forEach(user -> user.setRoles(userMapper.getUserRoles(user.getId())));
return userList;
}
}
“`

六、mybatisplus联表查询

在进行联表查询时,我们可以使用mybatisplus提供的Wrapper来进行设置多个表的条件查询。在Wrapper中,我们可以使用innerJoin、leftJoin和rightJoin方法来进行联表查询操作。

首先,我们需要定义实体类,并在实体类中使用@TableField注解来指定映射关系:

“`
@Data
public class User implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String username;
private String password;

@TableField(exist = false)
private List roles;

}

@Data
public class Role implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String roleName;

@TableField(exist = false)
private List users;

}
“`

接着,在mapper接口中定义查询方法,使用@Select注解,并将查询条件通过Wrapper进行设置:

“`
@Select(“select * from user u left join user_role ur on u.id = ur.user_id left join role r on ur.role_id = r.id ${ew.customSqlSegment}”)
List getUserList(@Param(Constants.WRAPPER) Wrapper wrapper);
“`

最后,在Service中调用mapper方法,将条件设置到Wrapper中,即可获取到对应的查询结果:

“`
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;

@Override
public List getUserList(String roleName) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper();
wrapper.nested(i -> i.eq(Role::getRoleName, roleName));
List userList = userMapper.getUserList(wrapper);
userList.forEach(user -> user.setRoles(userMapper.getUserRoles(user.getId())));
return userList;
}
}
“`

七、mybatisplus多表id查询

在有些情况下,我们需要根据多个id进行查询操作。这时,我们可以使用mybatisplus提供的Wrapper来进行条件查询。

首先,我们需要定义实体类,并在实体类中使用@TableField注解来指定映射关系:

“`
@Data
public class User implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String username;
private String password;

@TableField(exist = false)
private List roles;

}

@Data
public class Role implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String roleName;

@TableField(exist = false)
private List users;

}
“`

接着,在mapper接口中定义查询方法,使用@Select注解,并将查询条件通过Wrapper进行设置:

“`
@Select(“select * from user where id in (${ids})”)
List getUserListByIds(@Param(“ids”) String ids);
“`

最后,在Service中调用mapper方法

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/185242.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-26 12:16
下一篇 2024-11-26 12:17

相关推荐

  • jQuery Datatable分页中文

    jQuery Datatable是一个非常流行的数据表插件,它可以帮助您快速地在页面上创建搜索、过滤、排序和分页的数据表格。不过,它的默认设置是英文的,今天我们就来探讨如何将jQu…

    编程 2025-04-29
  • uniapp分页第二次请求用法介绍

    本文将从多个方面对uniapp分页第二次请求进行详细阐述,并给出对应的代码示例。 一、请求参数的构造 在进行分页请求时,需要传递的参数体包含当前页码以及每页显示的数据量。对于第二次…

    编程 2025-04-27
  • Mybatisplus面试题详解

    Mybatisplus是在Mybatis的基础上进行的封装,它为我们简化了开发操作,提供了自动生成常用SQL,自动分页,及其他一些常用操作的功能,大大提高了开发的效率。在本篇文章中…

    编程 2025-04-25
  • Mybatisplus官网详解

    一、简介 Mybatisplus是一个基于mybatis的增强工具,可快速、安全的开发mybatis相关项目。它提供了许多实用的功能,如分页、条件构造器、性能分析、代码生成等。 M…

    编程 2025-04-24
  • Mybatis Plus分页失效问题及解决方案

    一、分页失效的原因 Mybatis Plus是一款优秀的ORM框架,使用简单方便。但是,在使用它进行分页时,有时会出现分页失效的问题,原因可能有以下几个方面: 1、Mybatis …

    编程 2025-04-24
  • MybatisPlus联合主键注解

    一、@TableId注解的用途 MybatisPlus是基于Mybatis的增强工具,提供了很多便捷的注解和方法。@TableId注解是其中的一个。它的作用是标注实体类的主键字段,…

    编程 2025-04-24
  • Mybatis分页查询SQL详解

    一、Mybatis分页查询介绍 Mybatis是一款优秀的持久层框架,支持动态SQL和参数映射等功能,而分页查询也是其中非常重要的功能之一。 分页查询是指将大量的数据按照需要的记录…

    编程 2025-04-23
  • Java 手动分页的实现

    一、什么是手动分页 手动分页是指在对一份文档进行分页时需要手动进行制定分页标记的过程。在Java中,手动分页可以通过计算、遍历等方式实现,而实现手动分页的主要目的是方便用户对数据进…

    编程 2025-04-23
  • MyBatisPlus Exists详解

    MyBatisPlus是一个强大的ORM框架,它通过简化开发和提高数据库访问性能来提供强大的功能。其中,Exists查询是常用的数据查询方式之一。本文将从多个角度详细阐述MyBat…

    编程 2025-04-12
  • C# List分页 – 实现数据分页的方法

    一、什么是数据分页 数据分页是指将一定量的数据分成多个页面来显示,从而降低页面的加载时间和用户对数据的阅读难度。在Web开发中,数据分页是常用的数据处理方式之一。 而C#语言中的L…

    编程 2025-03-12

发表回复

登录后才能评论