致謝:
開源地址:
更新內容
1、增加DTO和POJO互轉工具,在SqlToyCRUDService、SqlToyLazyDao、SqlToySupportDao中都可調用
/** * @TODO 實現VO和POJO之間屬性值的複製,如名稱不一致,在VO中欄位上使用@SqlToyFieldAlias 註解來處理 * @param <T> * @param source * @param resultType * @return * @throws Exception */public <T extends Serializable> T convertType(Serializable source, Class<T> resultType) throws Exception;public <T extends Serializable> List<T> convertType(List<Serializable> sourceList, Class<T> resultType) throws Exception;
2、優化代碼中Translate內部定義,增加內部類,減少開發調用時出現過多get方法,對選擇形成幹擾
快速了解 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"); //delete\deleteAll\updateAll\loadAll 等等不一一寫完
//單表對象查詢,直接傳參模式List<StaffInfoVO> staffVOs = sqlToyLazyDao.findEntity(StaffInfoVO.class, EntityQuery.create().where("#[staffName like ?] #[ and status=?]").values("陳", 1).lock(LockMode.UPGRADE) .orderBy("staffName").orderByDesc("createTime"));//單表查詢,對象傳參模式List<StaffInfoVO> 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<T> voClass)//嫌棄上面的格式化傳參也可以使用這樣鏈式查詢sqlToyLazyDao.findByQuery(new QueryExecutor("sqltoy_order_search").names("orderId", "authedOrganIds") .values(null, authedOrgans).resultType(DeviceOrderInfoVO.class));
我們對比一下mybatis的實現(很簡單的sql寫的如此讓人不願意寫!):