spring-data-ebean
Ebean реализация для spring data.
QQ群: 635113788
Spring Data проект основной целью является сделать построение использования DDD репозиториев интерфейсов и реализаций Spring приложений более простым. Этот модуль основан на Ebean ORM (легковесный JPA) репозитории. Используя этот модуль, вы можете использовать преимущества Spring Data в контексте Ebean ORM. Если вы ещё не сталкивались с Spring Data или Ebean ORM, рекомендуется сначала ознакомиться с проектом.
Легковесная реализация JPA ORM с поддержкой ассоциаций сущностей, которые не поддерживаются Mybatis, но с гибкостью запросов, подобной Mybatis. Для реализации требований к репозиториям агрегатных корней в моделях предметной области (сохранение агрегатного корня одновременно сохраняет связанные сущности и значения), а также partial objects, Ebean подходит идеально.
Я выбираю реляционную систему сохранения данных на основе следующих принципов:
Ссылка: java-persistence-frameworks-comparison
Hibernate/JPA
JDBC Template
jOOQ
MyBatis
EBean
Функция DTO запросов новая, требуется дополнительная поддержка XML mapping для DTO
Необходимо «усиливать» сущности, хотя на самом деле это касается только настройки среды (IDE плагин и Gradle плагин), после чего можно забыть об этом. ``` result2.size()); assertEquals("Yuan", result2.get(0).getLastname()); assertThat(result2, hasItem(user));
List<User> result3 = repository.findUsersByLastnameEquals("Yuan");
assertEquals(1, result3.size());
assertEquals("Yuan", result3.get(0).getLastname());
User result4 = repository.findUserByEmailAddressEqualsOql("yuanxuegui@163.com");
assertEquals("yuanxuegui@163.com", result4.getEmailAddress());
User result5 = repository.findUserByEmailAddress("yuanxuegui@163.com");
assertEquals("yuanxuegui@163.com", result5.getEmailAddress());
int result6 = repository.changeUserEmailAddress("yuanxuegui@163.com", "yuanxuegui@126.com");
assertEquals(1, result6);
List<User> result7 = repository.findByLastnameOql("Yuan");
assertEquals("yuanxuegui@126.com", result7.get(0).getEmailAddress());
int result8 = repository.deleteUserByEmailAddress("yuanxuegui@126.com");
assertEquals(1, result8);
User result9 = repository.findUserByEmailAddress("yuanxuegui@126.com");
assertNull(result9);
user = new User("Xuegui", "Yuan", "yuanxuegui@163.com");
user.setAge(29);
user = repository.save(user);
User result10 = repository.findUserByEmailAddress("yuanxuegui@163.com");
assertNotNull(result10);
int result11 = repository.deleteUserByEmailAddressOql("yuanxuegui@163.com");
assertEquals(1, result11);
User result12 = repository.findUserByEmailAddress("yuanxuegui@163.com");
assertNull(result12);
} @Test public void testFindByExample() { User u = new User(); u.setEmailAddress("YUANXUEGUI"); List result1 = repository.findAll(Example.of(u, ExampleMatcher.matchingAll() .withIgnoreCase(true) .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING))); assertEquals(1, result1.size()); assertEquals("Yuan", result1.get(0).getLastname()); assertThat(result1, hasItem(user));
List<User> result2 = repository.findAll(Example.of(u, ExampleMatcher.matchingAll()
.withIgnoreCase(false)
.withStringMatcher(ExampleMatcher.StringMatcher.EXACT)));
assertEquals(0, result2.size());
} }
@Data @IncludeFields("emailAddress,fullName(lastName,firstName),age") public class UserQuery { @ExprParam(expr = ExprType.CONTAINS) private String emailAddress;
@ExprParam(name = "age", expr = ExprType.GE)
private int ageStart;
@ExprParam(name = "age", expr = ExprType.LE)
private int ageEnd;
}
package org.springframework.data.ebean.querychannel;
import io.ebean.Query; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.ebean.sample.config.SampleConfig; import org.springframework.data.ebean.sample.domain.User; import org.springframework.data.ebean.sample.domain.UserInfo; import org.springframework.data.ebean.sample.domain.UserRepository; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.HashMap; import java.util.Map;
import static org.junit.Assert.assertEquals;
/**
@author Xuegui Yuan */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = SampleConfig.class) public class EbeanQueryChannelServiceIntegrationTests { // Test fixture User user; @Autowired private EbeanQueryChannelService ebeanQueryChannelService; @Autowired private UserRepository repository;
@Before public void initUser() { repository.deleteAll(); user = new User("QueryChannel", "Test", "testquerychannel@163.com"); user.setAge(29); user = repository.save(user); }
String sql1 = "select first_name, last_name, email_address from user where last_name= :lastName";
String sql2 = "select first_name as firstName, last_name as lastName, email_address as emailAddress from user where last_name= :lastName";
Map<String, String> columnsMapping = new HashMap<>();
columnsMapping.put("first_name", "firstName");
columnsMapping.put("last_name", "lastName");
Query<UserInfo> query1 = ebeanQueryChannelService.createSqlQuery(UserInfo.class,
sql1);
Query<UserInfo> query2 = ebeanQueryChannelService.createSqlQuery(UserInfo.class,
sql2);
Query<UserInfo> query3 = ebeanQueryChannelService.createSqlQueryMappingColumns(UserInfo.class,
sql1, columnsMapping);
query1.setParameter("lastName", "Test");
query2.setParameter("lastName", "Test");
query3.setParameter("lastName", "Test");
UserInfo userInfo1 = query1.findOne();
UserInfo userInfo2 = query2.findOne();
UserInfo userInfo3 = query3.findOne();
assertEquals("QueryChannel", userInfo1.getFirstName());
assertEquals("testquerychannel@163.com", userInfo1.getEmailAddress());
assertEquals("QueryChannel", userInfo2.getFirstName());
assertEquals("testquerychannel@163.com", userInfo2.getEmailAddress());
assertEquals("QueryChannel", userInfo3.getFirstName());
assertEquals("testquerychannel@163.com", userInfo3.getEmailAddress());
}
@Test
public void createNamedQuery() {
UserInfo userInfo = ebeanQueryChannelService.createNamedQuery(UserInfo.class,
"userInfoByEmail").setParameter("emailAddress",
"testquerychannel@163.com").findOne();
assertEquals("QueryChannel", userInfo.getFirstName());
assertEquals("testquerychannel@163.com", userInfo.getEmailAddress());
}
@Test
public void createNamedQueryWhere() {
UserInfo userInfo = ebeanQueryChannelService.createNamedQuery(UserInfo.class,
"userInfo").where()
.eq("emailAddress", "testquerychannel@163.com").findOne();
assertEquals("QueryChannel", userInfo.getFirstName());
assertEquals("testquerychannel@163.com", userInfo.getEmailAddress());
}
@Test
public void createDtoQuery() {
String sql = "select first_name, last_name, email_address from user where email_address = :emailAddress";
UserDTO userDTO = ebeanQueryChannelService.createDtoQuery(UserDTO.class, sql)
.setParameter("emailAddress", "testquerychannel@163.com")
.findOne();
assertEquals("QueryChannel", userDTO.getFirstName());
assertEquals("testquerychannel@163.com", userDTO.getEmailAddress());
}
@Test
public void query_queryObject() {
UserQuery userQuery = new UserQuery();
userQuery.setEmailAddress("testquerychannel@163.com");
userQuery.setAgeStart(1);
userQuery.setAgeEnd(30);
UserDTO user = queryChannel.createQuery(User.class, userQuery)
.asDto(UserDTO.class)
.setRelaxedMode()
.findOne();
assertEquals("testquerychannel@163.com", user.getEmailAddress());
}
@Test
public void applyQueryObject() {
UserQuery userQuery = new UserQuery();
userQuery.setEmailAddress("testquerychannel@163.com");
userQuery.setAgeStart(1);
userQuery.setAgeEnd(30);
UserInfo userInfo = EbeanQueryChannelService.applyWhere(queryChannel.createNamedQuery(UserInfo.class,
"userInfo").where(), userQuery).findOne();
assertEquals("QueryChannel", userInfo.getFirstName());
assertEquals("testquerychannel@163.com", userInfo.getEmailAddress());
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )