今天在写代码的时候,使用 mybatis plus 对数据进行更新。
在项目中我的将一篇文章分成了两张表进行储存数据,在对数据存储的时候遇到了一个问题。
在项目中我有两个实体类,分别对应的是文章的数据和文章内容的数据。我在对前端传来的数据进行存储的逻辑是先创建一个文章的实例对象,然后使用 mybaltis plus 的 inster() 方法对数据进行存储。然后再创建一个内容的实例对象,将需要的内容添加进去后使用 inster 方法对数据进行插入,后面再将内容表的id取出来添加到文章对象中的内容 id 字段后使用 updateById() 方法对数据进行更新。
@Override @Transactional(rollbackFor = Exception.class) public Result addArticle(AddArticleParam addArticleParam) { // 获取到登陆用户的信息 LoginUserVo loginUserVo = UserThreadLocal.get(); // 登陆用户 id Long userId = loginUserVo.getUserId(); // 文章标题 String articleTitle = addArticleParam.getArticleTitle(); // 文章总结 String articleSummary = addArticleParam.getArticleSummary(); // 文章文本内容 String bodyContent = addArticleParam.getBodyContent(); // 文章 html 格式内容 String bodyContentHtml = addArticleParam.getBodyContentHtml(); // 创建文章实体对象 Article article = new Article(); // 添加标题 article.setArticleTitle(articleTitle); // 添加文章总结信息 article.setArticleSummary(articleSummary); // 添加作者id(登陆用户的id) article.setAuthorId(userId); // 插入文章的信息 articleMapper.insert(article); // 实例化文章内容对象 ArticleBody articleBody = new ArticleBody(); // 添加文章的内容 articleBody.setBodyContent(bodyContent); // 添加 html 格式的文章内容 articleBody.setBodyContentHtml(bodyContentHtml); // 添加文章的id articleBody.setArticleId(article.getArticleId()); // 添加文章内容 articleBodyMapper.insert(articleBody); // 向 article 实体类中添加 body id article.setBodyId(article.getBodyId()); // 更新数据库中的文章表内容 articleMapper.updateById(article); return Result.success("添加成功"); }
后面发现这样是不行的,查看SQL执行日志之后发现,SQL 语句中并没有对 内容id 字段进行更新。
后面我将文章实例对象打印之后发现获取到的是一个内存地址。
然后获取里面的 内容id 字段的内容发现是空。
然后我们得到的结论就是之所以没有对这个字段进行更新是因为我们传进去的实例对象中,内容id 这个属性并没有将值 set 进去。
后面我重新创建一个文章的实例对象然后对此进行更新后数据就插进去了。
Article newArticle = new Article(); newArticle.setArticleId(article.getArticleId()); newArticle.setBodyId(articleBody.getBodyId()); articleMapper.updateById(newArticle);
标签:articleBody,pulus,更新,添加,文章,mybatis,article,id From: https://www.cnblogs.com/wushuaiqi/p/16884979.html