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;
表示非单表字段