Я только что узнал что-то о mybatis-plus и изменил код, написанный на mybatis, на mybatis-plus.

Вопрос или проблема

Вопрос: Реализация MyBatis против MyBatis-Plus
У меня есть две реализации функции управления статьями с использованием MyBatis и MyBatis-Plus. Ниже приведены соответствующие фрагменты кода для каждого подхода.

  1. Код, написанный с использованием MyBatis.
    @RestController  
    @RequestMapping("/article")  
    public class ArticleController {
  @Autowired
  private ArticleService articleService;

  @PostMapping  
  public Result add(@RequestBody @Validated Article article) {  
    articleService.add(article);
    return Result.success();  
  }
}

public interface ArticleService {
  void add(Article article);
}

@Service  
public class ArticleServiceImpl extends ServiceImpl<ArticleMapper, Article> implements ArticleService  {
  @Autowired
  private ArticleMapper articleMapper;

  @Override
  public void add(Article article) {
    article.setCreateTime(LocalDateTime.now());  
    article.setUpdateTime(LocalDateTime.now());  

    Map<String, Object> map = ThreadLocalUtil.get();  
    Integer userId = (Integer) map.get("id");  
    article.setCreateUser(userId);  

    articleMapper.add(article);  
  }
}

@Mapper
public interface ArticleMapper {
  @Insert("insert into article(title,content,cover_img,state,category_id,create_user,create_time,update_time) " +  
          "values(#{title},#{content},#{coverImg},#{state},#{categoryId},#{createUser},#{createTime},#{updateTime})")  
  void add(Article article);
}
  1. Код, написанный с использованием MyBatis-Plus.
@RestController  
@RequestMapping("/article")  
public class ArticleController {

  @Autowired
  private ArticleService articleService;

  @PostMapping  
  public Result add(@RequestBody @Validated Article article) {  
    article.setCreateTime(LocalDateTime.now());  
    article.setUpdateTime(LocalDateTime.now());  

    Map<String, Object> map = ThreadLocalUtil.get();  
    Integer userId = (Integer) map.get("id");  
    article.setCreateUser(userId);  

    articleService.save(article);  

    return Result.success();  
  }
}

public interface ArticleService extends IService<Article> {
}

@Service  
public class ArticleServiceImpl extends ServiceImpl<ArticleMapper, Article> implements ArticleService {
}

@Mapper
public interface ArticleMapper extends BaseMapper<Article> {
}

Вопрос
Какая реализация лучше с точки зрения поддерживаемости кода, производительности и удобства использования? Есть ли какие-либо лучшие практики или рекомендации по улучшению использования MyBatis или MyBatis-Plus в этом контексте?

Ответ или решение

В реализации управления статьями с использованием MyBatis и MyBatis-Plus можно выделить несколько аспектов: поддерживаемость кода, производительность и удобство использования. Давайте рассмотрим каждую из этих категорий в контексте представленных кодов.

1. Поддерживаемость кода

MyBatis:

  • Ваша реализация с использованием MyBatis требует более детального управления SQL-запросами и функционалом, что может привести к более сложному коду, особенно по мере роста приложения.
  • Вам необходимо самостоятельно ручное написание SQL-запросов и их управление, что увеличивает вероятность ошибок при изменении структуры базы данных или когда изменения затрагивают несколько файлов.

MyBatis-Plus:

  • MyBatis-Plus значительно упрощает поддержку кода за счет предоставления набора полезных функций, таких как автоматическое создание CRUD операций и использование базовых методов BaseMapper.
  • Ваш код становится более чистым и легким для понимания, так как он требует меньше явных SQL-запросов и позволяет использовать удобные методы.

2. Производительность

MyBatis:

  • В зависимости от сложности запросов может потребоваться больше времени на оптимизацию SQL-запросов и кода. Ваш код написан вручную и вы контролируете производительность, но это также означает, что ошибки могут привести к значительным затратам времени на выполнение запросов.

MyBatis-Plus:

  • Использование MyBatis-Plus обычно обеспечивает хорошую производительность благодаря оптимизированным SQL-запросам, которые генерируются автоматически. Библиотека учитывает множество лучших практик, что может положительно сказаться на производительности.
  • Однако важно отметить, что с точки зрения производительности все еще необходимо следить за сложностью запросов и структурой данных.

3. Удобство использования

MyBatis:

  • Использование MyBatis требует большего внимания к написанию SQL, что может создавать дополнительные сложности для новых разработчиков. Необходимо больше времени на обучение.

MyBatis-Plus:

  • MyBatis-Plus предлагает богатый набор функций «из коробки», что упрощает процесс разработки. Разработчики могут быстрее писать код и сосредоточиться на бизнес-логике, а не на рутинном создании SQL-запросов.
  • В дополнение, MyBatis-Plus предлагает удобные аннотации и методы для работы с сущностями, что заметно улучшает разработку.

Рекомендации по улучшению использования MyBatis и MyBatis-Plus

  1. Используйте автоматическое заполнение полей:
    В MyBatis-Plus можно настроить автоматическое заполнение полей, таких как createTime, updateTime, что значительно упростит код и снизит вероятность ошибок.

  2. Искористуем расширенные возможности MyBatis-Plus:
    Обратите внимание на возможности таких функций, как условные запросы, пагинация, и обработка временных меток. Это может сэкономить много времени и усилий.

  3. Тесты и документация:
    Разрабатывайте как можно больше тестов для вашего кода, как для MyBatis, так и для MyBatis-Plus. Это поможет избежать ошибок из-за изменений в коде. Хорошая документация и комментарии сделают ваш код более доступным для новых разработчиков.

  4. Соблюдение принципов SOLID:
    Следуйте принципам разработки, таким как SOLID, чтобы обеспечить более высокую поддерживаемость вашего кода.

Заключение

В общем, использование MyBatis-Plus предоставляет больше преимуществ в области поддерживаемости, производительности и удобства использования по сравнению с чистым MyBatis. Однако, как и в любом фреймворке, важно избегать чрезмерного упрощения и продолжать уделять внимание структуре кода и оптимизации запросов.

Оцените материал
Добавить комментарий

Капча загружается...