NutzCN Logo
问答 拼接sql返回对象的时候非数据库字段怎么返回
发布于 240天前 作者 qq_64f81159 180 次浏览 复制 上一个帖子 下一个帖子
标签:

比如要封装一个对象,有的字段在数据库中,有的字段不在数据库中,比如sys_area表中 size并不在数据库中 ,只是前台需要这个属性,如果下面这样写是不是不能把area封装到对象中?另外如果拼接sql的时候 要根据条件拼接,比如name不为空的时候才拼接,下面这样用占位符意外还能有其他方式 ,感觉不优雅。。

public List<Area> listAreaByParentCode(String parentId) {
		String name = null;
		Sql sql = Sqls.create("SELECT a.id,a.areaCode,a.parentId,a.name,a.layer,a.orderNum,a.disabled,(SELECT count(*) FROM sys_area p where p.parentId=a.id) as size,a.remark FROM sys_area a $cnd1 $cnd2 $cnd3");
		sql.setVar("cnd1", Cnd.where("a.parentId", "=", parentId));
		if(!Strings.isBlank(name)){
			sql.setVar("cnd2", Cnd.NEW().and("a.name", "like", "%"+name+"%"));
		}
		sql.setVar("cnd3", Cnd.NEW().orderBy("a.orderNum", "ASC"));
		sql.setCallback(Sqls.callback.entities());
		sql.setEntity(this.dao().getEntity(Area.class));
		this.dao().execute(sql);
		List<Area> list = sql.getList(Area.class);
		return list;
	}
5 回复

用records或者maps回调取回全部数据

条件拼接sql除了占位符还能有其他方式吗!

用@参数名?

若没有理解错的话,LZ的意思是想把size也写到Area对象中,这个是支持的,只要在Area对象中增加一个size属性,同时使用Transient注解下,就可实现你要的效果。

加@Readonly也行

添加回复
请先登陆
回到顶部