<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 每個租戶一個表 參考代碼在源碼 [S6MoreDatabase.multipleTables](https://gitee.com/xiandafu/beetlsql/blob/master/sql-samples/sql-sample-quickstart/src/main/java/org/beetl/sql/test/S6MoreDatabase.java) 可以為每個租戶設置一個表。BeetlSQL為了實現此特性,需要較為復雜的操作。首先,在@Table 或者 sql模板中指定表名的時候使用動態表名 ```java static final String USER_TABLE="${toTable('sys_user')}"; @Data @Table(name = USER_TABLE) public class MyUser { @AssignID private Integer id; private String name; } ``` 我們的表名使用了`${toTable('sys_user')}` ,toTable是待會需要定義的一個函數名,輸入是sys_user,輸出可能是以tenant為后綴的表名,比如sys_user_beijing,sys_user_chengdu 為了使得BeetlSQL能識別動態表明${toTable('sys_user')},還需要配置SQLManager ```java protected SQLManager getSQLManager4MultipleTables(){ SQLManager sqlManager = SampleHelper.getSqlManager(); //告訴sqlManager遇到${toTable('sys_user')}這個不存在的表不報錯,它是個虛表,真實表是sys_user,beetlsql用于獲取表結構信息 sqlManager.addVirtualTable("sys_user",USER_TABLE); BeetlTemplateEngine templateEngine = (BeetlTemplateEngine)sqlManager.getSqlTemplateEngine(); // 注冊一個方法來實現映射到多表的邏輯 templateEngine.getBeetl().getGroupTemplate().registerFunction("toTable", new Function(){ @Override public Object call(Object[] paras, Context ctx) { String tableName = (String)paras[0]; String tenantId = TenantLocalContext.get(); return tableName+"_"+tenantId } }); return sqlManager; } ``` * addVirtualTable ,接受倆個第一個參數,第一個是對應數據庫的真實的表,第二個參數是也是一個表名,但不存在數據庫,是個虛擬的表,當BeetlSQL需要知道虛擬表的metadata信息的時候,就從對應的真實表里查找。這常用分表環境中,比如數據庫有bbs_topic_01到 bbs_topic_10, BeetSQL可以自定表名為@Table(name="bbs_topic"),但考慮系統并未有bbs_topic表,所以可以addVirtualTable("bbs_topic_01","bbs_topic"), 以方便如果需要知道"bbs_topic“表的信息,可以從bbs_topic_01中找到。在如上的虛擬表是個函數`${toTable('sys_user')}` 對應的表信息可以從sys_user中獲取 * BeetlSQL默認使用Beetl引擎,因此自定義了個toTable函數,會接受一個表名,然后根據上下文(TenantLocalContext)來取得當前租戶信息,代碼如下 ```JAVA String tableName = (String)paras[0]; String tenantId = TenantLocalContext.get(); return tableName+"_"+tenantId ``` 有了如上配置后,可以使用`${toTable('sys_user')}`代替當前表 ```java TenantLocalContext.set(teantId); sqlManger.insert(MyUser.class); String sql = "select * from ${toTable('sys_user')} where department_id=#{xxx}"; List<TenantUser> list = sqlManager.execute(sql,TenantUser.class,new HashMap()); ``` 如果你熟悉jsqlparser工具,也可以通過Intecetpor功能(例子可以參考源碼samples工程中的InterceptSample),在即將執行sql語句的前,改寫sql語句 ```java public static class TenantUpdateAppendInterceptor implements Interceptor{ @Override public void before(InterceptorContext ctx) { String jdbcSql = context.sqlResult.jdbcSql; String newSql = parseTeantSql(jdbcSql) //解析sql語句,換成租戶表 context.sqlResult.jdbcSql = newSql } } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看