mybatisplus 示例练习2 Wrapper

125 篇文章 0 订阅
40 篇文章 0 订阅

新建springboot工程

导入依赖

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

 配置

application.properties

#springboot默认数据源
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimeZone=UTC
spring.datasource.username=root
spring.datasource.password=mysql123
#默认日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#数据库表前缀
mybatis-plus.global-config.db-config.table-prefix=p_
#主键自增策略,mysql自增
mybatis-plus.global-config.db-config.id-type=auto

数据库,建表

drop table if exists p_user;
create table p_user(
	uid bigint(20) not null auto_increment,
	user_name varchar(20) not null,
	age int(11),
	email varchar(50),
	is_deleted tinyint default 0 comment '逻辑删除,0未删除,1删除',
	primary key(uid)
);

insert into p_user(uid,user_name,age,email) values (null,'a1',22,'xx@xx.com');
insert into p_user(uid,user_name,age,email) values (null,'a2',20,'xx@xx.com');
insert into p_user(uid,user_name,age,email) values (null,'b1',23,'xx@xx.com');
insert into p_user(uid,user_name,age,email) values (null,'b2',10,'xx@xx.com');
insert into p_user(uid,user_name,age,email) values (null,'c3',30,'xx@xx.com');

实体类

User.java

package com.shrimpking.pojo;


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 com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/10 10:53
 */
@Data
@TableName("p_user")
public class User
{
    /**
     * @TableId注解,表示数据库主键字段的名称,
     * type表示主键采取mysql自增
     * IdType = ASSIGN_ID就是雪花算法
     */
    @TableId(value = "uid",type = IdType.AUTO)
    private Long id;

    /**
     * 指定对应数据库表的字段名称
     */
    @TableField("user_name")
    private String name;

    private Integer age;

    private String email;

    /**
     * 指定逻辑删除的字段
     */
    @TableLogic
    private Integer isDeleted;
}

Mapper接口

UserMapper.java

package com.shrimpking.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.shrimpking.pojo.User;
import org.springframework.stereotype.Repository;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/10 11:00
 */
@Repository
public interface UserMapper extends BaseMapper<User>
{

}

UserMapper.xml

<?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="com.shrimpking.mapper.UserMapper">



</mapper>

UserService.java

package com.shrimpking.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.shrimpking.pojo.User;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/10 11:03
 */

public interface UserService extends IService<User>
{
}

UserServiceImpl.java

package com.shrimpking.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.shrimpking.mapper.UserMapper;
import com.shrimpking.pojo.User;
import com.shrimpking.service.UserService;
import org.springframework.stereotype.Service;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/10 11:04
 */
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService
{

}

测试

MapperTest.java

package com.shrimpking;

import com.shrimpking.mapper.UserMapper;
import com.shrimpking.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/10 11:29
 */
@SpringBootTest
public class MapperTest
{
    @Autowired
    private UserMapper userMapper;

    @Test
    public void testInsert()
    {
        //INSERT INTO p_user ( name, age ) VALUES ( ?, ? )
        //INSERT INTO p_user ( user_name, age ) VALUES ( ?, ? )
        User user = new User();
        user.setName("zz");
        user.setAge(33);
        int result = userMapper.insert(user);
        System.out.println("result:" + result);
        System.out.println(user.getId());
    }

    @Test
    public void testDelete()
    {
        //UPDATE p_user SET is_deleted=1 WHERE uid=? AND is_deleted=0
        //逻辑删除一个用户
        int result = userMapper.deleteById(1L);
        System.out.println("result:" + result);
    }

    @Test
    public void testSelect()
    {
        //SELECT uid AS id,user_name AS name,age,email,is_deleted FROM p_user WHERE is_deleted=0
        //开启逻辑删除后,查询用户自动屏蔽已删除的
        List<User> userList = userMapper.selectList(null);
        userList.forEach(System.out::println);
    }


}

ServiceTest.java

package com.shrimpking;

import com.shrimpking.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/10 11:05
 */
@SpringBootTest
public class ServiceTest
{

    @Autowired
    private UserService userService;

    @Test
    public void test()
    {
        //SELECT COUNT( * ) FROM p_user
        //查询总记录
        long count = userService.count();
        System.out.println(count);
    }
}

WrapperTest.java

package com.shrimpking;

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 com.shrimpking.mapper.UserMapper;
import com.shrimpking.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;
import java.util.Map;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/10 12:05
 */
@SpringBootTest
public class wrapperTest
{
    @Autowired
    private UserMapper userMapper;

    @Test
    public void test1()
    {
        //查询用户名中包含字母a,年龄在20到30岁之间,且邮箱不为空的用户
        //SELECT uid AS id,user_name AS name,age,email,is_deleted
        // FROM p_user WHERE is_deleted=0
        // AND (user_name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("user_name","a")
                .between("age",20,30)
                .isNotNull("email");
        List<User> userList = userMapper.selectList(queryWrapper);
        for (User user : userList)
        {
            System.out.println(user);
        }

    }

    @Test
    public void test2()
    {
        //查询用户,先按照年龄进行降序排序,在按照id升序排序
        //SELECT uid AS id,user_name AS name,age,email,is_deleted
        // FROM p_user WHERE is_deleted=0 ORDER BY age DESC,uid ASC
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.orderByDesc("age")
                .orderByAsc("uid");
        List<User> userList = userMapper.selectList(queryWrapper);
        for (User user : userList)
        {
            System.out.println(user);
        }
    }

    @Test
    public void test3()
    {
        //删除年龄小于10岁的用户
        //UPDATE p_user SET is_deleted=1 WHERE is_deleted=0 AND (age <= ?)
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.le("age",10);
        int result = userMapper.delete(queryWrapper);
        System.out.println("result:" + result);

    }


