Mybatis-plus 是基于mybatis的增强工具,是一款稳定强大的工具。
配置安装参考:https://baomidou.com/pages/226c21/

连表分页查询

entity的创建

  1. @TableName("sys_user")//指定表名
  2. public class User{
  3. @TableId(type = IdType.AUTO)//指定主键
  4. private Long id;
  5. //非空判断,NOT_NULL / NOT_EMPTY / IGNORED / DEFAULT
  6. @TableField(strategy = FieldStrategy.NOT_NULL)
  7. private String name;
  8. private String password;
  9. @TableField(exist = false)//冗余字段
  10. @DateTimeFormat(
  11. pattern = "yyyy-MM-dd HH:mm:ss"
  12. )
  13. @JsonFormat(
  14. pattern = "yyyy-MM-dd HH:mm:ss"
  15. )
  16. private LocalDateTime createTime;
  17. //省略get set 方法和 toString
  18. }

mapper层

  1. @Mapper
  2. public interface UserMapper extends BaseMapper<User> {
  3. //IPage 分页器, QueryWrapper 条件构造器
  4. IPage<User> findByPage(IPage<User> page, @Param("ew") QueryWrapper<User> wrapper) throws Exception;
  5. }

QueryWrapper条件构造器对象的sqlSegment属性拼接了 不带where 的筛选条件sql,而customSqlSegment属性拼接了 完整的 where语句 。
mapper代码

  1. <!--通过自定义sql并拼接条件构造器的形成的sql语句实现连表查询,分页只需要传入Page对象即可 -->
  2. <select id="findByPage" resultType="com.clown.entity.User">
  3. SELECT
  4. user.* ,
  5. dept.detp_name
  6. FROM
  7. user as user
  8. INNER JOIN dept_rela as rela ON rela.user_id = user.id
  9. INNER JOIN dept as dept on dept.dept_no = rela.dept_no
  10. ${ew.customSqlSegment}
  11. </select>

service层把筛选字段和值set进条件构造器对象后,在mapper中直接在查询语句后面使用$符号直接进行拼接,需要注意的是mapper的入参需要在@param注解上表明

  1. @Param("ew") QueryWrapper<User> queryWrapper

而mapper文件对应的是

  1. ${ew.customSqlSegment}

service接口代码

  1. public interface IUserService extends IService<User> {
  2. IPage<User> findByPage(Long current, Long size, String name) throws Exception;
  3. }

service实现类代码

  1. public class UserServiceImpl extends ServiceImpl<IUserMapper,User>{
  2. @Override
  3. public IPage<User> findByPage(Long current, Long size, Long unitId, String name) throws Exception {
  4. //分页器对象
  5. IPage<User> page = new Page<User>(current, size);
  6. //条件构造器对象
  7. QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
  8. //入参
  9. if (name!=null){
  10. queryWrapper.eq("user.name", name);
  11. }
  12. queryWrapper.orderByAsc("create_time");
  13. IPage<User> page = null;
  14. try {
  15. page = baseMapper.findByPage(page, queryWrapper);
  16. } catch (Exception e) {
  17. LOGGER.error(e.getMessage());
  18. throw e;
  19. }
  20. return page;
  21. }
  22. }