diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java index f251cd6..706981a 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java @@ -2,14 +2,16 @@ package com.github.yulichang.interceptor; import com.baomidou.mybatisplus.core.MybatisPlusVersion; import com.baomidou.mybatisplus.core.metadata.TableInfo; -import com.baomidou.mybatisplus.core.toolkit.*; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.github.yulichang.adapter.AdapterHelper; import com.github.yulichang.adapter.base.tookit.VersionUtils; import com.github.yulichang.config.ConfigProperties; import com.github.yulichang.interfaces.MPJBaseJoin; import com.github.yulichang.query.MPJQueryWrapper; import com.github.yulichang.toolkit.*; -import com.github.yulichang.toolkit.ReflectionKit; import com.github.yulichang.toolkit.support.FieldCache; import com.github.yulichang.wrapper.interfaces.SelectWrapper; import com.github.yulichang.wrapper.resultmap.IResult; diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/UpdateJoinWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/UpdateJoinWrapper.java index 6ae4663..3f6018e 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/UpdateJoinWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/UpdateJoinWrapper.java @@ -7,9 +7,9 @@ import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.*; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.github.yulichang.adapter.AdapterHelper; -import com.github.yulichang.toolkit.*; import com.github.yulichang.toolkit.LambdaUtils; import com.github.yulichang.toolkit.ReflectionKit; +import com.github.yulichang.toolkit.*; import com.github.yulichang.wrapper.interfaces.Update; import com.github.yulichang.wrapper.interfaces.UpdateChain; import lombok.AllArgsConstructor; diff --git a/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/config/MybatisPlusConfig.java b/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/config/MybatisPlusConfig.java index 65ce1d5..f3b5002 100644 --- a/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/config/MybatisPlusConfig.java +++ b/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/config/MybatisPlusConfig.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.injector.AbstractMethod; import com.baomidou.mybatisplus.core.injector.ISqlInjector; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.PluginUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; @@ -12,6 +13,7 @@ import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler; import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; +import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils; import com.github.yulichang.injector.MPJSqlInjector; import com.github.yulichang.test.util.ThreadLocalUtils; import lombok.SneakyThrows; @@ -22,6 +24,7 @@ import org.apache.ibatis.executor.Executor; import org.apache.ibatis.executor.statement.StatementHandler; import org.apache.ibatis.mapping.BoundSql; import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.ParameterMapping; import org.apache.ibatis.session.ResultHandler; import org.apache.ibatis.session.RowBounds; import org.springframework.context.annotation.Bean; @@ -33,6 +36,8 @@ import org.springframework.core.annotation.Order; import java.sql.Connection; import java.util.List; import java.util.Objects; +import java.util.Optional; +import java.util.function.Predicate; /** * mybatis-plus配置 @@ -46,7 +51,7 @@ public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); - PaginationInnerInterceptor page = new PaginationInnerInterceptor(DbType.H2); + PaginationInnerInterceptor page = new PaginationInnerInterceptor(); page.setOptimizeJoin(false); interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() { @Override @@ -93,10 +98,22 @@ public class MybatisPlusConfig { */ public static class SqlInterceptor implements InnerInterceptor { + private DbType dbType; + + private static final Predicate P = type -> type == DbType.POSTGRE_SQL || type == DbType.ORACLE; + @Override @SneakyThrows + public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) { String sql = boundSql.getSql(); + this.dbType = Optional.ofNullable(this.dbType).orElse(JdbcUtils.getDbType(executor)); + if (P.test(this.dbType)) { + PluginUtils.MPBoundSql mpBoundSql = PluginUtils.mpBoundSql(boundSql); + List mappings = mpBoundSql.parameterMappings(); + mpBoundSql.sql(sql.replaceAll("`", "\"")); + mpBoundSql.parameterMappings(mappings); + } check(sql); } @@ -123,6 +140,13 @@ public class MybatisPlusConfig { BoundSql boundSql = sh.getBoundSql(); if (boundSql != null && StringUtils.isNotBlank(boundSql.getSql())) { String sql = boundSql.getSql(); + this.dbType = Optional.ofNullable(this.dbType).orElse(JdbcUtils.getDbType(connection.getMetaData().getURL())); + if (P.test(this.dbType)) { + PluginUtils.MPBoundSql mpBoundSql = PluginUtils.mpBoundSql(boundSql); + List mappings = mpBoundSql.parameterMappings(); + mpBoundSql.sql(sql.replaceAll("`", "\"")); + mpBoundSql.parameterMappings(mappings); + } if (sql.toUpperCase().startsWith("SELECT")) { return; } @@ -137,6 +161,10 @@ public class MybatisPlusConfig { sql = sql.replaceAll("\n", ""); sql = sql.replaceAll("\r", ""); sql = sql.replaceAll("\t", ""); + if (P.test(this.dbType)) { + sql = sql.replaceAll("\"", "`"); + sql = sql.replaceAll("`", ""); + } return dg(sql); } diff --git a/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/util/DbTypeEnum.java b/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/util/DbTypeEnum.java new file mode 100644 index 0000000..ceedc66 --- /dev/null +++ b/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/util/DbTypeEnum.java @@ -0,0 +1,26 @@ +package com.github.yulichang.test.util; + +import com.baomidou.mybatisplus.annotation.DbType; + +import java.util.Arrays; + +public enum DbTypeEnum { + + H2(DbType.H2, ""), + MYSQL(DbType.MYSQL, ""), + POSTGRE_SQL(DbType.POSTGRE_SQL, "pgsql/"), + ORACLE(DbType.ORACLE, "oracle/"); + + private final DbType dbType; + + private final String path; + + DbTypeEnum(DbType dbType, String path) { + this.dbType = dbType; + this.path = path; + } + + public static String getPath(DbType dbType) { + return Arrays.stream(DbTypeEnum.values()).filter(e -> e.dbType == dbType).findFirst().map(e -> e.path).orElse(""); + } +} diff --git a/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/util/DbTypeUtil.java b/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/util/DbTypeUtil.java new file mode 100644 index 0000000..4d6940f --- /dev/null +++ b/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/util/DbTypeUtil.java @@ -0,0 +1,23 @@ +package com.github.yulichang.test.util; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils; +import com.github.yulichang.toolkit.SpringContentUtils; +import org.springframework.core.env.Environment; + +import java.util.Optional; + +public class DbTypeUtil { + + private static DbType dbType; + + public static DbType getDbType() { + return Optional.ofNullable(dbType).orElseGet(() -> { + String jdbcUrl = SpringContentUtils.getBean(Environment.class).getProperty("spring.datasource.url"); + assert jdbcUrl != null; + DbType type = JdbcUtils.getDbType(jdbcUrl); + dbType = type; + return type; + }); + } +} diff --git a/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/util/Reset.java b/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/util/Reset.java index 974a1ce..ee798d1 100644 --- a/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/util/Reset.java +++ b/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/util/Reset.java @@ -1,5 +1,7 @@ package com.github.yulichang.test.util; +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils; import com.github.yulichang.toolkit.SpringContentUtils; import org.apache.ibatis.jdbc.ScriptRunner; import org.apache.ibatis.session.SqlSession; @@ -7,6 +9,8 @@ import org.mybatis.spring.SqlSessionTemplate; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; +import java.sql.Connection; +import java.sql.SQLException; public class Reset { @@ -14,12 +18,21 @@ public class Reset { public static void reset() { SqlSession session = SpringContentUtils.getBean(SqlSessionTemplate.class) .getSqlSessionFactory().openSession(true); - ScriptRunner runner = new ScriptRunner(session.getConnection()); + Connection connection = session.getConnection(); + ScriptRunner runner = new ScriptRunner(connection); + String path = "db/"; + try { + DbType dbType = JdbcUtils.getDbType(connection.getMetaData().getURL()); + path += DbTypeEnum.getPath(dbType); + } catch (SQLException e) { + throw new RuntimeException(e); + } + runner.setLogWriter(null); runner.runScript(new InputStreamReader( - Reset.class.getClassLoader().getResourceAsStream("db/schema.sql"), StandardCharsets.UTF_8)); + Reset.class.getClassLoader().getResourceAsStream(path + "schema.sql"), StandardCharsets.UTF_8)); runner.runScript(new InputStreamReader( - Reset.class.getClassLoader().getResourceAsStream("db/data.sql"), StandardCharsets.UTF_8)); + Reset.class.getClassLoader().getResourceAsStream(path + "data.sql"), StandardCharsets.UTF_8)); session.commit(); session.close(); } diff --git a/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/util/Throw.java b/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/util/Throw.java new file mode 100644 index 0000000..46f9cde --- /dev/null +++ b/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/util/Throw.java @@ -0,0 +1,42 @@ +package com.github.yulichang.test.util; + +import com.baomidou.mybatisplus.annotation.DbType; +import org.springframework.jdbc.BadSqlGrammarException; + +import java.util.Arrays; + +public class Throw { + + + public static void tryDo(DoSomething doSomething) { + try { + doSomething.doSomething(); + } catch (BadSqlGrammarException e) { + if (DbTypeUtil.getDbType() != DbType.H2) { + throw e; + } + } + } + + public static void tryDo(DoSomething doSomething, DbType... ignore) { + try { + doSomething.doSomething(); + } catch (BadSqlGrammarException e) { + if (DbTypeUtil.getDbType() != DbType.H2 && Arrays.stream(ignore).noneMatch(n -> n == DbTypeUtil.getDbType())) { + throw e; + } + } + } + + public static void tryDoIgnore(DoSomething doSomething) { + try { + doSomething.doSomething(); + } catch (BadSqlGrammarException ignore) { + } + } + + @FunctionalInterface + public interface DoSomething { + void doSomething(); + } +} diff --git a/mybatis-plus-join-test/test-join/pom.xml b/mybatis-plus-join-test/test-join/pom.xml index b810fcd..c5a36a3 100644 --- a/mybatis-plus-join-test/test-join/pom.xml +++ b/mybatis-plus-join-test/test-join/pom.xml @@ -27,7 +27,14 @@ com.mysql mysql-connector-j - 8.0.32 + + + org.postgresql + postgresql + + + com.oracle.database.jdbc + ojdbc8 com.fasterxml.jackson.core diff --git a/mybatis-plus-join-test/test-join/src/main/resources/application.yml b/mybatis-plus-join-test/test-join/src/main/resources/application.yml index fd8acff..820530d 100644 --- a/mybatis-plus-join-test/test-join/src/main/resources/application.yml +++ b/mybatis-plus-join-test/test-join/src/main/resources/application.yml @@ -1,15 +1,7 @@ #file: noinspection SpringBootApplicationYaml spring: - datasource: - driver-class-name: org.h2.Driver - url: jdbc:h2:mem:test - username: root - password: test -# datasource: -# driver-class-name: com.mysql.cj.jdbc.Driver -# url: jdbc:mysql://localhost:3306/mpj_test -# username: root -# password: 123456 + profiles: + active: h2 sql: init: schema-locations: classpath:db/schema.sql @@ -32,3 +24,44 @@ mybatis-plus-join: sub-table-logic: true ms-cache: true logic-del-type: where + +--- +spring: + profiles: h2 + datasource: + driver-class-name: org.h2.Driver + url: jdbc:h2:mem:test + username: root + password: test +--- +spring: + profiles: mysql + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/mpj_test + username: root + password: 123456 +--- +spring: + profiles: pgsql + datasource: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://localhost:5432/mpj_test + username: postgres + password: 123456 + sql: + init: + schema-locations: classpath:db/pgsql/schema.sql + data-locations: classpath:db/pgsql/data.sql +--- +spring: + profiles: oracle + datasource: + driver-class-name: oracle.jdbc.OracleDriver + url: jdbc:oracle:thin:@//localhost:1521/FREE + username: sys as sysdba + password: 123456 + sql: + init: + schema-locations: classpath:db/oracle/schema.sql + data-locations: classpath:db/oracle/data.sql \ No newline at end of file diff --git a/mybatis-plus-join-test/test-join/src/main/resources/db/oracle/data.sql b/mybatis-plus-join-test/test-join/src/main/resources/db/oracle/data.sql new file mode 100644 index 0000000..852bca6 --- /dev/null +++ b/mybatis-plus-join-test/test-join/src/main/resources/db/oracle/data.sql @@ -0,0 +1,119 @@ +-- noinspection SqlDialectInspectionForFile + +-- noinspection SqlNoDataSourceInspectionForFile + +DELETE FROM area; + +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10001, '北京市01', '北京01', '朝阳01', '80001', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10002, '北京市02', '北京02', '朝阳02', '80002', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10003, '北京市03', '北京03', '朝阳03', '80003', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10004, '北京市04', '北京04', '朝阳04', '80004', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10005, '北京市05', '北京05', '朝阳05', '80005', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10006, '北京市06', '北京06', '朝阳06', '80006', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10007, '北京市07', '北京07', '朝阳07', '80007', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10008, '北京市08', '北京08', '朝阳08', '80008', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10009, '北京市09', '北京09', '朝阳09', '80009', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10010, '北京市10', '北京10', '朝阳10', '80010', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10011, '北京市11', '北京11', '朝阳11', '80011', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10012, '北京市12', '北京12', '朝阳12', '80012', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10013, '北京市13', '北京13', '朝阳13', '80013', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10014, '北京市14', '北京14', '朝阳14', '80014', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10015, '北京市15', '北京15', '朝阳15', '80015', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10016, '北京市16', '北京16', '朝阳16', '80016', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10017, '北京市17', '北京17', '朝阳17', '80017', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10018, '北京市18', '北京18', '朝阳18', '80018', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10019, '北京市19', '北京19', '朝阳19', '80019', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10020, '北京市20', '北京20', '朝阳20', '80020', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10021, '北京市21', '北京21', '朝阳21', '80021', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10022, '北京市22', '北京22', '朝阳22', '80022', false); + +DELETE FROM "user"; + +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES ( 1, 1, '张三 1', '{"id": 1,"name":"张三 1"}', 1, 2, 1, 'https://url-01', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1, 2, false); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES ( 2, 1, '张三 2', '{"id": 2,"name":"张三 2"}', 1, 2, 0, 'https://url-02', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 2, 3, false); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES ( 3, 1, '张三 3', '{"id": 3,"name":"张三 3"}', 1, 2, 0, 'https://url-03', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 3, 2, false); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES ( 4, 1, '张三 4', '{"id": 4,"name":"张三 4"}', 1, 2, 0, 'https://url-04', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 9, 2, false); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES ( 5, 1, '张三 5', '{"id": 5,"name":"张三 5"}', 1, 2, 0, 'https://url-05', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1, 2, false); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES ( 6, 1, '张三 6', '{"id": 6,"name":"张三 6"}', 1, 2, 0, 'https://url-06', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1, 2, false); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES ( 7, 1, '张三 7', '{"id": 7,"name":"张三 7"}', 1, 2, 0, 'https://url-07', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1, 2, false); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES ( 8, 1, '张三 8', '{"id": 8,"name":"张三 8"}', 1, 2, 0, 'https://url-08', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1, 2, false); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES ( 9, 1, '张三 9', '{"id": 9,"name":"张三 9"}', 1, 2, 0, 'https://url-09', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1, 2, false); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES (10, 1, '张三10', '{"id":10,"name":"张三10"}', 1, 2, 0, 'https://url-10', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1, 2, true ); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES (11, 1, '张三11', '{"id":11,"name":"张三11"}', 1, 2, 0, 'https://url-11', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1, 2, true ); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES (12, 1, '张三12', '{"id":12,"name":"张三12"}', 1, 2, 0, 'https://url-12', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1, 2, true ); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES (13, 1, '张三13', '{"id":13,"name":"张三13"}', 1, 2, 0, 'https://url-13', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1, 2, true ); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES (14, 2, '张三14', '{"id":14,"name":"张三14"}', 1, 2, 0, 'https://url-14', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1, 2, false); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES (15, 2, '张三15', '{"id":15,"name":"张三15"}', 1, 2, 0, 'https://url-15', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1, 2, false); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES (16, 2, '张三16', '{"id":16,"name":"张三16"}', 1, 2, 0, 'https://url-16', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1, 2, false); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES (17, 2, '张三17', '{"id":17,"name":"张三17"}', 1, 2, 0, 'https://url-17', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1, 2, false); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES (18, 2, '张三18', '{"id":18,"name":"张三18"}', 1, 2, 0, 'https://url-18', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1, 2, false); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES (19, 2, '张三19', '{"id":19,"name":"张三19"}', 1, 2, 0, 'https://url-19', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1, 2, true ); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES (20, 2, '张三20', '{"id":20,"name":"张三20"}', 1, 2, 0, 'https://url-20', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1, 2, true ); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES (21, 2, '张三21', '{"id":21,"name":"张三21"}', 1, 2, 0, 'https://url-21', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1, 2, true ); +INSERT INTO "user" (id, pid, "name", "json", address_id, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES (22, 2, '张三22', '{"id":22,"name":"张三22"}', 1, 2, 0, 'https://url-22', TO_TIMESTAMP('2022-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1, 2, true ); + + +DELETE FROM address; + +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 1, 1, 10001, '10000000001', '朝阳01', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 2, 1, 10002, '10000000002', '朝阳02', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 3, 1, 10003, '10000000003', '朝阳03', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 4, 1, 10004, '10000000004', '朝阳04', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 5, 1, 10005, '10000000005', '朝阳05', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 6, 1, 10006, '10000000006', '朝阳06', true ); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 7, 1, 10007, '10000000007', '朝阳07', true ); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 8, 1, 10008, '10000000008', '朝阳08', true ); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 9, 1, 10009, '10000000009', '朝阳09', true ); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (10,10, 10010, '10000000010', '朝阳10', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (11,11, 10011, '10000000011', '朝阳11', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (12,12, 10012, '10000000012', '朝阳12', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (13,13, 10013, '10000000013', '朝阳13', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (14,14, 10014, '10000000014', '朝阳14', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (15,15, 10015, '10000000015', '朝阳15', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (16,16, 10016, '10000000016', '朝阳16', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (17,17, 10017, '10000000017', '朝阳17', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (18,18, 10018, '10000000018', '朝阳18', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (19,19, 10019, '10000000019', '朝阳19', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (20,20, 10020, '10000000020', '朝阳20', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (21,21, 10021, '10000000021', '朝阳21', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (22,22, 10022, '10000000022', '朝阳22', false); + +DELETE FROM user_dto; +INSERT INTO user_dto (id, user_id, create_by, update_by, del) VALUES (1,1, 2, 3, false); +INSERT INTO user_dto (id, user_id, create_by, update_by, del) VALUES (2,1, 2, 3, false); +INSERT INTO user_dto (id, user_id, create_by, update_by, del) VALUES (3,1, 2, 3, false); +INSERT INTO user_dto (id, user_id, create_by, update_by, del) VALUES (4,1, 2, 3, false); +INSERT INTO user_dto (id, user_id, create_by, update_by, del) VALUES (5,1, 2, 3, false); +INSERT INTO user_dto (id, user_id, create_by, update_by, del) VALUES (6,1, 2, 3, false); +INSERT INTO user_dto (id, user_id, create_by, update_by, del) VALUES (7,1, 2, 3, false); +INSERT INTO user_dto (id, user_id, create_by, update_by, del) VALUES (8,1, 2, 3, false); + +DELETE FROM order_t; +INSERT INTO order_t (id, user_id, age, name) VALUES (1, 1, 8, '1,8'); +INSERT INTO order_t (id, user_id, age, name) VALUES (2, 2, 7, '2,7'); +INSERT INTO order_t (id, user_id, age, name) VALUES (3, 3, 6, '3,6'); +INSERT INTO order_t (id, user_id, age, name) VALUES (4, 4, 5, '4,5'); +INSERT INTO order_t (id, user_id, age, name) VALUES (5, 5, 4, '5,4'); +INSERT INTO order_t (id, user_id, age, name) VALUES (6, 6, 3, '6,3'); +INSERT INTO order_t (id, user_id, age, name) VALUES (7, 7, 2, '7,2'); +INSERT INTO order_t (id, user_id, age, name) VALUES (8, 8, 1, '8,1'); + +DELETE FROM user_tenant; +INSERT INTO user_tenant (id,user_id, tenant_id) VALUES (1, 1, 1); +INSERT INTO user_tenant (id,user_id, tenant_id) VALUES (2, 2, 1); +INSERT INTO user_tenant (id,user_id, tenant_id) VALUES (3, 3, 1); +INSERT INTO user_tenant (id,user_id, tenant_id) VALUES (4, 4, 1); +INSERT INTO user_tenant (id,user_id, tenant_id) VALUES (5, 5, 1); +INSERT INTO user_tenant (id,user_id, tenant_id) VALUES (6, 6, 2); +INSERT INTO user_tenant (id,user_id, tenant_id) VALUES (7, 7, 2); +INSERT INTO user_tenant (id,user_id, tenant_id) VALUES (8, 8, 2); + +DELETE FROM user_tenanta; +INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (1, 1, 1, '中文字段1'); +INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (2, 2, 1, '中文字段2'); +INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (3, 3, 1, '中文字段3'); +INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (4, 4, 1, '中文字段4'); +INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (5, 5, 1, '中文字段5'); +INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (6, 6, 2, '中文字段6'); +INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (7, 7, 2, '中文字段7'); +INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (8, 8, 2, '中文字段8'); \ No newline at end of file diff --git a/mybatis-plus-join-test/test-join/src/main/resources/db/oracle/schema.sql b/mybatis-plus-join-test/test-join/src/main/resources/db/oracle/schema.sql new file mode 100644 index 0000000..938930e --- /dev/null +++ b/mybatis-plus-join-test/test-join/src/main/resources/db/oracle/schema.sql @@ -0,0 +1,85 @@ +-- noinspection SqlDialectInspectionForFile + +-- noinspection SqlNoDataSourceInspectionForFile + +DROP TABLE IF EXISTS area; +create table area +( + id int + primary key, + province varchar(255) null, + city varchar(255) null, + area varchar(255) null, + postcode varchar(255) null, + del boolean +); + +DROP TABLE IF EXISTS "user"; +create table "user" +( + id int + primary key, + pid int null, + "name" varchar(255) null, + "json" varchar(255) null, + address_id int null, + address_id2 int null, + sex int null, + head_img varchar(255) null, + create_time timestamp null, + create_by int null, + update_by int null, + del boolean +); + +DROP TABLE IF EXISTS address; +create table address +( + id int + primary key, + user_id int null, + area_id int null, + tel varchar(255) null, + address varchar(255) null, + del boolean +); + +DROP TABLE IF EXISTS user_dto; +create table user_dto +( + id int + primary key, + user_id int null, + create_by int null, + update_by int null, + del boolean null +); + +DROP TABLE IF EXISTS order_t; +create table order_t +( + id int + primary key, + user_id int null, + age int null, + name varchar(255) null +); + +DROP TABLE IF EXISTS user_tenant; +create table user_tenant +( + id int + primary key, + user_id int null, + tenant_id int null +); + +DROP TABLE IF EXISTS user_tenanta; +create table user_tenanta +( + id int + primary key, + user_id int null, + tenant_id int null, + 中文字段 varchar(255) null +); \ No newline at end of file diff --git a/mybatis-plus-join-test/test-join/src/main/resources/db/pgsql/data.sql b/mybatis-plus-join-test/test-join/src/main/resources/db/pgsql/data.sql new file mode 100644 index 0000000..fe85939 --- /dev/null +++ b/mybatis-plus-join-test/test-join/src/main/resources/db/pgsql/data.sql @@ -0,0 +1,119 @@ +-- noinspection SqlDialectInspectionForFile + +-- noinspection SqlNoDataSourceInspectionForFile + +DELETE FROM area; + +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10001, '北京市01', '北京01', '朝阳01', '80001', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10002, '北京市02', '北京02', '朝阳02', '80002', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10003, '北京市03', '北京03', '朝阳03', '80003', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10004, '北京市04', '北京04', '朝阳04', '80004', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10005, '北京市05', '北京05', '朝阳05', '80005', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10006, '北京市06', '北京06', '朝阳06', '80006', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10007, '北京市07', '北京07', '朝阳07', '80007', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10008, '北京市08', '北京08', '朝阳08', '80008', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10009, '北京市09', '北京09', '朝阳09', '80009', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10010, '北京市10', '北京10', '朝阳10', '80010', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10011, '北京市11', '北京11', '朝阳11', '80011', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10012, '北京市12', '北京12', '朝阳12', '80012', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10013, '北京市13', '北京13', '朝阳13', '80013', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10014, '北京市14', '北京14', '朝阳14', '80014', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10015, '北京市15', '北京15', '朝阳15', '80015', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10016, '北京市16', '北京16', '朝阳16', '80016', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10017, '北京市17', '北京17', '朝阳17', '80017', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10018, '北京市18', '北京18', '朝阳18', '80018', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10019, '北京市19', '北京19', '朝阳19', '80019', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10020, '北京市20', '北京20', '朝阳20', '80020', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10021, '北京市21', '北京21', '朝阳21', '80021', false); +INSERT INTO area (id, province, city, area, postcode, del) VALUES (10022, '北京市22', '北京22', '朝阳22', '80022', false); + +DELETE FROM "user"; + +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES ( 1, 1, '张三 1', '{"id": 1,"name":"张三 1"}', 1, 2, 1, 'https://url-01', '2022-01-01 12:00:00', 1, 2, false); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES ( 2, 1, '张三 2', '{"id": 2,"name":"张三 2"}', 1, 2, 0, 'https://url-02', '2022-01-01 12:00:00', 2, 3, false); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES ( 3, 1, '张三 3', '{"id": 3,"name":"张三 3"}', 1, 2, 0, 'https://url-03', '2022-01-01 12:00:00', 3, 2, false); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES ( 4, 1, '张三 4', '{"id": 4,"name":"张三 4"}', 1, 2, 0, 'https://url-04', '2022-01-01 12:00:00', 9, 2, false); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES ( 5, 1, '张三 5', '{"id": 5,"name":"张三 5"}', 1, 2, 0, 'https://url-05', '2022-01-01 12:00:00', 1, 2, false); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES ( 6, 1, '张三 6', '{"id": 6,"name":"张三 6"}', 1, 2, 0, 'https://url-06', '2022-01-01 12:00:00', 1, 2, false); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES ( 7, 1, '张三 7', '{"id": 7,"name":"张三 7"}', 1, 2, 0, 'https://url-07', '2022-01-01 12:00:00', 1, 2, false); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES ( 8, 1, '张三 8', '{"id": 8,"name":"张三 8"}', 1, 2, 0, 'https://url-08', '2022-01-01 12:00:00', 1, 2, false); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES ( 9, 1, '张三 9', '{"id": 9,"name":"张三 9"}', 1, 2, 0, 'https://url-09', '2022-01-01 12:00:00', 1, 2, false); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES (10, 1, '张三10', '{"id":10,"name":"张三10"}', 1, 2, 0, 'https://url-10', '2022-01-01 12:00:00', 1, 2, true ); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES (11, 1, '张三11', '{"id":11,"name":"张三11"}', 1, 2, 0, 'https://url-11', '2022-01-01 12:00:00', 1, 2, true ); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES (12, 1, '张三12', '{"id":12,"name":"张三12"}', 1, 2, 0, 'https://url-12', '2022-01-01 12:00:00', 1, 2, true ); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES (13, 1, '张三13', '{"id":13,"name":"张三13"}', 1, 2, 0, 'https://url-13', '2022-01-01 12:00:00', 1, 2, true ); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES (14, 2, '张三14', '{"id":14,"name":"张三14"}', 1, 2, 0, 'https://url-14', '2022-01-01 12:00:00', 1, 2, false); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES (15, 2, '张三15', '{"id":15,"name":"张三15"}', 1, 2, 0, 'https://url-15', '2022-01-01 12:00:00', 1, 2, false); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES (16, 2, '张三16', '{"id":16,"name":"张三16"}', 1, 2, 0, 'https://url-16', '2022-01-01 12:00:00', 1, 2, false); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES (17, 2, '张三17', '{"id":17,"name":"张三17"}', 1, 2, 0, 'https://url-17', '2022-01-01 12:00:00', 1, 2, false); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES (18, 2, '张三18', '{"id":18,"name":"张三18"}', 1, 2, 0, 'https://url-18', '2022-01-01 12:00:00', 1, 2, false); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES (19, 2, '张三19', '{"id":19,"name":"张三19"}', 1, 2, 0, 'https://url-19', '2022-01-01 12:00:00', 1, 2, true ); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES (20, 2, '张三20', '{"id":20,"name":"张三20"}', 1, 2, 0, 'https://url-20', '2022-01-01 12:00:00', 1, 2, true ); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES (21, 2, '张三21', '{"id":21,"name":"张三21"}', 1, 2, 0, 'https://url-21', '2022-01-01 12:00:00', 1, 2, true ); +INSERT INTO "user" (id, "pid", "name", "json", "address_id", "address_id2" , sex, head_img, create_time, create_by, update_by, del) VALUES (22, 2, '张三22', '{"id":22,"name":"张三22"}', 1, 2, 0, 'https://url-22', '2022-01-01 12:00:00', 1, 2, true ); + + +DELETE FROM address; + +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 1, 1, 10001, '10000000001', '朝阳01', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 2, 1, 10002, '10000000002', '朝阳02', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 3, 1, 10003, '10000000003', '朝阳03', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 4, 1, 10004, '10000000004', '朝阳04', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 5, 1, 10005, '10000000005', '朝阳05', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 6, 1, 10006, '10000000006', '朝阳06', true ); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 7, 1, 10007, '10000000007', '朝阳07', true ); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 8, 1, 10008, '10000000008', '朝阳08', true ); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 9, 1, 10009, '10000000009', '朝阳09', true ); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (10,10, 10010, '10000000010', '朝阳10', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (11,11, 10011, '10000000011', '朝阳11', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (12,12, 10012, '10000000012', '朝阳12', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (13,13, 10013, '10000000013', '朝阳13', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (14,14, 10014, '10000000014', '朝阳14', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (15,15, 10015, '10000000015', '朝阳15', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (16,16, 10016, '10000000016', '朝阳16', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (17,17, 10017, '10000000017', '朝阳17', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (18,18, 10018, '10000000018', '朝阳18', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (19,19, 10019, '10000000019', '朝阳19', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (20,20, 10020, '10000000020', '朝阳20', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (21,21, 10021, '10000000021', '朝阳21', false); +INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (22,22, 10022, '10000000022', '朝阳22', false); + +DELETE FROM user_dto; +INSERT INTO user_dto (id, user_id, create_by, update_by, del) VALUES (1,1, 2, 3, false); +INSERT INTO user_dto (id, user_id, create_by, update_by, del) VALUES (2,1, 2, 3, false); +INSERT INTO user_dto (id, user_id, create_by, update_by, del) VALUES (3,1, 2, 3, false); +INSERT INTO user_dto (id, user_id, create_by, update_by, del) VALUES (4,1, 2, 3, false); +INSERT INTO user_dto (id, user_id, create_by, update_by, del) VALUES (5,1, 2, 3, false); +INSERT INTO user_dto (id, user_id, create_by, update_by, del) VALUES (6,1, 2, 3, false); +INSERT INTO user_dto (id, user_id, create_by, update_by, del) VALUES (7,1, 2, 3, false); +INSERT INTO user_dto (id, user_id, create_by, update_by, del) VALUES (8,1, 2, 3, false); + +DELETE FROM order_t; +INSERT INTO order_t (id, user_id, age, name) VALUES (1, 1, 8, '1,8'); +INSERT INTO order_t (id, user_id, age, name) VALUES (2, 2, 7, '2,7'); +INSERT INTO order_t (id, user_id, age, name) VALUES (3, 3, 6, '3,6'); +INSERT INTO order_t (id, user_id, age, name) VALUES (4, 4, 5, '4,5'); +INSERT INTO order_t (id, user_id, age, name) VALUES (5, 5, 4, '5,4'); +INSERT INTO order_t (id, user_id, age, name) VALUES (6, 6, 3, '6,3'); +INSERT INTO order_t (id, user_id, age, name) VALUES (7, 7, 2, '7,2'); +INSERT INTO order_t (id, user_id, age, name) VALUES (8, 8, 1, '8,1'); + +DELETE FROM user_tenant; +INSERT INTO user_tenant (id,user_id, tenant_id) VALUES (1, 1, 1); +INSERT INTO user_tenant (id,user_id, tenant_id) VALUES (2, 2, 1); +INSERT INTO user_tenant (id,user_id, tenant_id) VALUES (3, 3, 1); +INSERT INTO user_tenant (id,user_id, tenant_id) VALUES (4, 4, 1); +INSERT INTO user_tenant (id,user_id, tenant_id) VALUES (5, 5, 1); +INSERT INTO user_tenant (id,user_id, tenant_id) VALUES (6, 6, 2); +INSERT INTO user_tenant (id,user_id, tenant_id) VALUES (7, 7, 2); +INSERT INTO user_tenant (id,user_id, tenant_id) VALUES (8, 8, 2); + +DELETE FROM user_tenanta; +INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (1, 1, 1, '中文字段1'); +INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (2, 2, 1, '中文字段2'); +INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (3, 3, 1, '中文字段3'); +INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (4, 4, 1, '中文字段4'); +INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (5, 5, 1, '中文字段5'); +INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (6, 6, 2, '中文字段6'); +INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (7, 7, 2, '中文字段7'); +INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (8, 8, 2, '中文字段8'); \ No newline at end of file diff --git a/mybatis-plus-join-test/test-join/src/main/resources/db/pgsql/schema.sql b/mybatis-plus-join-test/test-join/src/main/resources/db/pgsql/schema.sql new file mode 100644 index 0000000..56ed4e3 --- /dev/null +++ b/mybatis-plus-join-test/test-join/src/main/resources/db/pgsql/schema.sql @@ -0,0 +1,85 @@ +-- noinspection SqlDialectInspectionForFile + +-- noinspection SqlNoDataSourceInspectionForFile + +DROP TABLE IF EXISTS area; +create table area +( + id int + primary key, + province varchar(255) null, + city varchar(255) null, + area varchar(255) null, + postcode varchar(255) null, + del boolean +); + +DROP TABLE IF EXISTS "user"; +create table "user" +( + id int + primary key, + "pid" int null, + "name" varchar(255) null, + "json" varchar(255) null, + "address_id" int null, + "address_id2" int null, + sex int null, + head_img varchar(255) null, + create_time timestamp null, + create_by int null, + update_by int null, + del boolean +); + +DROP TABLE IF EXISTS address; +create table address +( + id int + primary key, + user_id int null, + area_id int null, + tel varchar(255) null, + address varchar(255) null, + del boolean +); + +DROP TABLE IF EXISTS user_dto; +create table user_dto +( + id int + primary key, + user_id int null, + create_by int null, + update_by int null, + del boolean null +); + +DROP TABLE IF EXISTS order_t; +create table order_t +( + id int + primary key, + user_id int null, + age int null, + name varchar(255) null +); + +DROP TABLE IF EXISTS user_tenant; +create table user_tenant +( + id int + primary key, + user_id int null, + tenant_id int null +); + +DROP TABLE IF EXISTS user_tenanta; +create table user_tenanta +( + id int + primary key, + user_id int null, + tenant_id int null, + 中文字段 varchar(255) null +); diff --git a/mybatis-plus-join-test/test-join/src/main/resources/db/schema.sql b/mybatis-plus-join-test/test-join/src/main/resources/db/schema.sql index 55e197a..6a79230 100644 --- a/mybatis-plus-join-test/test-join/src/main/resources/db/schema.sql +++ b/mybatis-plus-join-test/test-join/src/main/resources/db/schema.sql @@ -5,19 +5,19 @@ DROP TABLE IF EXISTS area; create table area ( - id int auto_increment + id int primary key, province varchar(255) null, city varchar(255) null, area varchar(255) null, postcode varchar(255) null, - del bit + del boolean ); DROP TABLE IF EXISTS `user`; create table `user` ( - id int auto_increment + id int primary key, `pid` int null, `name` varchar(255) null, @@ -29,19 +29,19 @@ create table `user` create_time datetime null, create_by int null, update_by int null, - del bit + del boolean ); DROP TABLE IF EXISTS address; create table address ( - id int auto_increment + id int primary key, user_id int null, area_id int null, tel varchar(255) null, address varchar(255) null, - del bit + del boolean ); DROP TABLE IF EXISTS user_dto; @@ -52,13 +52,13 @@ create table user_dto user_id int null, create_by int null, update_by int null, - del bit null + del boolean null ); DROP TABLE IF EXISTS order_t; create table order_t ( - id int auto_increment + id int primary key, user_id int null, age int null, @@ -68,7 +68,7 @@ create table order_t DROP TABLE IF EXISTS user_tenant; create table user_tenant ( - id int auto_increment + id int primary key, user_id int null, tenant_id int null @@ -77,7 +77,7 @@ create table user_tenant DROP TABLE IF EXISTS user_tenanta; create table user_tenanta ( - id int auto_increment + id int primary key, user_id int null, tenant_id int null, diff --git a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java index 3733724..17a68ab 100644 --- a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java +++ b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java @@ -1,5 +1,6 @@ package com.github.yulichang.test.join; +import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.core.MybatisPlusVersion; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -14,6 +15,7 @@ import com.github.yulichang.test.join.entity.*; import com.github.yulichang.test.join.mapper.*; import com.github.yulichang.test.util.Reset; import com.github.yulichang.test.util.ThreadLocalUtils; +import com.github.yulichang.test.util.Throw; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.DeleteJoinWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper; @@ -22,7 +24,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.jdbc.BadSqlGrammarException; import java.sql.Timestamp; import java.util.ArrayList; @@ -709,12 +710,12 @@ class LambdaWrapperTest { .select(UserDO::getName) .eq(UserDO::getName, "ref"); userMapper.selectList(wrapper); - try { + Throw.tryDo(() -> { userMapper.insertBatchSomeColumn(new ArrayList() {{ add(new UserDO()); }}); - } catch (BadSqlGrammarException ignored) { - } + }); + } @@ -761,10 +762,9 @@ class LambdaWrapperTest { .selectFunc("if(%s < 5,%s,%s + 100)", arg -> arg.accept(AddressDO::getUserId, AddressDO::getUserId, AddressDO::getUserId), UserDO::getId) .leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId); - try { + Throw.tryDo(() -> { List dos = userMapper.selectJoinList(UserDO.class, wrapper); - } catch (BadSqlGrammarException ignored) { - } + },DbType.ORACLE); } /** @@ -818,11 +818,10 @@ class LambdaWrapperTest { .le(UserDO::getId, 10000) .orderByDesc(UserDO::getId) .setTableName(name -> "bbbbbbb"); - try { - List list = userMapper.selectJoinList(UserDTO.class, wrapper); - } catch (BadSqlGrammarException ignored) { - } + Throw.tryDoIgnore(() -> { + List list = userMapper.selectJoinList(UserDTO.class, wrapper); + }); } @@ -1031,11 +1030,10 @@ class LambdaWrapperTest { DeleteJoinWrapper w = JoinWrappers.delete(OrderDO.class) .leftJoin(UserDto.class, UserDto::getId, OrderDO::getUserId) .eq(OrderDO::getId, 1); - try { + Throw.tryDo(() -> { int i = orderMapper.deleteJoin(w); - } catch (BadSqlGrammarException ignored) { - //忽略异常 h2不支持连表删除 - } + }); + //忽略异常 h2不支持连表删除 //逻辑删除 ThreadLocalUtils.set("UPDATE `user` t LEFT JOIN address t1 ON (t1.user_id = t.id) LEFT JOIN area t2 ON (t2.id = t1.area_id) SET t.del=true ,t1.del=true,t2.del=true WHERE t.del=false AND t1.del=false AND t2.del=false AND (t.id = ?)"); DeleteJoinWrapper wrapper = JoinWrappers.delete(UserDO.class) @@ -1043,12 +1041,11 @@ class LambdaWrapperTest { .leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId) .leftJoin(AreaDO.class, AreaDO::getId, AddressDO::getAreaId) .eq(OrderDO::getId, 1); - try { + Throw.tryDo(() -> { DeleteJoinWrapper wrapper1 = new DeleteJoinWrapper<>(UserDO.class); int i = userMapper.deleteJoin(wrapper); - } catch (BadSqlGrammarException ignored) { - //忽略异常 h2不支持连表删除 - } + }); + //忽略异常 h2不支持连表删除 } @Test @@ -1062,22 +1059,22 @@ class LambdaWrapperTest { .setUpdateEntityAndNull(new AddressDO()) .leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId) .eq(OrderDO::getId, 1); - try { + System.out.println(update.getSqlSet()); + Throw.tryDo(() -> { int i = userMapper.updateJoin(new UserDO().setUpdateBy(123123), update); - } catch (BadSqlGrammarException ignored) { - //忽略异常 h2不支持连表删除 - } + }); + //忽略异常 h2不支持连表删除 + ThreadLocalUtils.set("UPDATE `user` t LEFT JOIN address t1 ON (t1.user_id = t.id) SET t.pid=?, " + + "t.`name`=?, t.`json`=?, t.sex=?, t.head_img=?, t.create_time=?, t.address_id=?, t.address_id2=?, " + + "t.create_by=?, t.update_by=? WHERE t.del=false AND t1.del=false AND (t.id = ?)"); - ThreadLocalUtils.set("UPDATE `user` t LEFT JOIN address t1 ON (t1.user_id = t.id) SET t.pid=?, t.`name`=?, t.`json`=?, t.sex=?, t.head_img=?, t.create_time=?, t.address_id=?, t.address_id2=?, t.create_by=?, t.update_by=? WHERE t.del=false AND t1.del=false AND (t.id = ?)"); UpdateJoinWrapper up = JoinWrappers.update(UserDO.class) .leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId) .eq(OrderDO::getId, 1); - try { + Throw.tryDo(() -> { int i = userMapper.updateJoinAndNull(new UserDO(), up); - } catch (BadSqlGrammarException ignored) { - //忽略异常 h2不支持连表删除 - } + }); } /** diff --git a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/QueryWrapperTest.java b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/QueryWrapperTest.java index afce143..262a789 100644 --- a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/QueryWrapperTest.java +++ b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/QueryWrapperTest.java @@ -9,10 +9,10 @@ import com.github.yulichang.test.join.entity.UserTenantDO; import com.github.yulichang.test.join.mapper.UserMapper; import com.github.yulichang.test.join.mapper.UserTenantMapper; import com.github.yulichang.test.util.ThreadLocalUtils; +import com.github.yulichang.test.util.Throw; import com.github.yulichang.toolkit.JoinWrappers; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.jdbc.BadSqlGrammarException; import javax.annotation.Resource; import java.util.List; @@ -61,10 +61,10 @@ class QueryWrapperTest { .setTableName(name -> "fwear") .select("name AS nameName") .last("LIMIT 1"); - try { + + Throw.tryDoIgnore(() -> { userMapper.selectJoinOne(UserDTO.class, wrapper); - } catch (BadSqlGrammarException ignored) { - } + }); } @Test diff --git a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/FuncAliasTest.java b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/FuncAliasTest.java index 32c3725..e79749d 100644 --- a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/FuncAliasTest.java +++ b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/FuncAliasTest.java @@ -1,17 +1,18 @@ package com.github.yulichang.test.join.m; +import com.baomidou.mybatisplus.annotation.DbType; import com.github.yulichang.test.join.entity.AddressDO; import com.github.yulichang.test.join.entity.UserDO; import com.github.yulichang.test.join.mapper.UserMapper; import com.github.yulichang.test.util.Reset; import com.github.yulichang.test.util.ThreadLocalUtils; +import com.github.yulichang.test.util.Throw; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.github.yulichang.wrapper.segments.Fun; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.jdbc.BadSqlGrammarException; @SpringBootTest public class FuncAliasTest { @@ -29,7 +30,7 @@ public class FuncAliasTest { "t.address_id2, t.del, t.create_by, t.update_by, count(ad.id) AS id, count(addr.id) AS id, " + "if(ad.user_id < 5, addr.user_id, ad.user_id + 100) AS id FROM `user` t " + "LEFT JOIN address ad ON (ad.user_id = t.id) LEFT JOIN address addr ON (addr.user_id = t.id) " + - "WHERE t.del = false AND ad.del = false AND addr.del = false"); + "WHERE t.del = false AND ad.del = false AND addr.del = false GROUP BY t.id"); MPJLambdaWrapper wrapper = new MPJLambdaWrapper() .selectAll(UserDO.class) .selectFunc(() -> "count(%s)", "ad", AddressDO::getId) @@ -39,11 +40,11 @@ public class FuncAliasTest { Fun.f("addr", AddressDO::getUserId), Fun.f("ad", AddressDO::getUserId)), UserDO::getId) .leftJoin(AddressDO.class, "ad", AddressDO::getUserId, UserDO::getId) - .leftJoin(AddressDO.class, "addr", AddressDO::getUserId, UserDO::getId); + .leftJoin(AddressDO.class, "addr", AddressDO::getUserId, UserDO::getId) + .groupBy(UserDO::getId); - try { + Throw.tryDo(() -> { userMapper.selectJoinList(UserDO.class, wrapper); - } catch (BadSqlGrammarException ignored) { - } + }, DbType.POSTGRE_SQL, DbType.ORACLE); } } diff --git a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/TableAliasTest.java b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/TableAliasTest.java index 56573b1..a14d5e1 100644 --- a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/TableAliasTest.java +++ b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/TableAliasTest.java @@ -51,13 +51,14 @@ public class TableAliasTest { "LEFT JOIN address addr2 ON (addr2.id = t.address_id2) " + "LEFT JOIN area area1 ON (area1.id = addr2.area_id) " + "WHERE t.del = false AND addr1.del = false AND addr2.del = false AND area1.del = false " + - "GROUP BY t.id ORDER BY addr1.id DESC"); + "GROUP BY t.id,addr1.id ORDER BY addr1.id DESC"); MPJLambdaWrapper wrapper = JoinWrappers.lambda(UserDO.class) .selectAll(UserDO.class) .leftJoin(AddressDO.class, "addr1", AddressDO::getId, UserDO::getAddressId) .leftJoin(AddressDO.class, "addr2", AddressDO::getId, UserDO::getAddressId2) .leftJoin(AreaDO.class, "area1", AreaDO::getId, "addr2", AddressDO::getAreaId) .groupBy(UserDO::getId) + .groupBy("addr1", AddressDO::getId) .orderByDesc("addr1", AddressDO::getId); List dos = userMapper.selectJoinList(UserDO.class, wrapper); diff --git a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/UpdateIncTest.java b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/UpdateIncTest.java index 46353ed..f12d8f4 100644 --- a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/UpdateIncTest.java +++ b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/UpdateIncTest.java @@ -7,13 +7,13 @@ import com.github.yulichang.test.join.entity.UserDO; import com.github.yulichang.test.join.mapper.UserMapper; import com.github.yulichang.test.util.Reset; import com.github.yulichang.test.util.ThreadLocalUtils; +import com.github.yulichang.test.util.Throw; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.UpdateJoinWrapper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.jdbc.BadSqlGrammarException; import java.util.HashMap; import java.util.List; @@ -47,11 +47,10 @@ public class UpdateIncTest { @Test void updateInc1() { ThreadLocalUtils.set("UPDATE `user` t LEFT JOIN address t1 ON (t1.user_id = t.id) SET t1.address = t.head_img WHERE t.del = false AND t1.del = false"); - try { + Throw.tryDo(() -> { JoinWrappers.update(UserDO.class).set(AddressDO::getAddress, UserDO::getImg) .leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId).update(); - } catch (BadSqlGrammarException ignore) { - } + }); JoinWrappers.lambda(UserDO.class).list().forEach(System.out::println); }