Package com.github.dactiv.orm.test.hibernate

Source Code of com.github.dactiv.orm.test.hibernate.TestBasicHibernateDao

package com.github.dactiv.orm.test.hibernate;

import static org.junit.Assert.assertEquals;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import com.github.dactiv.common.unit.Fixtures;
import com.github.dactiv.orm.test.entity.User;
import com.github.dactiv.orm.test.simple.hibernate.BasicHiberanteDaoSimple;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Order;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;

@Transactional
@ActiveProfiles("hibernate")
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/applicationContext-test.xml")
public class TestBasicHibernateDao {

  @Autowired
  private BasicHiberanteDaoSimple userDao;
 
  private SessionFactory sessionFactory;
 
  private NamedParameterJdbcTemplate jdbcTemplate;
 
  private DataSource dataSource;
 
  /**
   * 通过表名计算出表中的总记录数
   *
   * @param tableName 表名
   *
   * @return int
   */
  protected int countRowsInTable(String tableName) {
    return jdbcTemplate.queryForObject("SELECT COUNT(0) FROM " + tableName,new HashMap<String, Object>(),Integer.class);
  }
 
  @Autowired
  public void setDataSource(DataSource dataSource) {
    this.dataSource = dataSource;
    this.jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
  }

  @Autowired
  public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
  }
 
  @Before
  public void install() throws Exception {
    Fixtures.reloadData(dataSource, "/sample-data.xml");
  }
 
  @Test
  public void testInsert() {
    User entity = new User();
   
    entity.setCreateTime(new Date());
    entity.setLoginName("test");
    entity.setPassword("123456");
    entity.setPinyinCode("pinyin");
    entity.setRealName("测试");
    entity.setState(new Integer(1));
    entity.setWubiCode("wubi");
   
    int before = countRowsInTable("TB_ACCOUNT_USER");
   
    userDao.insert(entity);
    sessionFactory.getCurrentSession().flush();
   
    int after = countRowsInTable("TB_ACCOUNT_USER");
   
    assertEquals(before + 1, after);
   
  }

  @Test
  public void testInsertAll() {
    User entity1 = new User();
   
    entity1.setCreateTime(new Date());
    entity1.setLoginName("test");
    entity1.setPassword("123456");
    entity1.setPinyinCode("pinyin");
    entity1.setRealName("测试");
    entity1.setState(new Integer(1));
    entity1.setWubiCode("wubi");
   
    User entity2 = new User();
   
    entity2.setCreateTime(new Date());
    entity2.setLoginName("test");
    entity2.setPassword("123456");
    entity2.setPinyinCode("pinyin");
    entity2.setRealName("测试");
    entity2.setState(new Integer(1));
    entity2.setWubiCode("wubi");
   
    List<User> data = Lists.newArrayList(entity1,entity2);
   
    int before = countRowsInTable("TB_ACCOUNT_USER");
   
    userDao.insertAll(data);
    sessionFactory.getCurrentSession().flush();
   
    int after = countRowsInTable("TB_ACCOUNT_USER");
   
    assertEquals(before + 2, after);
  }

  @Test
  public void testUpdate() {
    User user = userDao.load("SJDK3849CKMS3849DJCK2039ZMSK0001");
    user.setLoginName("update login name");
   
    userDao.update(user);
    sessionFactory.getCurrentSession().flush();
    sessionFactory.getCurrentSession().clear();
   
    user = userDao.load("SJDK3849CKMS3849DJCK2039ZMSK0001");
    assertEquals(user.getLoginName(), "update login name");
  }

  @Test
  public void testUpdateAll() {
    User user1 = userDao.load("SJDK3849CKMS3849DJCK2039ZMSK0001");
    User user2 = userDao.load("SJDK3849CKMS3849DJCK2039ZMSK0002");
   
    user1.setLoginName("update user 1 login name");
    user2.setLoginName("update user 2 login name");
   
    List<User> data = Lists.newArrayList(user1,user2);
   
    userDao.updateAll(data);
   
    sessionFactory.getCurrentSession().flush();
    sessionFactory.getCurrentSession().clear();
   
    user1 = userDao.load("SJDK3849CKMS3849DJCK2039ZMSK0001");
    user2 = userDao.load("SJDK3849CKMS3849DJCK2039ZMSK0002");
   
    assertEquals(user1.getLoginName(), "update user 1 login name");
    assertEquals(user2.getLoginName(), "update user 2 login name");
  }

  @Test
  public void testSave() {
    User entity = new User();
   
    entity.setCreateTime(new Date());
    entity.setLoginName("test");
    entity.setPassword("123456");
    entity.setPinyinCode("pinyin");
    entity.setRealName("测试");
    entity.setState(new Integer(1));
    entity.setWubiCode("wubi");
   
    int before = countRowsInTable("TB_ACCOUNT_USER");
   
    userDao.save(entity);
    sessionFactory.getCurrentSession().flush();
   
    int after = countRowsInTable("TB_ACCOUNT_USER");
   
    assertEquals(before + 1, after);
   
    entity.setLoginName("update login name");
   
    userDao.save(entity);
   
    entity = userDao.load(entity.getId());
   
    assertEquals(entity.getLoginName(), "update login name");
  }

  @Test
  public void testSaveAll() {
    User entity1 = new User();
   
    entity1.setCreateTime(new Date());
    entity1.setLoginName("test");
    entity1.setPassword("123456");
    entity1.setPinyinCode("pinyin");
    entity1.setRealName("测试");
    entity1.setState(new Integer(1));
    entity1.setWubiCode("wubi");
   
    User entity2 = new User();
   
    entity2.setCreateTime(new Date());
    entity2.setLoginName("test");
    entity2.setPassword("123456");
    entity2.setPinyinCode("pinyin");
    entity2.setRealName("测试");
    entity2.setState(new Integer(1));
    entity2.setWubiCode("wubi");
   
    List<User> data = Lists.newArrayList(entity1,entity2);
   
    int before = countRowsInTable("TB_ACCOUNT_USER");
   
    userDao.saveAll(data);
    sessionFactory.getCurrentSession().flush();
   
    int after = countRowsInTable("TB_ACCOUNT_USER");
   
    assertEquals(before + 2, after);
   
    entity1.setLoginName("update user 1 login name");
    entity2.setLoginName("update user 2 login name");
   
    userDao.saveAll(data);
   
    entity1 = userDao.load(entity1.getId());
    entity2 = userDao.load(entity2.getId());
   
    assertEquals(entity1.getLoginName(), "update user 1 login name");
    assertEquals(entity2.getLoginName(), "update user 2 login name");
  }

  @Test
  public void testDelete() {
   
    int before = countRowsInTable("TB_ACCOUNT_USER");
   
    userDao.delete("SJDK3849CKMS3849DJCK2039ZMSK0001");
    sessionFactory.getCurrentSession().flush();
    userDao.delete(userDao.load("SJDK3849CKMS3849DJCK2039ZMSK0002"));
    sessionFactory.getCurrentSession().flush();
   
    int aflter = countRowsInTable("TB_ACCOUNT_USER");
   
    assertEquals(before, aflter);
  }

  @Test
  public void testDeleteAll() {
   
    int before = countRowsInTable("TB_ACCOUNT_USER");
    userDao.deleteAll(Lists.newArrayList("SJDK3849CKMS3849DJCK2039ZMSK0001","SJDK3849CKMS3849DJCK2039ZMSK0002"));
    sessionFactory.getCurrentSession().flush();
    int aflter = countRowsInTable("TB_ACCOUNT_USER");
   
    assertEquals(before, aflter);
  }

  @Test
  public void testDeleteAllByEntities() {
   
    int before = countRowsInTable("TB_ACCOUNT_USER");
    userDao.deleteAllByEntities(Lists.newArrayList(userDao.load("SJDK3849CKMS3849DJCK2039ZMSK0001"),userDao.load("SJDK3849CKMS3849DJCK2039ZMSK0002")));
    sessionFactory.getCurrentSession().flush();
    int aflter = countRowsInTable("TB_ACCOUNT_USER");
   
    assertEquals(before, aflter);
  }

  @Test
  public void testGet() {
    List<User> data = userDao.get(Lists.newArrayList("SJDK3849CKMS3849DJCK2039ZMSK0001","SJDK3849CKMS3849DJCK2039ZMSK0002"));
    assertEquals(data.size(), 2);
   
    User user = userDao.get("SJDK3849CKMS3849DJCK2039ZMSK0001");
    assertEquals(user.getLoginName(), "maurice");
   
    data = userDao.get(new String[] {"SJDK3849CKMS3849DJCK2039ZMSK0001","SJDK3849CKMS3849DJCK2039ZMSK0002"});
    assertEquals(data.size(), 2);
   
  }

  @Test
  public void testLoad() {
    User user = userDao.load("SJDK3849CKMS3849DJCK2039ZMSK0001");
    assertEquals(user.getLoginName(), "maurice");
  }

  @Test
  public void testGetAll() {
    List<User> data = userDao.getAll();
    assertEquals(data.size(), 8);
   
    data = userDao.getAll(Order.asc("loginName"),Order.desc("realName"));
    assertEquals(data.size(), 8);
    assertEquals(data.get(0).getLoginName(), "admin");
  }

  @Test
  public void testFindByQuery() {
    List<User> user = Lists.newArrayList();
   
    user = userDao.findByQuery("from User u where u.id=?", "SJDK3849CKMS3849DJCK2039ZMSK0001");
    assertEquals(user.size(), 1);
    user = userDao.findByQuery("from User u where u.id=?1", "SJDK3849CKMS3849DJCK2039ZMSK0001");
    assertEquals(user.size(), 1);
   
    Map<String, Object> map = Maps.newHashMap();
    map.put("id", "SJDK3849CKMS3849DJCK2039ZMSK0001");
    user = userDao.findByQuery("from User u where u.id=:id", map);
    assertEquals(user.size(), 1);
    user = userDao.findByQuery("QueryUserJpa", "maurice");
    assertEquals(user.size(), 1);
    user = userDao.findByQuery("QueryUser", "maurice");
    assertEquals(user.size(), 1);
  }

  @Test
  public void testFindUniqueByQuery() {
   
    User user = new User();
   
    user = userDao.findUniqueByQuery("from User u where u.id=?", "SJDK3849CKMS3849DJCK2039ZMSK0001");
    assertEquals(user.getLoginName(), "maurice");
    user = userDao.findUniqueByQuery("from User u where u.id=?1", "SJDK3849CKMS3849DJCK2039ZMSK0001");
    assertEquals(user.getLoginName(), "maurice");
   
    Map<String, Object> map = Maps.newHashMap();
    map.put("id", "SJDK3849CKMS3849DJCK2039ZMSK0001");
    user = userDao.findUniqueByQuery("from User u where u.id=:id", map);
    assertEquals(user.getLoginName(), "maurice");
    user = userDao.findUniqueByQuery("QueryUserJpa", "maurice");
    assertEquals(user.getLoginName(), "maurice");
    user = userDao.findUniqueByQuery("QueryUser", "maurice");
    assertEquals(user.getLoginName(), "maurice");
  }

  @Test
  public void testDistinctQuery() {
    List<User> data = Lists.newArrayList();
   
    data = userDao.distinct("select ml from " +
        "User u left join u.roleList rl " +
        "left join rl.menuList ml " +
        "where u.id=? and u.state=?","SJDK3849CKMS3849DJCK2039ZMSK0001",1);
    assertEquals(data.size(), 4);
   
    data = userDao.distinct("select ml from " +
        "User u left join u.roleList rl " +
        "left join rl.menuList ml " +
        "where u.id=?1 and u.state=?2","SJDK3849CKMS3849DJCK2039ZMSK0001",1);
    assertEquals(data.size(), 4);
   
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("id", "SJDK3849CKMS3849DJCK2039ZMSK0001");
    map.put("state", 1);
   
    data = userDao.distinct("select ml from " +
        "User u left join u.roleList rl " +
        "left join rl.menuList ml " +
        "where u.id=:id and u.state=:state","SJDK3849CKMS3849DJCK2039ZMSK0001",1);
    assertEquals(data.size(), 4);
   
    data = userDao.distinct("select ml from " +
        "User u left join u.roleList rl " +
        "left join rl.menuList ml " +
        "where u.id=:id and u.state=:state","SJDK3849CKMS3849DJCK2039ZMSK0001",1);
    assertEquals(data.size(), 4);
   
    data = userDao.distinct("QueryUserMenuJpa","SJDK3849CKMS3849DJCK2039ZMSK0001",1);
    assertEquals(data.size(), 4);
   
    data = userDao.distinct("QueryUserMenu","SJDK3849CKMS3849DJCK2039ZMSK0001",1);
    assertEquals(data.size(), 4);
  }

  @Test
  public void testExecuteUpdate() {
    userDao.executeUpdate("update User u set u.password=?,u.state=? where u.id=?", "123456",2,"SJDK3849CKMS3849DJCK2039ZMSK0001");
    assertEquals(userDao.load("SJDK3849CKMS3849DJCK2039ZMSK0001").getPassword(), "123456");
    sessionFactory.getCurrentSession().clear();
   
    userDao.executeUpdate("update User u set u.password=?1,u.state=?2 where u.id=?3", "23456",2,"SJDK3849CKMS3849DJCK2039ZMSK0001");
    assertEquals(userDao.load("SJDK3849CKMS3849DJCK2039ZMSK0001").getPassword(), "23456");
    sessionFactory.getCurrentSession().clear();
   
    Map<String, Object> map = Maps.newHashMap();
    map.put("password", "34567");
    map.put("state", 2);
    map.put("id", "SJDK3849CKMS3849DJCK2039ZMSK0001");
   
    userDao.executeUpdate("update User u set u.password=:password,u.state=:state where u.id=:id",map);
    assertEquals(userDao.load("SJDK3849CKMS3849DJCK2039ZMSK0001").getPassword(), "34567");
   
  }
}
TOP

Related Classes of com.github.dactiv.orm.test.hibernate.TestBasicHibernateDao

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.