@Transactional @Override public Blog updateBlog(Long id, Blog blog) { Blog b = blogRepository.findOne(id); if (b == null) { throw new NotFoundException("该博客不存在"); } //复制查询修对象 MyBeanUtils.getNullPropertyNames(blog)过滤属性值为空的 BeanUtils.copyProperties(blog,b, MyBeanUtils.getNullPropertyNames(blog)); b.setUpdateTime(new Date()); return blogRepository.save(b);
时间: 2023-06-20 22:08:50 浏览: 43
这是一个使用Spring框架中的@Transactional注解实现的更新博客的方法。具体来说,它会根据传入的id查询数据库中的博客对象,如果博客对象不存在,则会抛出NotFoundException异常。如果博客存在,则会使用BeanUtils.copyProperties方法将传入的Blog对象的非空属性值复制到查询到的博客对象中,同时设置更新时间并保存更新后的博客对象。最终返回更新后的博客对象。
相关问题
@Transactional @Override public Blog getAndConvert(Long id) { Blog blog = blogRepository.findOne(id); if (blog == null) { throw new NotFoundException("该博客不存在"); } Blog b = new Blog(); BeanUtils.copyProperties(blog,b); String content = b.getContent(); b.setContent(MarkdownUtils.markdownToHtmlExtensions(content)); blogRepository.updateViews(id); return b; }
这是一段 Java 代码,它使用了 Spring Framework 的 @Transactional 注解来确保该方法的实现在事务中执行。该方法的功能是从数据库中获取一个博客对象,如果该博客不存在,则抛出一个自定义的 NotFoundException 异常。如果博客存在,则将其属性复制到一个新的博客对象中,并使用 MarkdownUtils 工具类将博客内容从 Markdown 格式转换为 HTML 格式,然后更新博客的浏览量并返回该博客对象。该方法的返回值类型是 Blog 类型,因此可以根据需要对返回的博客对象进行进一步操作。
@Override @Transactional(isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)
在Spring项目中,使用`@Transactional`注解可以为方法添加事务支持。其中,`isolation`参数用于指定事务的隔离级别,`rollbackFor`参数用于指定需要回滚的异常类型。
对于`@Transactional(isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)`这个注解,它的作用是将方法设置为使用读已提交的隔离级别,并且在遇到任何异常时都进行回滚。
隔离级别`READ_COMMITTED`表示一个事务只能读取到已经提交的数据,避免了脏读。而`rollbackFor = Exception.class`表示遇到任何异常都会触发事务回滚。
需要注意的是,Spring的事务隔离级别和数据库的事务隔离级别是有关联的。当Spring项目中使用了`@Transactional`注解指定了隔离级别时,会优先使用Spring的隔离级别,而不是数据库的隔离级别。因此,如果两者不一样,以Spring的隔离级别为准。