package org.exitsoft.orm.test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.sql.DataSource; import org.exitsoft.common.unit.Fixtures; import org.exitsoft.orm.core.Page; import org.exitsoft.orm.core.PageRequest; import org.exitsoft.orm.core.PropertyFilter; import org.exitsoft.orm.core.hibernate.HibernateSuperDao; import org.exitsoft.orm.core.hibernate.property.PropertyFilterRestrictionHolder; import org.exitsoft.orm.core.hibernate.property.impl.restriction.LikeRestriction; import org.exitsoft.orm.core.hibernate.property.impl.restriction.NeRestriction; import org.exitsoft.orm.test.entity.Role; import org.exitsoft.orm.test.entity.User; import org.hibernate.SessionFactory; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Restrictions; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests; /** * 测试HibernateSuperDao的查询方法 * * @author vincent * */ @ContextConfiguration(locations = { "/applicationContext-core-test.xml" }) public class TestHibernateSuperDao extends AbstractTransactionalJUnit4SpringContextTests{ private HibernateSuperDao<User, String> dao; private DataSource dataSource; @Autowired public void setDataSource(DataSource dataSource) { super.setDataSource(dataSource); this.dataSource = dataSource; } @Autowired public void setSessionFactory(SessionFactory sessionFactory) { dao = new HibernateSuperDao<User, String>(User.class); dao.setSessionFactory(sessionFactory); } @Before public void reloadSampleData() throws Exception { simpleJdbcTemplate.update("drop all objects"); executeSqlScript("classpath:/h2schma.sql", false); Fixtures.loadData(this.dataSource, "/sample-data.xml"); } @Test public void testFind() { List<User> userList = new ArrayList<User>(); List<Role> roleList = new ArrayList<Role>(); //---------------------------------------------Criterion test--------------------------------------------------// userList = dao.findByCriterion(Restrictions.eq("loginName", "admin")); Assert.assertEquals(userList.size(), 1); userList = dao.findByCriterion("loginName",Restrictions.eq("state", 1)); Assert.assertEquals(userList.size(), 8); userList = dao.findByCriterion("loginName_ASC,realName_desc",Restrictions.eq("state", 1)); Assert.assertEquals(userList.size(), 8); userList = dao.findByCriterion("loginName_asc,realName_DESC",Restrictions.eq("state", 1)); Assert.assertEquals(userList.size(), 8); userList = dao.findByCriterion("loginName,realName_DESC",Restrictions.eq("state", 1)); Assert.assertEquals(userList.size(), 8); userList = dao.findByCriterion("loginName_asc,realName",Restrictions.eq("state", 1)); Assert.assertEquals(userList.size(), 8); roleList = dao.findByCriterion(Role.class, Restrictions.eq("name", "系统管理员")); Assert.assertEquals(roleList.size(), 1); roleList = dao.findByCriterion(Role.class, "name_asc"); Assert.assertEquals(roleList.size(), 3); roleList = dao.findByCriterion(Role.class, "name_desc"); Assert.assertEquals(roleList.size(), 3); //---------------------------------------------Expression test--------------------------------------------------// userList = dao.findByExpression("EQ_S_loginName", "admin"); Assert.assertEquals(userList.size(), 1); userList = dao.findByExpression("EQ_I_state", "1","loginName_ASC,realName_desc"); Assert.assertEquals(userList.size(), 8); userList = dao.findByExpression("EQ_I_state", "1","loginName_asc,realName_DESC"); Assert.assertEquals(userList.size(), 8); userList = dao.findByExpression("EQ_I_state", "1","loginName,realName_DESC"); Assert.assertEquals(userList.size(), 8); userList = dao.findByExpression("EQ_I_state", "1","loginName_asc,realName"); Assert.assertEquals(userList.size(), 8); roleList = dao.findByExpression("EQ_S_name", "系统管理员", Role.class); Assert.assertEquals(roleList.size(), 1); roleList = dao.findByExpression("NE_S_name", null, "name_asc",Role.class); Assert.assertEquals(roleList.size(), 3); //---------------------------------------------Expressions test--------------------------------------------------// userList = dao.findByExpressions(new String[]{"EQ_S_loginName","EQ_S_realName"}, new String[]{"admin","admin"}); Assert.assertEquals(userList.size(), 1); userList = dao.findByExpressions(new String[]{"LIKE_S_loginName","EQ_I_state"}, new String[]{"m","1"}); Assert.assertEquals(userList.size(), 4); userList = dao.findByExpressions(new String[]{"LIKE_S_loginName","EQ_I_state"}, new String[]{"m","1"},"loginName_ASC,realName_desc"); Assert.assertEquals(userList.size(), 4); userList = dao.findByExpressions(new String[]{"LIKE_S_loginName","EQ_I_state"}, new String[]{"m","1"},"loginName"); Assert.assertEquals(userList.size(), 4); userList = dao.findByExpressions(new String[]{"LIKE_S_loginName","EQ_I_state"}, new String[]{"m","1"},"realName_asc"); Assert.assertEquals(userList.size(), 4); roleList = dao.findByExpressions(new String[]{"LIKE_S_name"}, new String[]{"系统"},Role.class); Assert.assertEquals(roleList.size(), 3); roleList = dao.findByExpressions(new String[]{"LIKE_S_name"}, new String[]{"系统"},"name",Role.class); Assert.assertEquals(roleList.size(), 3); //---------------------------------------------PropertyFiter test--------------------------------------------------// List<PropertyFilter> filters = new ArrayList<PropertyFilter>(); filters = PropertyFilterRestrictionHolder.createPropertyFilter(new String[]{"LIKE_S_loginName","EQ_I_state"}, new String[]{"m","1"}); userList = dao.findByPropertyFilters(filters); Assert.assertEquals(userList.size(), 4); userList = dao.findByPropertyFilters(filters,"loginName_ASC,realName_desc"); Assert.assertEquals(userList.size(), 4); userList = dao.findByPropertyFilters(filters,"loginName"); Assert.assertEquals(userList.size(), 4); userList = dao.findByPropertyFilters(filters,"realName_asc"); Assert.assertEquals(userList.size(), 4); filters = PropertyFilterRestrictionHolder.createPropertyFilter(new String[]{"LIKE_S_name"}, new String[]{"系统"}); roleList = dao.findByPropertyFilters(filters, Role.class); Assert.assertEquals(roleList.size(), 3); roleList = dao.findByPropertyFilters(filters,"name", Role.class); Assert.assertEquals(roleList.size(), 3); userList = dao.findByQueryNamedUseJpaStyle("QueryUserResourceJpa", "admin"); Assert.assertEquals(userList.size(), 1); userList = dao.findByQueryNamed("QueryUserResource", "admin"); Assert.assertEquals(userList.size(), 1); userList = dao.findByQuery("from User u where u.loginName=?", "admin"); Assert.assertEquals(userList.size(), 1); userList = dao.findByQueryUseJpaStyle("from User u where u.loginName=?1", "admin"); Assert.assertEquals(userList.size(), 1); Map<String, Object> values = new HashMap<String, Object>(); values.put("loginName", "admin"); userList = dao.findByQuery("from User u where u.loginName = :loginName", values); Assert.assertEquals(userList.size(), 1); userList = dao.findByDetachedCriteria(DetachedCriteria.forClass(User.class).add(Restrictions.eq("loginName", "admin"))); Assert.assertEquals(userList.size(), 1); } @Test public void testFindByProperty() { List<User> userList = new ArrayList<User>(); List<Role> roleList = new ArrayList<Role>(); userList = dao.findByProperty("loginName", "admin"); Assert.assertEquals(userList.size(),1); userList = dao.findByProperty("state", 1,NeRestriction.RestrictionName); Assert.assertEquals(userList.size(),0); userList = dao.findByPropertyWithOrderBy("state", 1, "loginName_asc"); Assert.assertEquals(userList.size(),8); userList = dao.findByPropertyWithOrderBy("state", 1, "loginName_asc",NeRestriction.RestrictionName); Assert.assertEquals(userList.size(),0); roleList = dao.findByProperty("name","系统",Role.class); Assert.assertEquals(roleList.size(),1); roleList = dao.findByProperty("name","系统",LikeRestriction.RestrictionName,Role.class); Assert.assertEquals(roleList.size(),3); roleList = dao.findByProperty("name","系统",LikeRestriction.RestrictionName,Role.class,"name"); Assert.assertEquals(roleList.size(),3); } @Test public void testFindUnique() { User user = new User(); Role role = new Role(); user = dao.findUniqueByCriterions(new Criterion[]{Restrictions.eq("loginName", "admin")}); Assert.assertEquals(user.getId(), "SJDK3849CKMS3849DJCK2039ZMSK0002"); role = dao.findUniqueByCriterions(new Criterion[]{Restrictions.eq("name", "系统")}, Role.class); Assert.assertEquals(role.getId(), "SJDK3849CKMS3849DJCK2039ZMSK0010"); user = dao.findUniqueByExpression("EQ_S_loginName", "admin"); Assert.assertEquals(user.getId(), "SJDK3849CKMS3849DJCK2039ZMSK0002"); role = dao.findUniqueByExpression("EQ_S_name", "系统",Role.class); Assert.assertEquals(role.getId(), "SJDK3849CKMS3849DJCK2039ZMSK0010"); user = dao.findUniqueByExpressions(new String[]{"EQ_S_loginName"}, new String[]{"admin"}); Assert.assertEquals(user.getId(), "SJDK3849CKMS3849DJCK2039ZMSK0002"); role = dao.findUniqueByExpressions(new String[]{"EQ_S_name"}, new String[]{"系统"},Role.class); Assert.assertEquals(role.getId(), "SJDK3849CKMS3849DJCK2039ZMSK0010"); List<PropertyFilter> filters = new ArrayList<PropertyFilter>(); filters = PropertyFilterRestrictionHolder.createPropertyFilter(new String[]{"EQ_S_loginName"}, new String[]{"admin"}); user = dao.findUniqueByPropertyFilters(filters); Assert.assertEquals(user.getId(), "SJDK3849CKMS3849DJCK2039ZMSK0002"); filters = PropertyFilterRestrictionHolder.createPropertyFilter(new String[]{"EQ_S_name"}, new String[]{"系统"}); role = dao.findUniqueByPropertyFilters(filters, Role.class); Assert.assertEquals(role.getId(), "SJDK3849CKMS3849DJCK2039ZMSK0010"); user = dao.findUniqueByQueryNamedUseJapStyle("QueryUserResourceJpa", "admin"); Assert.assertEquals(user.getId(), "SJDK3849CKMS3849DJCK2039ZMSK0002"); user = dao.findUniqueByQueryNamed("QueryUserResource", "admin"); Assert.assertEquals(user.getId(), "SJDK3849CKMS3849DJCK2039ZMSK0002"); user = dao.findUniqueByQuery("from User u where u.loginName=?", "admin"); Assert.assertEquals(user.getId(), "SJDK3849CKMS3849DJCK2039ZMSK0002"); user = dao.findUniqueByQueryUseJpaStyle("from User u where u.loginName=?1", "admin"); Assert.assertEquals(user.getId(), "SJDK3849CKMS3849DJCK2039ZMSK0002"); Map<String, Object> values = new HashMap<String, Object>(); values.put("loginName", "admin"); user = dao.findUniqueByQuery("from User u where u.loginName = :loginName", values); Assert.assertEquals(user.getId(), "SJDK3849CKMS3849DJCK2039ZMSK0002"); user = dao.findUniqueByDetachedCriteria(DetachedCriteria.forClass(User.class).add(Restrictions.eq("loginName", "admin"))); Assert.assertEquals(user.getId(), "SJDK3849CKMS3849DJCK2039ZMSK0002"); } @Test public void testFindUniqueByProperty() { User user = new User(); Role role = new Role(); user = dao.findUniqueByProperty("loginName", "admin"); Assert.assertEquals(user.getId(),"SJDK3849CKMS3849DJCK2039ZMSK0002"); role = dao.findUniqueByProperty("name", "系统",Role.class); Assert.assertEquals(role.getId(),"SJDK3849CKMS3849DJCK2039ZMSK0010"); } @Test public void testFindPage() { PageRequest request = new PageRequest(1,2); Page<User> user = new Page<User>(); Page<Role> role = new Page<Role>(); user = dao.findPage(request, Restrictions.eq("state", 1)); Assert.assertEquals(user.getResult().size(), 2); Assert.assertEquals(user.getTotalPages(), 4); Assert.assertEquals(user.getTotalItems(), 8); user = dao.findPage(request, "EQ_I_state","1"); Assert.assertEquals(user.getResult().size(), 2); Assert.assertEquals(user.getTotalPages(), 4); Assert.assertEquals(user.getTotalItems(), 8); List<PropertyFilter> filters = PropertyFilterRestrictionHolder.createPropertyFilter(new String[]{"EQ_I_state"}, new String[]{"1"}); user = dao.findPage(request, filters); Assert.assertEquals(user.getResult().size(), 2); Assert.assertEquals(user.getTotalPages(), 4); Assert.assertEquals(user.getTotalItems(), 8); user = dao.findPage(request, new String[]{"EQ_I_state"}, new String[]{"1"}); Assert.assertEquals(user.getResult().size(), 2); Assert.assertEquals(user.getTotalPages(), 4); Assert.assertEquals(user.getTotalItems(), 8); user = dao.findPage(request,DetachedCriteria.forClass(User.class).add(Restrictions.eq("state", 1))); Assert.assertEquals(user.getResult().size(), 2); Assert.assertEquals(user.getTotalPages(), 4); Assert.assertEquals(user.getTotalItems(), 8); role = dao.findPage(request,Role.class,Restrictions.eq("name","系统管理员")); Assert.assertEquals(role.getResult().size(), 1); Assert.assertEquals(role.getTotalPages(), 1); Assert.assertEquals(role.getTotalItems(), 1); role = dao.findPage(request,"EQ_S_name","系统管理员",Role.class); Assert.assertEquals(role.getResult().size(), 1); Assert.assertEquals(role.getTotalPages(), 1); Assert.assertEquals(role.getTotalItems(), 1); filters = PropertyFilterRestrictionHolder.createPropertyFilter(new String[]{"EQ_S_name"}, new String[]{"系统管理员"}); role = dao.findPage(request,filters,Role.class); Assert.assertEquals(role.getResult().size(), 1); Assert.assertEquals(role.getTotalPages(), 1); Assert.assertEquals(role.getTotalItems(), 1); role = dao.findPage(request,new String[]{"EQ_S_name"}, new String[]{"系统管理员"},Role.class); Assert.assertEquals(role.getResult().size(), 1); Assert.assertEquals(role.getTotalPages(), 1); Assert.assertEquals(role.getTotalItems(), 1); role = dao.findPage(request,DetachedCriteria.forClass(Role.class).add(Restrictions.eq("name", "系统管理员"))); Assert.assertEquals(role.getResult().size(), 1); Assert.assertEquals(role.getTotalPages(), 1); Assert.assertEquals(role.getTotalItems(), 1); } @Test public void testAllRestriction() { List<User> userList = new ArrayList<User>(); userList = dao.findByExpression("EQ_D_createTime", "2012-08-12"); userList = dao.findByExpression("EQ_S_wubiCode", null); Assert.assertEquals(userList.size(), 1); userList = dao.findByExpression("EQ_S_wubiCode", ""); Assert.assertEquals(userList.size(),6); userList = dao.findByExpression("EQ_S_wubiCode", "123"); Assert.assertEquals(userList.size(), 1); userList = dao.findByExpression("NE_S_wubiCode", null); Assert.assertEquals(userList.size(), 7); userList = dao.findByExpression("NE_S_wubiCode", ""); Assert.assertEquals(userList.size(), 1); userList = dao.findByExpression("NE_S_wubiCode", "123"); Assert.assertEquals(userList.size(), 6); userList = dao.findByExpression("LIKE_S_loginName", "m"); Assert.assertEquals(userList.size(), 4); userList = dao.findByExpression("RLIKE_S_loginName", "m"); Assert.assertEquals(userList.size(), 3); userList = dao.findByExpression("LLIKE_S_loginName", "n"); Assert.assertEquals(userList.size(), 1); userList = dao.findByExpression("LE_I_state", "1"); Assert.assertEquals(userList.size(), 8); userList = dao.findByExpression("LT_I_state", "2"); Assert.assertEquals(userList.size(), 8); userList = dao.findByExpression("GE_I_state", "1"); Assert.assertEquals(userList.size(), 8); userList = dao.findByExpression("GT_I_state", "0"); Assert.assertEquals(userList.size(), 8); userList = dao.findByExpression("IN_S_loginName", "admin,vincent"); Assert.assertEquals(userList.size(), 2); userList = dao.findByExpression("NIN_S_loginName", "admin,vincent"); Assert.assertEquals(userList.size(), 6); userList = dao.findByExpression("EQ_S_loginName","admin|vincent"); Assert.assertEquals(userList.size(), 2); userList = dao.findByExpression("EQ_S_loginName","admin,vincent"); Assert.assertEquals(userList.size(),0); userList = dao.findByExpression("EQ_S_loginName","admin,null"); Assert.assertEquals(userList.size(),0); userList = dao.findByExpression("EQ_S_loginName_OR_realName","null|admin"); Assert.assertEquals(userList.size(), 1); } }