Kaynağa Gözat

mybatisPlus tinyint <-> boolean

admin 1 yıl önce
ebeveyn
işleme
fd9ead9972

+ 92 - 0
myBatisPlus/pom.xml

@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.example</groupId>
+    <artifactId>myBatisPlus</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.2.2.RELEASE</version>
+    </parent>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.78</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+
+<!--        <dependency>-->
+<!--            <groupId>org.mybatis.spring.boot</groupId>-->
+<!--            <artifactId>mybatis-spring-boot-starter</artifactId>-->
+<!--            <version>2.2.0</version>-->
+<!--        </dependency>-->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.5.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                </configuration>
+            </plugin>
+        </plugins>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <includes>
+                    <include>**/*.properties</include>
+                    <include>**/*.yml</include>
+                </includes>
+                <filtering>true</filtering>
+            </resource>
+            <resource>
+                <directory>src/main/java</directory>
+                <includes>
+                    <include>**/*.properties</include>
+                    <include>**/*.xml</include>
+                </includes>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+    </build>
+</project>

+ 13 - 0
myBatisPlus/src/main/java/org/example/Main.java

@@ -0,0 +1,13 @@
+package org.example;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+@MapperScan(value = "org.example.mapper")
+public class Main {
+    public static void main(String[] args){
+        SpringApplication.run(Main.class, args);
+    }
+}

+ 34 - 0
myBatisPlus/src/main/java/org/example/User.java

@@ -0,0 +1,34 @@
+package org.example;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+
+@Data
+public class User {
+    // 设置的实体类属性和表字段不一致的情况
+    // 使用value属性,将User实体类的id属性改名为user表中对应的uid
+    // 如果不想使用使用雪花算法,就可以使用type属性中的不同主键模式
+    // 选择IdType.AUTO来实现自增效果, !!!!!user表也要将主键uid修改为自增模式!!!!!
+    // 但是由于之前是雪花模式所以是在最后一个雪花id的基础上自增
+    @TableId(value="uid", type = IdType.AUTO)
+    private Long id;
+    @TableField("username")
+    private String name;
+    private Integer age;
+    private String email;
+    @TableLogic
+    private Boolean deleted;
+
+    public User(Long id, String name, Integer age, String email) {
+        this.id = id;
+        this.name = name;
+        this.age = age;
+        this.email = email;
+    }
+
+    public User() {
+    }
+}

+ 19 - 0
myBatisPlus/src/main/java/org/example/config/MybatisPlusConfig.java

@@ -0,0 +1,19 @@
+package org.example.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class MybatisPlusConfig {
+    // 分页插件
+    @Bean
+    public MybatisPlusInterceptor myBatisPlusIntercept() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        interceptor.addInnerInterceptor(new
+                PaginationInnerInterceptor(DbType.MYSQL));
+        return interceptor;
+    }
+}

+ 15 - 0
myBatisPlus/src/main/java/org/example/mapper/UserMapper.java

@@ -0,0 +1,15 @@
+package org.example.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.example.User;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+@Mapper
+public interface UserMapper extends BaseMapper<User> {
+
+    IPage<User> selectPageVo(@Param("page") Page<User> page, @Param("age")Integer age);
+}

+ 22 - 0
myBatisPlus/src/main/java/org/example/mapper/UserMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.example.mapper.UserMapper">
+
+    <resultMap id="BaseResultMap" type="org.example.User">
+
+        <id column="uid" property="id"/>
+
+        <!-- column是数据库表的列名 , property是对应实体类的属性名 -->
+        <result column="username" property="name"/>
+        <result column="is_delete" property="deleted"/>
+    </resultMap>
+
+    <!--SQL片段,记录基础字段-->
+    <sql id="BaseColumns">uid,username,age,email,is_delete</sql>
+    <!--IPage<User> selectPageVo(Page<User> page, Integer age);-->
+    <select id="selectPageVo" resultMap="BaseResultMap" resultType="org.example.User">
+        SELECT <include refid="BaseColumns"></include> FROM user WHERE age > #{age} and is_delete=0
+    </select>
+
+</mapper>

