SoFunction
Updated on 2025-03-08

mybatis-plus implements four lambda expression methods

Preface

Lambda expressions are used. The entity field name operation can be used through method reference to avoid miswrite names when writing database table field names directly;

1. LambdaQueryWrapper<>

https:///program/

2. QueryWrapper<entity>().lambda()

 /**
   * The name is Wang's surname and (age less than 40 and the email address is not empty)
   * name like 'king%' and (age <40 or email in not null)
   * Generated sql statement SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age < ?
   */
 @Test
 public void selectLambda2() {
     LambdaQueryWrapper&lt;User&gt; lambda3 = Wrappers.&lt;User&gt;lambdaQuery();
     (User::getName, "king").and(qw -&gt; (User::getAge, 40).or().isNotNull(User::getEmail));
 
     List&lt;User&gt; users = (lambda3);
     (::println);
 }

3. Wrappers.<entity>lambdaQuery()

/**
      * lambda conditional constructor
      * Generated sql statement SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age < ?
      */
    @Test
    public void selectLambda() {
        //Three ways to create a lambda conditional constructor//        LambdaQueryWrapper&lt;User&gt; lambda2 = new LambdaQueryWrapper&lt;&gt;();
//        LambdaQueryWrapper&lt;User&gt; lambda = new QueryWrapper&lt;User&gt;().lambda();
        LambdaQueryWrapper&lt;User&gt; lambda3 = Wrappers.&lt;User&gt;lambdaQuery();
        (User::getName, "rain").lt(User::getAge, 40);
        List&lt;User&gt; users = (lambda3);
        (::println);


    }
/**
  * The name is Wang's surname and (age less than 40 and the email address is not empty)
  * name like 'king%' and (age <40 or email in not null)
  * Generated sql statement SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age < ?
  */
@Test
public void selectLambda2() {
    LambdaQueryWrapper&lt;User&gt; lambda3 = Wrappers.&lt;User&gt;lambdaQuery();
    (User::getName, "king").and(qw -&gt; (User::getAge, 40).or().isNotNull(User::getEmail));

    List&lt;User&gt; users = (lambda3);
    (::println);


}
/**
  * Custom SQL usage
  * Dao layer code:
  *
  * @Select("select * from ${}")
  * List<User> selectAll(@Param()Wrapper<User> wrapper);
  */
@Test
public void selectLambda4my() {
    LambdaQueryWrapper&lt;User&gt; lambda3 = Wrappers.&lt;User&gt;lambdaQuery();
    (User::getName, "king").and(qw -&gt; (User::getAge, 40).or().isNotNull(User::getEmail));

    List&lt;User&gt; users = (lambda3);
    (::println);


}

Custom SQL in XML is just a single presentation here.

mybatis-plus:  mapper-locations:    - com/mp/mapper/*

UserMapper interface Add method

List<User> selectAll(@Param() Wrapper<User> wrapper);IPage<User> selectUserPage(Page<User> page,@Param()Wrapper<User> wrapper);

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-////DTD Mapper 3.0//EN"
        "/dtd/">
<mapper namespace="">
    <select  resultType="">
        select * from user ${}
    </select>

    <select  resultType="">
        select * from user ${}
    </select>
</mapper>

4. LambdaQueryChainWrapper<entity>(xxxxMapper)

/**
  * The fourth way to create lambda conditional constructor MP 3.0.7 new method
  * Generated sql statement SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age >= ?
  * This example shows that the code is more concise
  * Generated sql statement SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age >= ?
  */
@Test
public void selectLambda3() {
    List&lt;User&gt; users = new LambdaQueryChainWrapper&lt;User&gt;(userMapper)
            .like(User::getName, "rain").ge(User::getAge, 20).list();

    (::println);
}

5. The application of lambda in pagination

MP pagination operation

The baseMapper interface provides two paging methods to implement physical paging (Note: the package that leads MP when leading packages) The first returns the entity object. Allows null. The second person returns the map object. It is mostly used when putting back a field, so as to avoid the null value of the specified field.

IPage<T> selectPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper);
IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper);

Pagination using MP requires configuration classes

package ;

import ;
import ;
import ;

@Configuration
public class MybatisPlusConfig {


    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}
/**
  * Pagination MP Pagination Plugin
  */
@Test
public void selectPage() {
    QueryWrapper&lt;User&gt; queryWrapper = new QueryWrapper&lt;User&gt;();
    ("age", 26);
    //The following parameter false indicates that the total number of records is not queried    Page&lt;User&gt; userPage = new Page&lt;&gt;(1, 2, false);
  /* IPage<User> iPage = (userPage, queryWrapper);
     ("Total Pages"+());
     ("Total record count"+());
     List<User> records = ();
     (::println);
     */
    IPage&lt;Map&lt;String, Object&gt;&gt; iPage = (userPage, queryWrapper);
    ("Total Pages" + ());
    ("Total record count" + ());
    List&lt;Map&lt;String, Object&gt;&gt; records = ();

    (::println);

}

Custom paging

UserMapper interface

IPage<User> selectUserPage(Page<User> page,@Param()Wrapper<User> wrapper);

Add to

<select  resultType="">
    select * from user ${}
</select>
/**
  * Custom paging method
  */
@Test
public void selectMyPage() {
    QueryWrapper&lt;User&gt; queryWrapper = new QueryWrapper&lt;User&gt;();
    ("age", 26);
    //The following parameter false indicates that the total number of records is not queried    Page&lt;User&gt; page = new Page&lt;&gt;(1, 2);

    IPage&lt;User&gt; iPage = (page, queryWrapper);
    ("Total Pages" + ());
    ("Total record count" + ());
    List&lt;User&gt; records = ();
    (::println);
}

This is the end of this article about implementing four lambda expressions in mybatis-plus. For more related content of mybatisplus lambda expressions, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!