1. 程式人生 > >mybatis-plus高階查詢

mybatis-plus高階查詢

mybatis-plus的條件構建器

對於User類中有而user表中沒有的屬性需要加第二個註解@TableField(exist = false),表示排除User類中的屬性.

  首先看一個條件構建器例項的簡單實用.



public void test(){
       EntityWrapper ew=new EntityWrapper();
       ew.setEntity(new User());
       String name="wang";
       Integer age=16;
       ew.where("name = {0}",name).andNew("age > {0}",age).orderBy("age");
       List<User> list = userService.selectList(ew);
       Page page2 = userService.selectPage(page, ew);
    }


  這裡使用了一個條件包裝類EntityWrapper,來進行對sql語句的拼裝,原理也很好理解,上面的程式碼中,第一個list查詢的結果就是查詢資料庫中name=wang並且age>16歲的所有記錄並按照age排序.而第二個查詢就是再多加一個分頁的功能.

  基本上來說,使用EntityWrapper可以簡單地完成一些條件查詢,但如果查詢方法使用頻率很高的話還是建議自己寫在UserMapper裡.

  那麼自定義的mapper方法能不能使用EntityWrapper呢,當然也是可以的.

  文件中給了一個這樣的例子.

  1.在Mappper中定義:

  List<UserselectMyPage(RowBounds rowBounds@Param("ew") Wrapper<T> wrapper);

   2.在mapper檔案中定義:

<select id="selectMyPageresultType="User">

   SELECT * FROM user ${ew.sqlSegment}

</select>

   對於EntityMapper的條件拼接,基本可以實現sql中常用的where,and,or,groupby,orderby等語法,具體構建方法可以靈活組合.



@Test
public void testTSQL11() {
    /*
     * 實體帶查詢使用方法  輸出看結果
     */
    ew.setEntity(new User(1));
    ew.where("name={0}", "'zhangsan'").and("id=1")
            .orNew("status={0}", "0").or("status=1")
            .notLike("nlike", "notvalue")
            .andNew("new=xx").like("hhh", "ddd")
            .andNew("pwd=11").isNotNull("n1,n2").isNull("n3")
            .groupBy("x1").groupBy("x2,x3")
            .having("x1=11").having("x3=433")
            .orderBy("dd").orderBy("d1,d2");
    System.out.println(ew.getSqlSegment());
}