package org.nutz.dao.test.sqls;
import static org.junit.Assert.*;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import org.nutz.dao.entity.Record;
import org.nutz.dao.impl.sql.SqlTemplate;
import org.nutz.dao.test.DaoCase;
import org.nutz.dao.test.meta.Pet;
import org.nutz.lang.Lang;
public class SqlTemplateTest extends DaoCase {
private SqlTemplate sqlTemplate;
@Override
protected void before() {
if (sqlTemplate == null)
sqlTemplate = new SqlTemplate(dao);
}
@Test
public void testUpdate() {
pojos.initPet();
dao.insert(Pet.create(1));
String sql = "UPDATE $table SET name=@name";
Map<String, Object> vars = new HashMap<String, Object>();
vars.put("table", "t_pet");
Map<String, Object> param = new HashMap<String, Object>();
param.put("name", "Peter");
sqlTemplate.update(sql, vars, param);
List<Pet> pets = dao.query(Pet.class, null);
assertEquals("Peter", pets.get(0).getName());
}
@Test
public void testBatchUpdate() {
pojos.initPet();
List<Map<String, Object>> batchValues = new ArrayList<Map<String, Object>>();
for (int i = 0; i < 5; i++) {
Map<String, Object> map = Lang.map(String.format("'name':'Pet_%d'", i));
batchValues.add(map);
}
String sql = "INSERT INTO t_pet(name) VALUES(@name)";
sqlTemplate.batchUpdate(sql, null, batchValues);
assertEquals(5, sqlTemplate.queryForInt("SELECT COUNT(*) FROM t_pet", null));
}
@Test
public void testQueryForInt() {
pojos.initPet();
dao.insert(Pet.create(1));
int petCount = sqlTemplate.queryForInt("SELECT COUNT(*) FROM t_pet", null);
assertEquals(1, petCount);
petCount = sqlTemplate.queryForInt("SELECT COUNT(*) FROM t_pet WHERE 1=2 ", null);
assertEquals(0, petCount);
}
@Test
public void testQueryForLong() {
pojos.initPet();
dao.insert(Pet.create(1));
long petCount = sqlTemplate.queryForLong("SELECT COUNT(*) FROM t_pet", null);
assertEquals(1, petCount);
petCount = sqlTemplate.queryForLong("SELECT COUNT(*) FROM t_pet WHERE 1=2 ", null);
assertEquals(0, petCount);
}
@Test
public void testQueryForObjectClassOfT() {
pojos.initPet();
Pet pet = Pet.create("papa");
Timestamp createTime = new Timestamp(System.currentTimeMillis());
pet.setBirthday(createTime);
dao.insert(pet);
String sql = "SELECT birthday FROM t_pet";
Timestamp dbCreateTime = sqlTemplate.queryForObject(sql, null, Timestamp.class);
assertEquals(createTime, dbCreateTime);
String sql1 = "SELECT birthday FROM t_pet WHERE 1=2";
dbCreateTime = sqlTemplate.queryForObject(sql1, null, Timestamp.class);
assertTrue(dbCreateTime == null);
}
@Test
public void testQueryForObjectEntityOfT() {
pojos.initPet();
Pet pet = Pet.create("papa");
dao.insert(pet);
String sql = "SELECT * FROM t_pet";
Pet p2 = sqlTemplate.queryForObject(sql, null, dao.getEntity(Pet.class));
assertEquals(pet.getName(), p2.getName());
String sql1 = "SELECT * FROM t_pet WHERE 1=2";
Pet p3 = sqlTemplate.queryForObject(sql1, null, dao.getEntity(Pet.class));
assertTrue(p3 == null);
}
@Test
public void testQueryForRecord() {
pojos.initPet();
Pet pet = Pet.create("papa");
dao.insert(pet);
String sql = "SELECT name,age FROM $table WHERE id = @id";
Map<String, Object> vars = new HashMap<String, Object>();
vars.put("table", "t_pet");
Map<String, Object> params = new HashMap<String, Object>();
params.put("id", pet.getId());
Record re = sqlTemplate.queryForRecord(sql, vars, params);
assertEquals(pet.getName(), re.getString("name"));
}
@Test
public void testQuery() {
pojos.initPet();
dao.insert(Pet.create(4));
String sql = "SELECT * FROM t_pet";
List<Pet> pets = sqlTemplate.query(sql, null, dao.getEntity(Pet.class));
assertEquals(4, pets.size());
assertEquals("pet_00", pets.get(0).getName());
}
@Test
public void testQueryForList() {
pojos.initPet();
dao.insert(Pet.create(4));
String sql = "SELECT name FROM t_pet";
List<String> names = sqlTemplate.queryForList(sql, null, null, String.class);
assertTrue(names.contains("pet_00"));
String sql1 = "SELECT name FROM t_pet WHERE 1=2";
names = sqlTemplate.queryForList(sql1, null, null, String.class);
assertTrue(names.isEmpty());
}
@Test
public void testQueryRecords() {
pojos.initPet();
dao.insert(Pet.create(4));
String sql = "SELECT name FROM t_pet";
List<Record> res = sqlTemplate.queryRecords(sql, null, null);
assertEquals("pet_00", res.get(0).getString("name"));
}
@Test
public void testSqlInExp() {
pojos.initPet();
dao.insert(Pet.create(4));
String sql = "SELECT name FROM t_pet WHERE id IN (@ids)";
Map<String, Object> params = new HashMap<String, Object>();
params.put("ids", Lang.array(1, 2, 3, 4));
List<String> names = sqlTemplate.queryForList(sql, null, params, String.class);
assertTrue(names.size() == 4);
assertTrue(names.contains("pet_00"));
params = new HashMap<String, Object>();
params.put("ids", Lang.list(1, 2, 3, 4));
names = sqlTemplate.queryForList(sql, null, params, String.class);
assertTrue(names.size() == 4);
assertTrue(names.contains("pet_00"));
}
}