    @Test
    public void test4()
    {
        //修改年龄大于等于20,用户名包含字母a,或邮箱为空的用户
        //UPDATE p_user SET user_name=?, email=? WHERE is_deleted=0
        // AND (age >= ? AND user_name LIKE ? OR email IS NULL)
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.ge("age",20)
                .like("user_name","a")
                .or()
                .isNull("email");
        User user = new User();
        user.setName("修改");
        user.setEmail("zhang@163.com");
        int result = userMapper.update(user, queryWrapper);
        System.out.println("result:" + result);

    }

    @Test
    public void test5()
    {
        //修改用户名中包含字母b且(年龄大于20或邮箱为空)的用户
        //UPDATE p_user SET user_name=?, email=? WHERE is_deleted=0
        // AND (user_name LIKE ? AND (age >= ? OR email IS NULL))
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("user_name","b")
                .and(
                        param->param.ge("age",20)
                                .or()
                                .isNull("email")
                );
        User user = new User();
        user.setName("李四");
        user.setEmail("lisi@qq.com");
        int result = userMapper.update(user, queryWrapper);
        System.out.println("result:" + result);

    }

    @Test
    public void test6()
    {
        //只查询某些字段
        //SELECT user_name,age,email FROM p_user WHERE is_deleted=0
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.select("user_name","age","email");
        List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);
        maps.forEach(System.out::println);
    }

    @Test
    public void test7()
    {
        //如何子查询
        //查询用户id小于100 的用户
        //SELECT uid AS id,user_name AS name,age,email,is_deleted
        // FROM p_user WHERE is_deleted=0
        // AND (uid IN (select uid from p_user where uid<=100))
        QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
        queryWrapper.inSql("uid","select uid from p_user where uid<=100");
        List<User> userList = userMapper.selectList(queryWrapper);
        userList.forEach(System.out::println);

    }

    @Test
    public void test8()
    {
        //如何使用udateWrapper
        //修改用户名包含c ,(年龄大于20或邮箱为空)的用户
        //UPDATE p_user SET user_name=?,email=? WHERE is_deleted=0
        // AND (user_name LIKE ? AND (age > ? OR email IS NULL))
        UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
        updateWrapper.like("user_name","c")
                .and(
                        param->param.gt("age",20)
                        .or()
                        .isNull("email")
                );
        updateWrapper.set("user_name","曹操").set("email","cc@cc.com");
        int result = userMapper.update(null, updateWrapper);
        System.out.println("result:" + result);

    }

    @Test
    public void test9()
    {
        //模拟浏览器传值
        String username = "";
        Integer ageBegin = 20;
        Integer ageEnd = 30;

        //SELECT uid AS id,user_name AS name,age,email,is_deleted
        // FROM p_user WHERE is_deleted=0 AND (age >= ? AND age <= ?)
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        if(StringUtils.isNotBlank(username))
        {
            //判断某个字符串,是否不为空字符串,不为null,不为空白符
            queryWrapper.like("user_name",username);
        }
        if(ageBegin != null)
        {
            queryWrapper.ge("age",ageBegin);
        }
        if(ageEnd != null)
        {
            queryWrapper.le("age",ageEnd);
        }
        List<User> userList = userMapper.selectList(queryWrapper);
        userList.forEach(System.out::println);


    }

    @Test
    public void test10()
    {
        //模拟浏览器传值
        //优化上面的方法
        String username = "";
        Integer ageBegin = 20;
        Integer ageEnd = 30;

        //SELECT uid AS id,user_name AS name,age,email,is_deleted
        // FROM p_user WHERE is_deleted=0 AND (age >= ? AND age <= ?)
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like(StringUtils.isNotBlank(username),"user_name",username)
                .ge(ageBegin != null,"age",ageBegin)
                .le(ageEnd != null,"age",ageEnd);
        List<User> userList = userMapper.selectList(queryWrapper);
        for (User user : userList)
        {
            System.out.println(user);
        }
    }

    @Test
    public void test11()
    {
        //模拟浏览器传值
        String username = "";
        Integer ageBegin = 20;
        Integer ageEnd = 30;

        //使用拉姆达查询构造器,字段名称容易写错,改用拉姆达获取属性的方式
        //SELECT uid AS id,user_name AS name,age,email,is_deleted
        // FROM p_user WHERE is_deleted=0 AND (age >= ? AND age <= ?)
        LambdaQueryWrapper<User> lambdaQueryWrapper
                = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.like(StringUtils.isNotBlank(username),User::getName,username)
                .ge(ageBegin != null,User::getAge,ageBegin)
                .le(ageEnd != null,User::getAge,ageEnd);
        List<User> userList = userMapper.selectList(lambdaQueryWrapper);
        userList.forEach(System.out::println);

    }

    @Test
    public void test12()
    {
        //使用拉姆达构造器,如何修改用户
        //修改年龄大于20,用户名包含修,或者邮箱为空的用户
        //UPDATE p_user SET user_name=?,email=? WHERE is_deleted=0
        // AND (user_name LIKE ? AND age >= ? OR email IS NULL)
        LambdaUpdateWrapper<User> lambdaUpdateWrapper
                = new LambdaUpdateWrapper<>();
        lambdaUpdateWrapper.like(User::getName,"修")
                .ge(User::getAge,20)
                .or()
                .isNull(User::getEmail);
        lambdaUpdateWrapper.set(User::getName,"再改")
                .set(User::getEmail,"zai@zai.com");

        int result = userMapper.update(null, lambdaUpdateWrapper);
        System.out.println("result:" + result);

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虾米大王

有你的支持,我会更有动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值