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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                書接上回,雖然Mybatis Plus幫我們提供了大量的默認方法,但我們為了實現多表關聯查詢,或者根據不同的查詢條件傳參,實現不同的動態SQL。在這種情況下我們還是需要自定義SQL,不管怎樣我們需要首先通過配置指定Mapper.xml文件的存儲位置。 ~~~ mybatis-plus: mapper-locations: classpath*:/mapper/*Mapper.xml ~~~ ## 1、原始的自定義SQL方法 > 筆者認為:將多表關聯查詢或動態SQL寫在XML文件里面進行維護,大多數場景下仍然是Mybatis最佳實踐。單表的增刪改查使用Mybatis Plus或者mybatis generator生成代碼,是最佳實踐。 * UserMapper 接口放在`@MapperScan`配置的掃描路徑下面。這種方法是Mybatis 為我們提供的,在Mybatis Plus里面仍然可以繼續使用,絲毫不耽誤! * 使用最原始的Mybatis SQL定義方式,在集成BaseMapper的基礎上(mybatis plus),新定義一個接口方法findUser。 ~~~ public interface UserMapper extends BaseMapper<User> { List<User> findUser(@Param("name") String name, @Param("email") String email); } ~~~ 新定義一個UserMapper.xml,放在`mybatis-plus.mapper-locations`配置路徑下面。下面的動態SQL表示: * 當參數name不為null或空串的時候,`AND name = #{name}`條件生效 * 當參數email不為null或空串的時候,`AND email = #{email}`條件生效 ~~~ <!--這個里面寫動態SQL、多表關聯查詢都可以勝任--> <select id="findUser" resultType="com.zimug.example.model.User"> SELECT id,name,age,email FROM user <trim prefix="WHERE" prefixOverrides="AND|OR" suffixOverrides="AND|OR"> <if test="name != null and name != '' " > AND name = #{name} </if> <if test="email != null and email != '' " > AND email= #{email} </if> </trim> </select> ~~~ 使用測試 ~~~ @Test public void testCustomSQL1() { String name = "字母"; //name不為空 String email = ""; //email為空串 List<User> list = userMapper.findUser(name,email); list.forEach(System.out::println); } ~~~ 最終執行的SQL為(因為email為空串,所以對應的查詢條件在動態SQL中未被構建): ~~~ SELECT id,name,age,email FROM user WHERE name = ? ~~~ ## 2、自定義接口方法使用Wrapper條件構造器 如果我們想在自定義的方法中,使用Wrapper條件構造器。可以參考下面的方式實現。這種方式雖然簡單,但仍然只適用于單表(可以是多表關聯查詢,但查詢條件也是基于單表的)。 * 使用注解方式 + Wrapper ,`${ew.customSqlSegment}`是一個查詢條件占位符,代表Wapper查詢條件。 ~~~ @Select("select * from `user` ${ew.customSqlSegment}") List<User> selectAll(@Param(Constants.WRAPPER) Wrapper wrapper); ~~~ * 使用xml 配置方式 + Wrapper ~~~ List<User> selectAll(@Param(Constants.WRAPPER) Wrapper wrapper); ~~~ ~~~ <select id="selectAll" resultType="com.zimug.example.model.User"> select * from `user` ${ew.customSqlSegment} </select> ~~~ ### 通過Wapper傳遞查詢參數 上面兩種方式任意選擇一種,參數都是Wrapper ~~~ @Test public void testCustomSQL2() { LambdaQueryWrapper<User> query = new LambdaQueryWrapper<>(); query.eq(User::getName, "字母"); List<User> list = userMapper.selectAll(query); list.forEach(System.out::println); } ~~~ 最終執行的SQL為(和上文原始的XML動態SQL實現效果一致,但是查詢條件的構造是針對單表的): ~~~ SELECT id,name,age,email FROM user WHERE name = ? ~~~
                  <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>

                              哎呀哎呀视频在线观看