开源地址:
更新内容(感谢众多网友的反馈,使得一些边缘场景得以巩固)
1、增强group_concat的算法实现link功能,支持多列场景
2、优化postgresql9.4 版本的saveOrUpdate功能(9.4 不支持insert table AS T1别名模式,剔除别名),推荐9.5+版本
3、增强loadBySql、load(entity)对象类型处理,避免new VO(){{setId("");}} 双大括号极端特殊场景下定义对象导致类型获取错误。
4、增强sql中参数:param判断逻辑,适配postgresql带有json形式的查询场景::jsonb 这种对条件参数的干扰
5、translateManager 简化了缓存更新、清除接口(之前是要再调一层),便于用户扩展来完成缓存的近实时更新
6、quickvo增强支持JSONB等类型
快速了解 sqltoy-orm:
简要举例介绍(因篇幅问题部分举例):
@Autowired
private SqlToyCRUDService sqlToyCRUDService;
//基于对象保存
sqlToyCRUDService.save(staffInfo);
//基于对象更新(字段值为null的不会参与变更)
sqlToyCRUDService.update(staffInfo);
//深度变更,全部字段都参与变更
sqlToyCRUDService.updateDeeply(staffInfo);
//基于对象更新(制定强制修改的字段)
sqlToyCRUDService.update(staffInfo,new String[]{"staffName","onDuty"});
//基于对象更新
sqlToyCRUDService.saveOrUpdate(staffInfo);
//加载对象
sqlToyCRUDService.load(new StaffInfoVO("S190715009"));
//加锁获取对象
sqlToyCRUDService.load(new StaffInfoVO("S190715009"),LockMode.UPGRADE);
//判断对象是否唯一
sqlToyCRUDService.isUnique(staffInfo, "staffCode");
//deletedeleteAllupdateAllloadAll 等等不一一写完
//单表对象查询,直接传参模式
List staffVOs = sqlToyLazyDao.findEntity(StaffInfoVO.class,
EntityQuery.create().where("#[staffName like ?] #[ and status=?]").values("陈", 1).lock(LockMode.UPGRADE)
.orderBy("staffName").orderByDesc("createTime"));
//单表查询,对象传参模式
List staffVOs = sqlToyLazyDao.findEntity(StaffInfoVO.class,
EntityQuery.create().where("#[staffName like :staffName] #[ and status=:status]")
.values(new StaffInfoVO().setStatus(1).setEmail("test3@aliyun.com")));
//代码中链式查询并删除
Long deleteCount = sqlToyLazyDao.deleteByQuery(StaffInfoVO.class,
EntityQuery.create().where("status=:status").values(new StaffInfoVO().setStatus(1)));
//链式变更
Long updateCount = sqlToyLazyDao.updateByQuery(StaffInfoVO.class,
EntityUpdate.create().set("staffName", "张三").where("staffName like ? and status=?").values("陈", 1));
//sqltoy统一的规则就是直接传递sql语句或者对应的sqlId,并不是说sql只能写在xml中(推荐但不绝对)
findBySql(final String sqlOrSqlId, final String[] paramsNamed, final Object[] paramsValue,
final Class voClass)
//嫌弃上面的格式化传参也可以使用这样链式查询
sqlToyLazyDao.findByQuery(new QueryExecutor("sqltoy_order_search").names("orderId", "authedOrganIds")
.values(null, authedOrgans).resultType(DeviceOrderInfoVO.class));
我们对比一下mybatis的实现(很简单的sql写的如此让人不愿意写!):
// 使用并行查询同时执行2个sql,条件参数是2个查询的合集
String[] paramNames = new String[] { "userId", "defaultRoles", "deployId", "authObjType" };
Object[] paramValues = new Object[] { userId, defaultRoles, DEPLOY_ID,GROUP };
List> list = super.parallQuery(
Arrays.asList(ParallQuery.create().sql("webframe_searchAllModuleMenus").resultType(TreeModel.class),
ParallQuery.create().sql("webframe_searchAllUserReports").resultType(TreeModel.class)),
paramNames, paramValues);
页面更新:2024-05-18
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号