+ 7 - 0
myBatisPlus/src/main/java/org/example/service/UserService.java

@@ -0,0 +1,7 @@
+package org.example.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.example.User;
+
+public interface UserService extends IService<User> {
+}

+ 11 - 0
myBatisPlus/src/main/java/org/example/service/UserServiceImpl.java

@@ -0,0 +1,11 @@
+package org.example.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.example.mapper.UserMapper;
+import org.example.User;
+import org.springframework.stereotype.Service;
+
+
+@Service
+public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
+}

+ 17 - 0
myBatisPlus/src/main/resources/application.yml

@@ -0,0 +1,17 @@
+spring:
+  datasource:
+    # 注意MySQL驱动器的版本
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    # 数据库账号名
+    username: root
+    # 密码
+    password: 5608095liyukun
+    url: jdbc:mysql://127.0.0.1:3306/mybatisplus?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
+
+mybatis-plus:
+  configuration:
+    # 打印SQL信息
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+  # 指定mapper.xml 位置何处
+  mapper-locations:
+    classpath: mapper/**Mapper.xml

+ 45 - 0
myBatisPlus/src/test/java/DeleteTest.java

@@ -0,0 +1,45 @@
+import org.example.Main;
+import org.example.mapper.UserMapper;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@SpringBootTest(classes = Main.class)
+public class DeleteTest {
+    @Resource
+    private UserMapper userMapper;
+
+    @Test
+    public void testDeleteById(){
+        //通过id删除用户信息
+        //DELETE FROM user WHERE id=?
+        int result = userMapper.deleteById(5L);
+        System.out.println("受影响行数:"+result);
+    }
+
+    @Test
+    public void testDeleteBatchIds(){
+        //通过多个id批量删除
+        //DELETE FROM user WHERE id IN ( ? , ? , ? )
+        List<Long> idList = Arrays.asList(1L, 2L, 3L);
+        int result = userMapper.deleteBatchIds(idList);
+        System.out.println("受影响行数:"+result);
+    }
+
+    @Test
+    public void testDeleteByMap(){
+        //这个方法是实现条件删除,使用Map来构建条件语句
+        //根据map集合中所设置的条件删除记录
+        //DELETE FROM user WHERE name = ? AND age = ?
+        Map<String, Object> map = new HashMap<>();
+        map.put("age", 23);
+        map.put("name", "李四");
+        int result = userMapper.deleteByMap(map);
+        System.out.println("受影响行数:"+result);
+    }
+}

+ 31 - 0
myBatisPlus/src/test/java/InsertTest.java

@@ -0,0 +1,31 @@
+import org.example.Main;
+import org.example.User;
+import org.example.mapper.UserMapper;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import javax.annotation.Resource;
+
+@SpringBootTest(classes = Main.class)
+public class InsertTest {
+    @Resource
+    private UserMapper userMapper;
+    @Test
+    public void insertTest(){
+        // 创建user实例
+        User user = new User();
+        // 在上面代码中,我们没有设置id值,
+        // 所以在插入数据的时候,
+        // MyBatisPlus使用了默认的雪花算法,
+        // 雪花算法是基于时间戳+机器ID+流水号实现的,
+        // 这样以保证id尽量不存在相同的
+        // 设置姓名
+        user.setName("fasef");
+        // 设置年龄
+        user.setAge(23);
+        // 设置邮箱
+        user.setEmail("[email protected]");
+        // INSERT INTO user ( id, `name`, age, email ) VALUES ( ?, ?, ?, ? )
+        userMapper.insert(user);
+    }
+}

+ 55 - 0
myBatisPlus/src/test/java/InterceptorTest.java

@@ -0,0 +1,55 @@
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.example.Main;
+import org.example.User;
+import org.example.mapper.UserMapper;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+
+
+import javax.annotation.Resource;
+import java.util.List;
+
+// 分页功能
+
+@SpringBootTest(classes = Main.class)
+public class InterceptorTest {
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Test
+    public void testPage(){
+        //设置分页参数
+        Page<User> page = new Page<>(1, 5);
+        userMapper.selectPage(page, null);
+        //获取分页数据
+        List<User> list = page.getRecords();
+        list.forEach(System.out::println);
+        System.out.println("当前页:"+page.getCurrent());
+        System.out.println("每页显示的条数:"+page.getSize());
+        System.out.println("总记录数:"+page.getTotal());
+        System.out.println("总页数:"+page.getPages());
+        System.out.println("是否有上一页:"+page.hasPrevious());
+        System.out.println("是否有下一页:"+page.hasNext());
+    }
+
+    // 自定义分页
+
+    @Test
+    public void testSelectPageVo(){
+        //设置分页参数
+        Page<User> page = new Page<>(1, 5);
+        userMapper.selectPageVo(page, 20);
+        //获取分页数据
+        List<User> list = page.getRecords();
+        list.forEach(System.out::println);
+        System.out.println("当前页:"+page.getCurrent());
+        System.out.println("每页显示的条数:"+page.getSize());
+        System.out.println("总记录数:"+page.getTotal());
+        System.out.println("总页数:"+page.getPages());
+        System.out.println("是否有上一页:"+page.hasPrevious());
+        System.out.println("是否有下一页:"+page.hasNext());
+    }
+
+}

+ 53 - 0
myBatisPlus/src/test/java/SelectTest.java

@@ -0,0 +1,53 @@
+import org.example.Main;
+import org.example.User;
+import org.example.mapper.UserMapper;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+// 标记为测试类
+@SpringBootTest(classes = Main.class)
+public class SelectTest {
+    // 依赖注入
+    @Resource
+    private UserMapper userMapper;
+
+    // 标记为测试方法
+    @Test
+    public void selectAll(){
+        List<User> list = userMapper.selectList(null);
+        list.forEach(System.out::println);
+    }
+    @Test
+    public void testSelectById(){
+        //根据id查询用户信息
+        //SELECT id,name,age,email FROM user WHERE id=?
+        User user = userMapper.selectById(4L);
+        System.out.println(user);
+    }
+
+    @Test
+    public void testSelectBatchIds(){
+        //根据多个id查询多个用户信息
+        //SELECT id,name,age,email FROM user WHERE id IN ( ? , ? )
+        List<Long> idList = Arrays.asList(4L, 5L);
+        List<User> list = userMapper.selectBatchIds(idList);
+        list.forEach(System.out::println);
+    }
+
+    @Test
+    public void testSelectByMap(){
+        //通过map条件查询用户信息
+        //SELECT id,name,age,email FROM user WHERE name = ? AND age = ?
+        Map<String, Object> map = new HashMap<>();
+        map.put("age", 22);
+        map.put("name", "admin");
+        List<User> list = userMapper.selectByMap(map);
+        list.forEach(System.out::println);
+    }
+}

+ 36 - 0
myBatisPlus/src/test/java/ServiceTest.java

@@ -0,0 +1,36 @@
+import org.example.Main;
+import org.example.User;
+import org.example.service.UserService;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+
+@SpringBootTest(classes = Main.class)
+public class ServiceTest {
+    @Autowired
+    private UserService userService;
+
+    @Test
+    public void testGetCount(){
+        long count = userService.count();
+        System.out.println("总记录数:" + count);
+    }
+
+    @Test
+    public void testSaveBatch(){
+        // SQL长度有限制,海量数据插入单条SQL无法实行,
+        // 因此MP将批量插入放在了通用Service中实现,而不是通用Mapper
+        ArrayList<User> users = new ArrayList<>();
+        for (int i = 0; i < 5; i++) {
+            User user = new User();
+            user.setName("ybc" + i);
+            user.setAge(20 + i);
+            users.add(user);
+        }
+        //SQL:INSERT INTO t_user ( username, age ) VALUES ( ?, ? )
+        userService.saveBatch(users);
+    }
+}

+ 26 - 0
myBatisPlus/src/test/java/UpdateTest.java

@@ -0,0 +1,26 @@
+import org.example.Main;
+import org.example.User;
+import org.example.mapper.UserMapper;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import javax.annotation.Resource;
+
+@SpringBootTest(classes = Main.class)
+public class UpdateTest {
+    @Resource
+    private UserMapper userMapper;
+    @Test
+    public void testUpdateById(){
+        User user = new User(4L, "admin", 22, null);
+        //UPDATE user SET name=?, age=? WHERE id=?
+        int result = userMapper.updateById(user);
+        System.out.println("受影响行数:"+result);
+    }
+
+//    @Test
+//    public void testLogicDeleteById(){
+//        User user = new User(4L, "admin", 22, null);
+//        int result = userMapper.update(user,null);
+//    }
+}

+ 215 - 0
myBatisPlus/src/test/java/WrapperTest.java

@@ -0,0 +1,215 @@
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.example.Main;
+import org.example.User;
+import org.example.mapper.UserMapper;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+@SpringBootTest(classes = Main.class)
+public class WrapperTest {
+
+    @Resource
+    private UserMapper userMapper;
+
+    // 组转查询条件
+    @Test
+    public void test01(){
+        //查询用户名包含a,年龄在20到30之间,并且邮箱不为null的用户信息
+        // SELECT id,username AS name,age,email,is_deleted FROM user WHERE
+        // is_deleted=0 AND (username LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL)
+        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
+        queryWrapper.like("username", "a")
+                .between("age", 20, 30)
+                .isNotNull("email");
+        List<User> list = userMapper.selectList(queryWrapper);
+        list.forEach(System.out::println);
+    }
+
+    // 组装排序条件
+
+    @Test
+    public void test02(){
+        //按年龄降序查询用户,如果年龄相同则按id升序排列
+        //SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE
+        //is_deleted=0 ORDER BY age DESC,id ASC
+        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
+        queryWrapper
+                .orderByDesc("age")
+                .orderByAsc("id");
+        List<User> users = userMapper.selectList(queryWrapper);
+        users.forEach(System.out::println);
+    }
+
+    // 组装删除条件
+    @Test
+    public void test03(){
+        //删除email为空的用户
+        //DELETE FROM user WHERE (email IS NULL)
+        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
+        queryWrapper.isNull("email");
+        //条件构造器也可以构建删除语句的条件
+        int result = userMapper.delete(queryWrapper);
+        System.out.println("受影响的行数:" + result);
+    }
+
+    // 条件优先级
+    @Test
+    public void test04() {
+        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
+        //将(年龄大于20并且用户名中包含有a)或邮箱为null的用户信息修改
+        //UPDATE user SET age=?, email=? WHERE (username LIKE ? AND age > ? OR email IS NULL)
+        queryWrapper
+                .like("username", "a")
+                // gt表示大于
+                .gt("age", 20)
+                .or()
+                .isNull("email");
+        User user = new User();
+        user.setAge(18);
+        user.setEmail("[email protected]");
+        int result = userMapper.update(user, queryWrapper);
+        System.out.println("受影响的行数:" + result);
+    }
+
+    // 组装select子句
+
+    @Test
+    public void test05() {
+        //查询用户信息的username和age字段
+        //SELECT username,age FROM user
+        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
+        queryWrapper.select("username", "age");
+        //selectMaps()返回Map集合列表,通常配合select()使用,避免User对象中没有被查询到的列值
+        //为null
+        List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);
+        maps.forEach(System.out::println);
+    }
+
+    // 实现子查询
+    @Test
+    public void test06() {
+        // 查询id小于等于3的用户信息
+        // SELECT uid,username AS name,age,email,is_deleted FROM user WHERE (id IN (select uid from user where uid <= 3))
+        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
+        queryWrapper.inSql("uid", "select uid from user where uid <= 3");
+        List<User> list = userMapper.selectList(queryWrapper);
+        list.forEach(System.out::println);
+    }
+
+    // UpdateWrapper
+
+    @Test
+    public void test07() {
+        //将(年龄大于20或邮箱为null)并且用户名中包含有a的用户信息修改
+        //组装set子句以及修改条件
+        UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
+        //lambda表达式内的逻辑优先运算
+        updateWrapper
+                .set("age", 18)
+                .set("email", "[email protected]")
+                .like("username", "a")
+                .and(i -> i.gt("age", 20).or().isNull("email"));
+        //这里必须要创建User对象,否则无法应用自动填充。如果没有自动填充,可以设置为null
+        //UPDATE user SET username=?, age=?,email=? WHERE (username LIKE ? AND
+        //(age > ? OR email IS NULL))
+        //User user = new User();
+        //user.setName("张三");
+        //int result = userMapper.update(user, updateWrapper);
+        //UPDATE t_user SET age=?,email=? WHERE (username LIKE ? AND (age > ? OR
+        //email IS NULL))
+        int result = userMapper.update(null, updateWrapper);
+        System.out.println(result);
+    }
+
+    // condition
+
+    @Test
+    public void test08() {
+        //定义查询条件,有可能为null(用户未输入或未选择)
+        String username = "admin";
+        Integer ageBegin = 10;
+        Integer ageEnd = 24;
+        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
+        //StringUtils.isNotBlank()判断某字符串是否不为空且长度不为0且不由空白符(whitespace)
+        //构成
+        if(StringUtils.isNotBlank(username)){
+            System.out.println(username);
+            queryWrapper.like("username",username);
+        }
+        if(ageBegin != null){
+            queryWrapper.ge("age", ageBegin);
+        }
+        if(ageEnd != null){
+            queryWrapper.le("age", ageEnd);
+        }
+        //SELECT id,username AS name,age,email,is_deleted FROM t_user
+        //WHERE (age >=? AND age <=         ?)
+        List<User> users = userMapper.selectList(queryWrapper);
+        users.forEach(System.out::println);
+    }
+
+    // 带condition 参数的重载方法
+
+    @Test
+    public void test08UseCondition() {
+        //定义查询条件,有可能为null(用户未输入或未选择)
+        String username = null;
+        Integer ageBegin = 10;
+        Integer ageEnd = 24;
+        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
+        //StringUtils.isNotBlank()判断某字符串是否不为空且长度不为0且不由空白符(whitespace)
+        //构成
+        queryWrapper
+                .like(StringUtils.isNotBlank(username), "username", username)
+                .ge(ageBegin != null, "age", ageBegin)
+                .le(ageEnd != null, "age", ageEnd);
+        //SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE (age >=
+        //? AND age <= ?)
+        List<User> users = userMapper.selectList(queryWrapper);
+        users.forEach(System.out::println);
+    }
+
+    // LambdaQueryWrapper
+
+    @Test
+    public void test09() {
+        //定义查询条件,有可能为null(用户未输入)
+        String username = "a";
+        Integer ageBegin = 10;
+        Integer ageEnd = 24;
+        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
+        //避免使用字符串表示字段,防止运行时错误
+        queryWrapper
+                .like(StringUtils.isNotBlank(username), User::getName, username)
+                .ge(ageBegin != null, User::getAge, ageBegin)
+                .le(ageEnd != null, User::getAge, ageEnd);
+        List<User> users = userMapper.selectList(queryWrapper);
+        users.forEach(System.out::println);
+    }
+
+    // LambdaUpdateWrapper
+
+    @Test
+    public void test10() {
+        //组装set子句
+        LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper
+                .set(User::getAge, 20)
+                .set(User::getEmail, "[email protected]")
+                .like(User::getName, "a")
+                .and(i -> i.lt(User::getAge, 24).or().isNull(User::getEmail));
+        //lambda表达式内的逻辑优先运算
+        User user = new User();
+        int result = userMapper.update(user, updateWrapper);
+        System.out.println("受影响的行数:" + result);
+    }
+
+}