jujube-jdbc
Это простой ORM-фреймворк, который объединяет преимущества Mybatis и JPA, упрощая разработку постоянного слоя.
Часть 1: Мотивация
Когда у нас возникает идея создать собственный продукт, это обычно происходит потому, что существующее программное обеспечение не удовлетворяет наши потребности. В области Java для разработки постоянного слоя есть несколько популярных вариантов. У каждого из них есть свои недостатки.
Spring JDBC: Это очень простой слой обёртки над JDBC, который удобен и лаконичен. Однако недостатком является необходимость писать SQL вручную, что приводит к снижению эффективности и усложнению управления.
JFianl Model: Он идеально подходит для теории JFinal, будучи лаконичным до предела. Проблема в том, что его сложно выделить и использовать отдельно, а также требуется большое количество ручного написания SQL.
Hibernate: Этот фреймворк всегда был выдающимся, с момента своего появления он сиял золотым светом. Его уникальная объектно-реляционная модель базы данных делает его привлекательным. Однако явным недостатком является слабость в объединённых запросах.
Spring JPA: Эта мощная функция синтаксического анализа имён методов позволяет повысить эффективность до максимума. Недостаток аналогичен Hibernate.
Mybatis: Освобождает от сложности Hibernate, делая постоянный слой более свежим. Недостатком является то, что если вы не хотите отказываться от огромных преимуществ JPA, как решить эту проблему?
Speedment: С ростом популярности микросервисов, CQRS и функционального программирования, Speedment также набирает популярность. Можно рассматривать его как продвинутую версию Hibernate. Недостатком остаётся необходимость ручного написания логики запросов.
Из всех этих фреймворков Spring JPA кажется мне наиболее удобным. Простое написание имени метода позволяет завершить логическую разработку программы. Эта особенность действительно привлекает внимание. Однако объединённые запросы в JPA вызывают затруднения, и использование select *
не обеспечивает высокую эффективность.
Чтобы решить эту проблему, я решил разработать свой собственный фреймворк на основе идей Mybatis и Spring Data Jpa, используя Spring-JDBC в качестве основы.
Часть 2: Пример
Давайте посмотрим на результаты. Пример проекта находится в easy-jdbc-sample, где используется Spring Boot + H2 для запуска. Рассмотрим тестовый код:
@SpringBootTest(classes = JujubeJdbcApp.class)
@RunWith(SpringRunner.class)
@ActiveProfiles({"test"})
public class UserDaoTest {
@Autowired
private UserDao userDao;
@Test
public void findNameById() {
String name = userDao.findNameById(1);
assertThat(name).isEqualTo("百度");
}
// Другие тесты опущены для краткости
}
Теперь рассмотрим наш UserDao, который очень лаконичен:
public interface UserDao extends BaseDao<User, Long> {
@Override
default String getTableName() {
return "user";
}
public String findNameById(long id);
// Другие методы опущены для краткости
}
Методы Dao, такие как find и getCount, наследуют магию Spring JPA: динамическое создание запросов на основе имён методов. Что касается разбиения на страницы, то здесь необходимо вручную написать SQL, о чём мы поговорим позже.
В методах UserDao нет комментариев, так как это соглашение важнее конфигурации. Когда вы понимаете правила построения имён методов, вы знаете, что означают эти атомарные операции.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )