基于SpringBoot框架整合mybatis plus的一些小问题

1.mybatis plus 插入数据库生成的id很大如何解决?

mybatis plus自3.3.0开始,默认使用雪花算法+UUID(不含中划线)产生id,因此我们会看到使用mybatis plus插入一条数据的时候,自动生成的id是这个样子的:1447571384928514049,
而我们一般的id都是从1开始的,1447571384928514049导致后面自增的id也变成了一长串数字,不利于维护。
因此一个注解需要加在实体类的id属性上:

@TableId(type = IdType.AUTO)
    private Long id;

开发者无需赋值,自己根据当前表中id最大值自增+1,然而一旦mybatis plus在未加@TableId时已经对表进行了插入操作,此时的当前表中id最大值发生变化,成为一长串。
可以在清空表中数据后,修改自增开始的id
ALTER TABLE user_blog AUTO_INCREMENT = 1
这样再插入数据就会从1开始。

2.基于mybatis plus 实现自定义分页

controller

@GetMapping("listPage")
    public ResultData listPage(int pageNo,int pageSize,UserBlog userBlog){
        // 查询  -  条件构造器
        QueryWrapper<UserBlog> queryWrapper = new QueryWrapper<>();
        if(!StringUtils.isEmpty(userBlog.getTitle())){
            // 给where 语句后追加:  title模糊查询
            //  第一个参数是数据库列名 ; 第二个参数是传入的值
            queryWrapper.like("title",userBlog.getTitle());
        }
        if(userBlog.getStatus() != null){
            // 给where 语句后追加:  status =
            queryWrapper.eq("status",userBlog.getStatus());
        }
        Page<UserBlog> page = new Page<>(pageNo, pageSize);
        IPage<UserBlog> pageInfo = userBlogService.pageAll(page, queryWrapper);

        return ResultData.ok(pageInfo);
    }

service

public interface UserBlogService extends IService<UserBlog> {
    public IPage<UserBlog> pageAll(Page<UserBlog> page, QueryWrapper<UserBlog> queryWrapper);
}

ServiceImpl

@Transactional
@Service                                // <M extends BaseMapper<T>, T>
public class UserBlogServiceImpl extends ServiceImpl<UserBlogMapper, UserBlog> implements UserBlogService {
   @Autowired
   private UserBlogMapper userBlogMapper;
    @Override
    public IPage<UserBlog> pageAll(Page<UserBlog> page, QueryWrapper<UserBlog> queryWrapper) {
          return userBlogMapper.findByPage(page,queryWrapper);
    }
}

mapper

@Repository
public interface UserBlogMapper extends BaseMapper<UserBlog> {

    IPage<UserBlog> findByPage(IPage<UserBlog> page, @Param(Constants.WRAPPER) Wrapper<UserBlog> wrapper);
}

注意要在参数Wrapper wrapper前面加上这个注解@Param(Constants.WRAPPER),识别QueryWrapper

mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.qcby.shujia.demo.mapper.UserBlogMapper">

    <select id="findByPage" resultType="com.qcby.shujia.demo.entity.UserBlog">
        select b.id,b.title,b.content,b.reaseon,b.status,u.username from user_blog b inner join user u on b.userid=u.id ${ew.customSqlSegment}
    </select>

</mapper>

需要在sql语句后面加上${ew.customSqlSegment},这样会自动的在后面追加wrapper里面设置的条件。

这里用到了多表联查,为了防止mybatis plus将username识别为单表的字段,在userblog实体类的username属性上加一个标签

@TableField(exist = false)
    private String username;

表示非单表字段

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值