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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                **1. 常用接口繼承關系** :-: ![](https://img.kancloud.cn/40/af/40af28b1f89f701381f5807ed960aa3b_600x547.png) 常用的兩個接口是JpaRepository和JpaSpecificationExecutor。只要讓我們的接口繼承這兩個接口,就可以調用這兩個接口的一些方法與數據庫做CURD操作。但是這些方法都只是聲明并沒有實現,那么在Spring Data JPA中這些方法是如何實現的? <br/> **2. JDK動態代理實現** 其實這些接口方法的實現是通過JDK動態代理來實現的。 下面簡單演示一下其實現過程。 (1)通過 JdkDynamicAopProxy 動態代理生成接口 UserRepository 的一個代理對象SimpleJpaRepository。 ![](https://img.kancloud.cn/64/08/6408544cf258943d4523576b95a988e2_1467x480.png) (2)通過查看 SimpleJpaRepository 的源碼可以看到有函數`findOne`。 ![](https://img.kancloud.cn/90/a9/90a972eeb636957d24856496c032cbae_1244x210.png) (3)`findOne`函數調用了`this.getQuery(..)`函數,定位到該函數可以發現有一個變量`this.em`。 ![](https://img.kancloud.cn/3f/a8/3fa8bce098b633b7faebfa69327b6f08_1243x235.png) (4)而這個`this.em`變量就是接口 EntityManager。 ![](https://img.kancloud.cn/c1/b6/c1b6e8c0c7342d24428df631b22c6cdb_1246x202.png) (5)這個 EntityManager 就是JPA原生的實現方式。 ![](https://img.kancloud.cn/fd/15/fd1567d8490ddbbf7497e238df09131c_1289x229.png) 所以我們得到結論Spring Data JPA只是對標準JPA操作進行了進一步封裝,簡化了Dao層代碼的開發。 <br/> **3. Spring Data JPA的調用過程** :-: ![](https://img.kancloud.cn/c0/18/c018c07aad11044ccec081cbcb7fffde_230x458.png)
                  <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>

                              哎呀哎呀视频在线观看