use of org.nutz.dao.entity.Record in project nutz by nutzam.
the class SimpleDaoTest method test_simple_fetch_record.
@Test
public void test_simple_fetch_record() {
Pet pet = Pet.create("abc");
long now = System.currentTimeMillis();
pet.setBirthday(Castors.me().castTo(now / 1000 * 1000, Timestamp.class));
dao.insert(pet);
List<Record> pets = dao.query("t_pet", null, null);
assertEquals(1, pets.size());
assertEquals("abc", pets.get(0).getString("name"));
assertEquals(now / 1000, pets.get(0).getTimestamp("birthday").getTime() / 1000);
}
use of org.nutz.dao.entity.Record in project nutz by nutzam.
the class SimpleDaoTest method test_record_treemap.
@Test
public void test_record_treemap() {
TreeMap<Record, String> map = new TreeMap<Record, String>();
map.put(new Record(), "abc");
map.put(new Record(), "abc");
}
use of org.nutz.dao.entity.Record in project nutz by nutzam.
the class DaoUpTest method test_without_pojo.
/**
* 1. 不使用pojo类,直接操作数据库, Chain插入,查询结果为Record(一个实现了Map接口的增强版LinkedHashMap).<p/>
* 在nutz 1.b.38之后,均可使用类Map对象进行CRUD.<p/>
* Chain代表插入/更新时的目标值K-V<p/>
* Record是查询的返回类型,增强版的忽略大小写的LinkedHaskMap
*/
@Test
public // 提醒一句,下面的assert均为Junit的方法
void test_without_pojo() {
// 首先,得到Dao实例, 因为Junit的规则就是setUp先执行,所以Dao已经初始化好了
// me()是public静态方法,意味着你可以从任何代码访问到哦
Dao dao = DaoUp.me().dao();
// 弱弱地定义个表名方便操作
String tableName = "tx_daoup_user";
// 看看有无tx_text_user表,有的话就删掉好了
if (dao.exists(tableName)) {
// 没有openSession之类的事
// 生产环境可别乱调用,死人了别找我
dao.drop(tableName);
}
// 好了,现在开始建表, 其中的Sqls是Nutz中的自定义SQL的帮助类, 具体用法后面还有讲解
// 为了最大兼容各种数据库,这里就建3个属性,不自增,没默认值
// 如果您测试的数据库不支持下面的建表sql,自己改一下吧,呵呵.
dao.execute(Sqls.create("create table " + tableName + " (id int, nm varchar(50), age int)"));
// 首先,插入4条记录, 不抛异常就是执行成功(Dao接口的方法均如此)
dao.insert(tableName, Chain.make("id", 1).add("nm", "wendal").add("age", 30));
dao.insert(tableName, Chain.make("id", 2).add("nm", "zozoh").add("age", 60));
dao.insert(tableName, Chain.make("id", 3).add("nm", "pangwu").add("age", 20));
dao.insert(tableName, Chain.make("id", 4).add("nm", "ywjno").add("age", 10));
// 我们统计一下是不是真的4条呢?
//count方法可以查Pojo所代表的表,也可以直接写表名
assertEquals(4, dao.count(tableName));
// 类似的方法还有fetch/query/clear等
// ------------------
// --------- query操作
// 现在查一下小于25,且按nm降序
// Cnd是最常用的查询构建类
List<Record> users = dao.query(tableName, Cnd.where("age", "<", 25).desc("nm"));
// 理应是2个人
// 忍不住提醒一句啊, 统计总数用dao.count, 因为真的有人这样写: return dao.query(XXX.class, Cnd....).size();
assertEquals(2, users.size());
// 因为是倒序,那第一个就是ywjno,第二个是pangwu.
// 注意一下Record里面的key都是自动转为小写的,但值不会,这个可以放心.
// ywjno就是冬日温泉,nutz的其中一位commiter
assertEquals("ywjno", users.get(0).getString("nm"));
// pangwu,胖五也, 也是commiter
assertEquals("pangwu", users.get(1).getString("nm"));
// 查大于15岁,且第二页,每页2条记录, 注意页数是从1开始的,若填了0,就不分页,全部记录
users = dao.query(tableName, Cnd.where("age", ">", 15), dao.createPager(2, 2));
// 因为大于15岁的只有3个人,又分页,所以结果应该是只有第3条记录
assertEquals(1, users.size());
// ^|_|^ ...
assertEquals("pangwu", users.get(0).get("nm"));
// --------------------------
// --------- update和fetch操作
//现在, 我们更新wendal的年龄,使其变成26,啊啊啊
dao.update(tableName, Chain.make("age", 26), Cnd.where("nm", "=", "wendal"));
// Chain是链式的可以继续接下去哦
// Chain.make(....).add(...).add(...)
// 或者从一个Map/Pojo转化而来 Chain.from(xxxMap) Chain.from(obj)
// 检查一下wendal的年龄,应该是26
assertEquals(26, dao.fetch(tableName, Cnd.where("nm", "=", "wendal")).getInt("age"));
// 然后让pangwu老一岁,注意是用makeSpecial,而且值是特殊的+1
dao.update(tableName, Chain.makeSpecial("age", "+1"), Cnd.where("nm", "=", "pangwu"));
// 同样要检查一下pangwu的年龄是不是变成 20+1=21岁了
assertEquals(21, dao.fetch(tableName, Cnd.where("nm", "=", "pangwu")).getInt("age"));
// 再大发慈悲,让zozoh年轻10岁吧.
dao.update(tableName, Chain.makeSpecial("age", "age-10"), Cnd.where("nm", "=", "zozoh"));
// 同样要检查一下zozoh的年龄是不是变成 60-10=50岁了
assertEquals(50, dao.fetch(tableName, Cnd.where("nm", "=", "zozoh")).getInt("age"));
// 为了表达我的博爱,全部人减5岁!!
// 提示一下, makeSpecial属于直接拼入sql, 请留意注入问题.
dao.update(tableName, Chain.makeSpecial("age", "age-5"), null);
// ----------------------
// 最后是delete和clear操作,然而delete是针对单个pojo对象删除的,所以这里只演示clear
// 首先,我们删掉zozoh,原因嘛, 没你帅/漂亮.
dao.clear(tableName, Cnd.where("nm", "=", "zozoh"));
// 应剩下3条记录
assertEquals(3, dao.count(tableName));
// 现在再干掉年龄少于20岁的
dao.clear(tableName, Cnd.where("age", "<", 20));
// 应剩下1条记录
assertEquals(1, dao.count(tableName));
// 最后,全部杀光, 啊啊啊, 减少人口啊啊啊...
dao.clear(tableName);
// 应剩下0条记录, 没人了...
assertEquals(0, dao.count(tableName));
// 最后的最后,人在表在, 人没了,表也干掉
// 三思三思...
dao.drop(tableName);
}
use of org.nutz.dao.entity.Record in project nutz by nutzam.
the class GenericTest method receiveJsonRequest4Record.
@Test
@SuppressWarnings("unchecked")
public void receiveJsonRequest4Record() {
Record record = new Record();
record.put("a", "a");
record.put("b", 1);
JsonRequest<Record> request = new JsonRequest<Record>();
request.setBody(record);
request.setLoginName("user1");
request.setPassword("1234");
request.setVersion("1101");
request.setUserType(JsonRequest.USER_TYPE_EMPLOYEE);
String json = Json.toJson(request);
// System.out.println(json);
request = (JsonRequest<Record>) Json.fromJson(new NutType(request.getClass(), record.getClass()), json);
// System.out.println(request.getBody().getString("a"));
// System.out.println(request.getBody().getInt("b"));
}
use of org.nutz.dao.entity.Record in project nutz by nutzam.
the class SqlTemplateTest method testQueryForRecord.
@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"));
}
Aggregations