<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 自動Fetch 有時候查詢結果出來后需要自動加載額外的數據,類似Hibernate 的關系映射。BeetlSQL3也支持這種自動抓取。不同hibernate的是,他不強制要求有外鍵關系 > 越來越多數據庫設計不考慮外鍵,這樣能提升一些性能。系統從某種角度來說也好維護。 > > Fetch不支持復合主鍵,只支持單主鍵 自動抓取通過@Fetch注解,提醒BeetlSQL3在執行完查詢操作后有自動抓取需要完成,BeetlSQL3會解析此POJO的屬性,如果一旦有@FetchMany或者@FetchOne,或者@FetchSql,則會執行查詢操作 ```java @Data @Table(name="sys_order") @Fetch(level =2) public class CustomerOrder { @AutoID Integer id; String name; Integer customerId; @FetchOne(value="customerId") Customer customer; } @Data @Fetch(level = 2) @Table(name="sys_customer") public class Customer { @AutoID Integer id; String name; @FetchMany("customerId") List<CustomerOrder> order; } @Table(name="sys_order") @Fetch(level =2) public class CustomerOrder2 { @AutoID Integer id; String name; Integer customerId; @FetchSql("select * from sys_customer where id =#{customerId}") Customer customer; @FetchSql("select * from sys_customer s where s.id =#{customerId} order by s.id desc") List<Customer> customers; } ``` @Fetch的level屬性表示抓取數據的深度,默認是一層,CustomerOrder設定為2,則不僅僅會自動抓取Customer數據,也會抓取Customer的CustomerOrder數據。如果CustomerOrder設定為3,那么,還會從CustomerOrder再次抓取Customer,實現3層抓取 > BeetlSQL3在Fetch過程中把已經抓取的過數據放入內存里,根據各自POJO類的主鍵判斷,數據一旦曾經抓取過,則不會再從數據庫里獲取。因此不需要擔心出現死循環.同時,緩存有利于性能優化,不需要查詢數據庫 @FetchOne 表示抓取一個,其value值是POJO的一個屬性名,該屬性名對應的值作為需要·抓取對象的主鍵,因此CustomerOrder的@FetchOne注解表明了需要使用CustomerOrder.customerId屬性值作為主鍵來查詢Customer。因此BeetlSQL3會發起類似如下查詢 ```java Integer customerId = getAttrValue(customerOrderIns,"customerId") Customer customer = sqlMqnager.unique(Customer,customerId); ``` 對于Customer對象,需要自動抓取多個CustomerOrder,注解@FetchMany("customerId") 告訴BeetlSQL3.啟用模板查詢功能查詢CustomerOrder,模板的key是“customerId”(也就是CustomerOrder屬性customerId),值是POJO的主鍵,就是Customer.id.因此BeetlSQL會發起類似入如下查詢 ```java Integer customerId = getPrimakeyValue(customerIns); CustomerOrder template = new CustomerOrder(); tempalte.setCustomerId(customerId); List<CustomerOrder> list = sqlManager.template(tempalte); ``` BeetlSQL3 的FetchOne操作會進行合并查詢,比如查詢所有CustomerOrder ```java List<CustomerOrder> orders = sqlManager.all(); ``` 在BeetlSQL3 進行自動抓取的時候,并不會逐一抓取Customer對象,而是調用sqlManager.selectByIds 一次性抓取所有Customer,提高性能 當使用自動Fetch,設置level=2的時候,出現A引用B,B又引用A的時候,需要特別設計A和B對象的hashcode方法和equals方法,避免出現無限循環,比如 ```java @Fetch(level = 2) @Table(name="sys_customer") @EqualsAndHashCode(of="id") public class Customer { @AutoID Integer id; String name; @FetchMany("customerId") List<CustomerOrder> order; } ``` 如果沒有`@EqualsAndHashCode(of="id")` 那么Customer的hashcode方法包括CustomerOrder,而CustomerOrder又包含Customer,這樣導致hashcode無需循環,出現StackOverflowError。 這并不是BeetlSQL的問題,是hash設計的問題 FetchOne和FetchMany支持符合條件時候抓取。如下 ```java @Data @Table(name="sys_order") @Fetch public class CustomerOrder { @AutoID Integer id; String name; Integer customerId; @FetchOne(value="customerId",enableOn="x") Customer customer; @FetchOne(value="customerId"") Account account; } ``` enableOn表示但BeetlSQL 存在變量x的時候,FetchOne才生效。 sql語句可以通過函數fetchEnableOn 來申明一個變量,如sql語句 ```sql dynamicFetchOrder1 === select * from sys_order where id = #{id} -- @ fetchEnableOn("c"); ``` fetchEnableOn的實現類是DynamicFetchEnableOnFunction,它能接受多個變量名字,并賦值一個固定值。FetchOne和FetchMany將檢測是否存在此變量,如果不存在,則不會實現Fetch操作
                  <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>

                              哎呀哎呀视频在线观看