本篇汇总 O2OA 平台接口代码编写中的常见疑惑,先说明接口方法里数据库会话容器的获取与释放写法,建议采用自动关闭的方式避免连接占用,常见误区是异常分支漏掉关闭动作;再解释接口入参与出参各自对应的包装对象,以及权限标识中服务器、管理员、普通用户的范围差别。末尾补充查询条件的组织方式与参考资料入口,提醒按业务边界收紧权限,遇到拿不准的写法先查社区既有记录。
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
ActionResult<List> result = new ActionResult<>();
Wi wi = this.convertToWrapIn(jsonElement, Wi.class);
List ids = new ArrayList<>();
EntityManager em = emc.get(RecordReadLog.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery(String.class);
Root root = cq.from(RecordReadLog.class);
Predicate p = cb.equal(root.get(RecordReadLog_.idRecord),wi.getIdRecord().trim());
if(wi.getStartTime() != null) {
p = cb.and(p, cb.greaterThanOrEqualTo(root.get(RecordReadLog_.createTime), wi.getStartTime()));
}
if(wi.getEndTime()!= null) {
p = cb.and(p, cb.lessThanOrEqualTo(root.get(RecordReadLog_.createTime), wi.getEndTime()));
}
Order order;
String sortField = wi.getSortField();
String sortType = wi.getSortType();
if(!StringUtils.isBlank(sortField)) {
if(sortType.equalsIgnoreCase("asc")) {
order = cb.asc(root.get(sortField));
}else {
order = cb.desc(root.get(sortField));
}
}else {
order = cb.desc(root.get("createTime"));
}
cq.select(root.get(RecordReadLog_.id)).where(p).orderBy(order);
TypedQuery<String> typedQuery = em.createQuery(cq);
int pageIndex = (page-1)*size;
int pageSize = size;
typedQuery.setFirstResult(pageIndex);
typedQuery.setMaxResults(pageSize);
ids = typedQuery.getResultList();
TypedQuery<String> tqCount = em.createQuery( cq.select(root.get(RecordReadLog_.id)).where(p));
List<String> allid = tqCount.getResultList();
Long tpsize = (long) allid.size();
CriteriaQuery<RecordReadLog> cqRecord = cb.createQuery(RecordReadLog.class);
Predicate pRecord = cb.isMember(root.get(RecordReadLog_.id), cb.literal(ids));
Root<RecordReadLog> rootRecord = cqRecord.from(RecordReadLog.class);
cqRecord.select(rootRecord).where(pRecord).orderBy(order);
List<RecordReadLog> os = em.createQuery(cqRecord).getResultList();
List<Wo> wos = Wo.copier.copy(os);
result.setData(wos);
result.setCount(tpsize);
return result;
}Anonymous:匿名访问权限
Cipher:应该用于服务器之间的访问权限
Manager:管理员访问权限
User:普通用户放权权限
wi:接收接口输入参数的对象
wo:接口返回参数的对象
参考:https://www.w3cschool.cn/java/jpa-entitymanager.html
相关内容