NutzDao

 2022-07-19    0 条评论    9824 浏览

框架

NutzDao支持的所有注解

注解名称说明注解路径
@Id数值主键@see JDoc: org.nutz.dao.entity.annotation.Id
@Name字符主键@see JDoc: org.nutz.dao.entity.annotation.Name
@PK复合主键@see JDoc: org.nutz.dao.entity.annotation.PK
@Many一对多映射@see JDoc: org.nutz.dao.entity.annotation.Many
@ManyMany多对多映射@see JDoc: org.nutz.dao.entity.annotation.ManyMany
@One一对一映射@see JDoc: org.nutz.dao.entity.annotation.One
@Prev自动设置@see JDoc: org.nutz.dao.entity.annotation.Prev
@Next自动获取@see JDoc: org.nutz.dao.entity.annotation.Next
@Readonly只读声明@see JDoc: org.nutz.dao.entity.annotation.Readonly
@SQL字段SQL宏@see JDoc: org.nutz.dao.entity.annotation.SQL
@Table表名@see JDoc: org.nutz.dao.entity.annotation.Table
@View视图名@see JDoc: org.nutz.dao.entity.annotation.View
@TableMeta表设置@see JDoc: org.nutz.dao.entity.annotation.TableMeta
@TableIndexes表索引@see JDoc: org.nutz.dao.entity.annotation.TableIndexes
@Index具体的索引内容@see JDoc: org.nutz.dao.entity.annotation.Index
@Comment表或者字段的注释@see JDoc: org.nutz.dao.entity.annotation.Comment
@PrevInsert表或者字段的注释@see JDoc: org.nutz.dao.entity.annotation.PrevInsert
@PrevUpdate表或者字段的注释@see JDoc: org.nutz.dao.entity.annotation.PrevUpdate
@PrevDelete表或者字段的注释@see JDoc: org.nutz.dao.entity.annotation.PrevDelete

构建Dao实体

@IocBean(name = "TestDao", fields = {"dataSource"})
public class TestDao extends NutDao {
	...
}

引入Dao

@Inject
TestDao testDao;

查询

fetch查询

ISTMOrder order = testDao.fetch(ISTMOrder.class, id);

where条件查询

Cnd cnd = Cnd.where("id","=",111);
List<ISTMOrder> list = testDao.query(ISTMOrder.class, cnd );

and、or查询

public static Cnd createAndOr(Cnd cnd, Map<String,Object> map) {
	SqlExpressionGroup group = new SqlExpressionGroup();
	for (String s : map.keySet()) {
		SqlExpression sqlExpression = Cnd.exp(s, "like", map.get(s));
		group.or(sqlExpression);
	}
	cnd.and(group);
	return cnd;
}

分页查询(不分页默认查全部)

List<ISTMOrder> list = istmDao.query(ISTMOrder.class, null, istmDao.createPager(page, size));

分页条件查询

Cnd cnd = Cnd.where("id","=",111);
List<ISTMOrder> list = istmDao.query(ISTMOrder.class, cnd , istmDao.createPager(page, size));

组合条件查询

Cnd cnd = Cnd.where("id","=",111);
cnd.and("name","=","二狗");
List<ISTMOrder> list = istmDao.query(ISTMOrder.class, cnd );

条件排序查询

Cnd cnd = Cnd.where("id","=",111);
List<ISTMOrder> list = istmDao.query(ISTMOrder.class, cnd.desc("create_time"));

注意,不能使用cnd.orderBy().desc的形式,.orderBy()方法会创建新的Cnd对象,导致查询条件丢失 Cnd.NEW();与Cnd.orderBy();底层都是返回了新的实例化Cnd对象, 所以Cnd.NEW().desc(xxx)与Cnd.orderBy().desc(xxx)效果相同。

like条件查询

Cnd cnd = Cnd.where("name","like","%p%");
List<ISTMOrder> list = istmDao.query(ISTMOrder.class, cnd.desc("create_time"));

通过Map动态赋值查询条件

Cnd cnd = Cnd.NEW();
if (!params.isEmpty()) {
    for (String s : params.keySet()) {
        cnd.and(s, "=", params.get(s));
    }
}

不带有实体类查询

Record是Map的一个实现类

List<Record> record = dao.query("table", null);

修改

更新 Update

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

删除

直接删对象

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);

批量删除

清除所有记录
dao.clear(Person.class); //还是那句,慎用
按条件清除
dao.clear(Person.class,Cnd.where("id", ">", 35));

插入

实体插入

Blog blog = new Blog();
blog.setContent("内容");
blogDao.insert(blog);

批量插入

List<Blog> list = new ArrayList<>();
Blog blog = new Blog();
blog.setContent("内容");
list.add(blog)
blogDao.insert(list);