DAO接口的基本操作

来源:互联网 发布:音乐截取合并软件 编辑:程序博客网 时间:2024/05/16 14:25

  • 我们假设已经创建了实体类 com.zzh.demo.Person 和实体表 t_person

创建数据表

为 Pet 创建数据表,如果数据表存在,则自动忽略

//一般我们都这样写dao.create(Pet.class, false);

删除数据表

删除 Pet 的数据表

dao.drop(Pet.class);//全部删掉哦,没条件的,慎用!!

插入 Insert

Person p = new Person();p.setName("Peter");p.setAge(22);dao.insert(p);System.out.println(p.getId());

Person 对象的 Id 被自动更新

取得 Fetch

根据名称获取 (如果你的实体声明了 @Name 字段, 字符型主键,或者带唯一性索引的字段)

Person p = dao.fetch(Person.class,"Peter");System.out.println(p.getId());

根据 ID 获取 (如果你的实体声明了 @Id 字段, 数值型主键)

Person p = dao.fetch(Person.class,2);System.out.println(p.getName());

@Id和@Name可以同时存在于一个Pojo类内,但不允许标注在同一个属性,毕竟不可以同时是数值型主键又是字符型主键

更新 Update

Person p = dao.fetch(Person.class,2);p.setAge(32);dao.update(p)dao.update(p, "^age$"); //仅更新age,参数是个正则表达式// 注意, p至少带@Id/@Name/@Pk中的一种dao.update(list, "^age$"); //更新一个集合也是可以的

更新多条

// 根据特定条件更新特定字段dao.update(Person.class, Chain.make("dead",true), Cnd.where("age",">",150));// 常用的+1更新dao.update(Person.class, Chain.makeSpecial("age", "+1").add("location", "yvr"), Cnd.where("name","=", "wendal"));

删除 Delete

直接删对象

dao.delete(pet); // Pet必须带@Id/@Name/@Pk中的一种或多种

根据名称删除 (如果你的实体声明了 @Name 字段). 批量删除请用clear

dao.delete(Person.class,"Peter");

根据 ID 删除 (如果你的实体声明了 @Id 字段)

dao.delete(Person.class,2);

直接删列表. 如果要按条件删,用dao.clear

dao.delete(list);

查询 Query

查询全部记录

List<Person> people = dao.query(Person.class, null);

按条件查询

List<Person> people = dao.query(Person.class, Cnd.where("name", "like", "P%"));
  • Cnd 类的全名是 org.nutz.dao.Cnd
    • 它主要是用来快速替你建立一个 org.nutz.dao.Condition 接口的实现类
    • where() 函数 第一个参数是字段名,要和 Java 类里面的字段名相同。
    • where() 函数 第二个参数遵循 SQL 的标准,可以是 ><>=<= 等等
    • 提供了一个 wrap 函数,你可以直接写 SQL 的条件
  • 如果你愿意,你完全可以自己实现一个 Condition,来做更复杂灵活的判断
  • 关于更多的查询条件的说明,请参看 复杂条件

分页查询

List<Person> people = dao.query(Person.class, Cnd.where("age", ">", 18), dao.createPager(2, 4));
  • dao.createPager 第一个参数是第几页,第二参数是一页有多少条记录
  • 关于分页更多的说明,请参看 分页查询

清除 Clear

清除所有记录

dao.clear(Person.class); //还是那句,慎用

按条件清除

dao.clear(Person.class,Cnd.where("id", ">", 35));
  • 关于更多的清除条件的说明,请参看 复杂条件

插入和更新集合

无论是插入 (Insert) 还是更新 (Update),你传入的对象都可以不仅仅是一个 POJO,你可以传入:

  • 集合 ( Collection<?> )
  • Map<?,?>
  • 数组 ( T[] )

Nutz.Dao 会自动替你拆包,对集合成员依次执行相应操作。 对于 Map,它会迭代每一个值。

集合操作(func)

整数类型. 例如调用sum

dao.func(Person.class, "sum", "age");

其他类型

dao.func2(Person.class, "min", "price");

自动建表

Dao接口有一个create方法,通过它可以让nutz为你建好数据库表

dao.create(Pet.class, false);

第一个参数是Pojo类, 第二个参数是如果表存在,是不是先删再重新建,否则就是保持原样

字段的详细定义,例如定义长度

@ColDefine(width=1024)private String data;

强制自定义字段类型

@ColDefine(customType="TEXT", type=ColType.VARCHAR)private String fu;

添加索引, 类级注解

@TableIndexes({@Index(name="orderid_userid", fields={"orderId", "userId"})})public class UserOrder {    private long id;    private long orderId;    private long userId;    //... 其他属性}

局限性

  • 不生成外键,我们也不推荐用外键
  • 只能解决一般建表需求,复制的表结构请通过自定义sql完成

0 0