diff --git a/README.md b/README.md index 9d40586..e04498b 100644 --- a/README.md +++ b/README.md @@ -148,12 +148,11 @@ 连表构建API (QB.X) 25. from(joinSql) //简单的连表SQL,不支持LEFT JOIN ON 多条件; 多条件,请用API[28] - 26. fromBuilder.of(Order.class).alia("o") //连表里的主表, API: .fromX(FromX fromX) - 27. fromBuilder.JOIN(LEFT).of(OrderItem.class).alia("i") + 26. fromBuilder.of(Order.class,"o") //连表里的主表, API: .fromX(FromX fromX) + 27. fromBuilder.JOIN(LEFT).of(OrderItem.class,"i") .on("i.orderId = o.id", 28 on -> on.gt(...)) //LEFT JOIN等, 更多条件 - 29. fromBuilder.sub(....) // INNER JOIN (....) i 有限支持clickhouse等数据库 - .alia("i").JOIN("ANY INNER JOIN").on(....) //fluent构建连表sql + 29. fromBuilder.sub(....,"i").JOIN("ANY INNER JOIN").on(....) //fluent构建连表sql 分页及排序API (QB | QB.X) 30. sort("o.id", Direction.DESC) diff --git a/pom.xml b/pom.xml index 3fddbce..b0f5a82 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ io.xream.sqli sqli-parent pom - 2.1.6 + 2.1.7 sqli-parent http://sqli.xream.io @@ -24,7 +24,7 @@ 17 true 1.0.0 - 2.1.6 + 2.1.7 2.13.4.2 1.7.30 @@ -33,7 +33,7 @@ scm:git:https://github.com/x-ream/sqli scm:git:https://github.com/x-ream/sqli scm:git:https://github.com/x-ream/sqli - 2.1.6 + 2.1.7 diff --git a/sqli-builder/pom.xml b/sqli-builder/pom.xml index 708f1f3..10e54f5 100644 --- a/sqli-builder/pom.xml +++ b/sqli-builder/pom.xml @@ -5,7 +5,7 @@ sqli-parent io.xream.sqli - 2.1.6 + 2.1.7 4.0.0 diff --git a/sqli-core/pom.xml b/sqli-core/pom.xml index fe6215b..997393d 100644 --- a/sqli-core/pom.xml +++ b/sqli-core/pom.xml @@ -5,7 +5,7 @@ sqli-parent io.xream.sqli - 2.1.6 + 2.1.7 4.0.0 diff --git a/sqli-core/src/main/java/io/xream/sqli/api/BaseRepository.java b/sqli-core/src/main/java/io/xream/sqli/api/BaseRepository.java index cc74658..cfea86c 100644 --- a/sqli-core/src/main/java/io/xream/sqli/api/BaseRepository.java +++ b/sqli-core/src/main/java/io/xream/sqli/api/BaseRepository.java @@ -69,7 +69,7 @@ public interface BaseRepository extends Typed { * caution: sometimes, should not use the api * */ - boolean removeRefreshCreate(RemoveRefreshCreate RemoveRrefreshCreate_of); + boolean removeRefreshCreate(RemoveRefreshCreate RemoveRefreshCreate_of); /** * @param keyOne */ @@ -88,10 +88,13 @@ public interface BaseRepository extends Typed { * * @param conditionObj */ + @Deprecated List list(T conditionObj); + @Deprecated T getOne(T conditionObj); + T getOne(Q q); /** * in API * @@ -103,9 +106,9 @@ public interface BaseRepository extends Typed { * * @param q */ - Page find(Q q); + Page find(Q q); - List list(Q q); + List list(Q q); /** * like stream, fetchSize=50, the api not fast, to avoid OOM when scheduling @@ -113,8 +116,8 @@ public interface BaseRepository extends Typed { * @param handler * @param */ - void findToHandle(Q q, RowHandler handler); + void findToHandle(Q q, RowHandler handler); - boolean exists(Q q); + boolean exists(Q q); } \ No newline at end of file diff --git a/sqli-core/src/main/java/io/xream/sqli/core/Repository.java b/sqli-core/src/main/java/io/xream/sqli/core/Repository.java index 164e326..915f837 100644 --- a/sqli-core/src/main/java/io/xream/sqli/core/Repository.java +++ b/sqli-core/src/main/java/io/xream/sqli/core/Repository.java @@ -48,6 +48,7 @@ public interface Repository extends QueryForCache { T get(KeyOne keyOne); + @Deprecated List list(Object cond); Page find(Q q); @@ -62,8 +63,11 @@ public interface Repository extends QueryForCache { boolean createBatch(List objList); + @Deprecated T getOne(T condition); + T getOne(Q q); + boolean refresh(T t); void findToHandle(Q q, RowHandler handler); diff --git a/sqli-dialect/pom.xml b/sqli-dialect/pom.xml index 044a130..6c46084 100644 --- a/sqli-dialect/pom.xml +++ b/sqli-dialect/pom.xml @@ -5,7 +5,7 @@ sqli-parent io.xream.sqli - 2.1.6 + 2.1.7 4.0.0 sqli-dialect diff --git a/sqli-repo/pom.xml b/sqli-repo/pom.xml index d412880..3c38339 100644 --- a/sqli-repo/pom.xml +++ b/sqli-repo/pom.xml @@ -5,7 +5,7 @@ sqli-parent io.xream.sqli - 2.1.6 + 2.1.7 4.0.0 diff --git a/sqli-repo/src/main/java/io/xream/sqli/repository/core/CacheableRepository.java b/sqli-repo/src/main/java/io/xream/sqli/repository/core/CacheableRepository.java index 5fe03df..3689817 100644 --- a/sqli-repo/src/main/java/io/xream/sqli/repository/core/CacheableRepository.java +++ b/sqli-repo/src/main/java/io/xream/sqli/repository/core/CacheableRepository.java @@ -48,9 +48,11 @@ public final class CacheableRepository implements Repository, NativeSupport { private Dao dao; private L2CacheResolver cacheResolver; - private CacheableRepository(){} - public static CacheableRepository newInstance(){ - if (instance == null){ + private CacheableRepository() { + } + + public static CacheableRepository newInstance() { + if (instance == null) { instance = new CacheableRepository(); return instance; } @@ -67,9 +69,9 @@ public void setCacheResolver(L2CacheResolver cacheResolver) { private boolean isCacheEnabled(Parsed parsed) { boolean b = cacheResolver.isEnabled() && !parsed.isNoCache(); - if (b){ + if (b) { SqliLoggerProxy.debug(parsed.getClzz(), "L2Cache effected"); - }else{ + } else { SqliLoggerProxy.debug(parsed.getClzz(), "L2Cache not effected"); } return b; @@ -93,7 +95,7 @@ public boolean createOrReplace(Object obj) { Class clz = obj.getClass(); Parsed parsed = Parser.get(clz); - Object id = CreateOrReplaceOptimization.tryToGetId(obj,parsed); + Object id = CreateOrReplaceOptimization.tryToGetId(obj, parsed); boolean flag = dao.createOrReplace(obj); @@ -203,7 +205,7 @@ public boolean removeIn(Keys keys) { public List listByClzz(Class clzz) { try { return this.dao.list(clzz.newInstance()); - }catch (Exception e){ + } catch (Exception e) { SqliExceptionUtil.throwRuntimeExceptionFirst(e); throw new QueryException(SqliExceptionUtil.getMessage(e)); } @@ -268,8 +270,8 @@ public List list(Q q) { } - public boolean execute(String sql, Object...objs) { - return dao.execute(sql,objs); + public boolean execute(String sql, Object... objs) { + return dao.execute(sql, objs); } @@ -342,6 +344,18 @@ public T getOne(T condition) { return cacheResolver.getOneUnderProtection(clz, condition, () -> dao.getOne(condition)); } + @Override + public T getOne(Q q) { + + Class clz = (Class) q.getClzz(); + Parsed parsed = Parser.get(clz); + + if (!isCacheEnabled(parsed)) + return dao.getOne(q); + + return cacheResolver.getOneUnderProtection(clz, q, () -> dao.getOne(q)); + } + @Override public Page> find(Q.X xq) { if (xq.isAbort()) { @@ -364,10 +378,10 @@ public List> list(Q.X xq) { } @Override - public List listPlainValue(Class clzz, Q.X xq){ + public List listPlainValue(Class clzz, Q.X xq) { if (xq.isAbort()) return new ArrayList<>(); - return dao.listPlainValue(clzz,xq); + return dao.listPlainValue(clzz, xq); } @@ -380,14 +394,14 @@ public List> list(String sql, List conditionSet) { public void findToHandle(Q q, RowHandler handler) { if (q.isAbort()) return; - this.dao.findToHandle(q,handler); + this.dao.findToHandle(q, handler); } @Override public void findToHandle(Q.X xq, RowHandler> handler) { if (xq.isAbort()) return; - this.dao.findToHandle(xq,handler); + this.dao.findToHandle(xq, handler); } @Override diff --git a/sqli-repo/src/main/java/io/xream/sqli/repository/dao/Dao.java b/sqli-repo/src/main/java/io/xream/sqli/repository/dao/Dao.java index b44d646..dcf8da3 100644 --- a/sqli-repo/src/main/java/io/xream/sqli/repository/dao/Dao.java +++ b/sqli-repo/src/main/java/io/xream/sqli/repository/dao/Dao.java @@ -49,7 +49,8 @@ public interface Dao extends QueryForCache { boolean removeIn(Keys keys); boolean refreshByCondition(Qr conditon); - + + @Deprecated List list(Object conditionObj); List> list(String sql, @@ -71,8 +72,11 @@ List> list(String sql, boolean execute(String sql, Object...objs); + @Deprecated T getOne(T conditionObj); + T getOne(Q q); + boolean refresh(T t); void findToHandle(Q q, RowHandler handler); diff --git a/sqli-repo/src/main/java/io/xream/sqli/repository/dao/DaoImpl.java b/sqli-repo/src/main/java/io/xream/sqli/repository/dao/DaoImpl.java index 352249c..4ff3929 100644 --- a/sqli-repo/src/main/java/io/xream/sqli/repository/dao/DaoImpl.java +++ b/sqli-repo/src/main/java/io/xream/sqli/repository/dao/DaoImpl.java @@ -411,6 +411,23 @@ public T getOne(T conditionObj) { return list.get(0); } + @Override + public T getOne(Q q) { + Class clz = q.getClzz(); + List valueList = new ArrayList<>(); + SqlBuilt sqlBuilt = sqlBuilder.buildQueryByQ(valueList, q, q2Sql, dialect); + String sql = sqlBuilt.getSql().toString(); + SqliLoggerProxy.debug(clz, sql); + + List list = this.jdbcHelper.queryForList(sql, valueList, Parser.get(clz), this.dialect); + + if (list.isEmpty()) + return null; + if (list.size() > 1) + throw new TooManyResultsException("Expected one result (or null) to be returned by API of getOne(T), but found: " + list.size()); + return list.get(0); + } + @Override public void findToHandle(Q.X xq, RowHandler> handler) { diff --git a/sqli-repo/src/main/java/io/xream/sqli/repository/internal/DefaultRepositoryX.java b/sqli-repo/src/main/java/io/xream/sqli/repository/internal/DefaultRepositoryX.java index 6e740fa..b7dc6e4 100644 --- a/sqli-repo/src/main/java/io/xream/sqli/repository/internal/DefaultRepositoryX.java +++ b/sqli-repo/src/main/java/io/xream/sqli/repository/internal/DefaultRepositoryX.java @@ -264,6 +264,13 @@ public T getOne(T conditionObj) { return repository.getOne(conditionObj); } + @Override + public T getOne(Q q) { + if (q == null) + return null; + return repository.getOne(q); + } + @Override public void refreshCache() { repository.refreshCache(this.clzz); @@ -281,7 +288,7 @@ public List in(String property, List inList) { @Override - public Page find(Q q) { + public Page find(Q q) { assertQClzz(q); this.setDefaultClzz(q); Page page = repository.find(q); @@ -291,7 +298,7 @@ public Page find(Q q) { @Override - public List list(Q q) { + public List list(Q q) { assertQClzz(q); this.setDefaultClzz(q); return repository.list(q); @@ -299,14 +306,14 @@ public List list(Q q) { } @Override - public void findToHandle(Q q, RowHandler handler) { + public void findToHandle(Q q, RowHandler handler) { assertQClzz(q); this.setDefaultClzz(q); this.repository.findToHandle(q,handler); } @Override - public boolean exists(Q q) { + public boolean exists(Q q) { assertQClzz(q); this.setDefaultClzz(q); return this.repository.exists(q);