首页 > 其他分享 >MyBatisPlus

MyBatisPlus

时间:2024-07-07 14:00:29浏览次数:15  
标签:MyBatisPlus 用户 id User import com public

目录

引入MybatisPlus的起步依赖

1、引入MybatisPlus依赖,代替Mybatis依赖

2.定义Mapper

常见注解

@TableName:用来指定表名

@Tableld:用来指定表中的主键字段信息

@TableField:用来指定表中的普通字段信息 

使用@TableField的常见场景:

成员变量名与数据库字段名不一致

​编辑

成员变量名以is开头,且是布尔值 

成员变量名与数据库关键字冲突

成员变量不是数据库字段 

常用配置 

条件构造器

基于QueryWrapper的查询

查询出名字中带o的,存款大于等于888元的人的id、username、info、balance字段

更新用户名为jack的用户的余额为1888 

基于UpdateWrapper的更新

自定义SQL

Service接口

 IService的Lambda查询

IService的Lambda更新

批处理方案

代码生成器



引入MybatisPlus的起步依赖

MyBatisPlus官方提供了starter,其中集成了Mybatis和MybatisPlus的所有功能,并且实现了自动装配效果。

1、引入MybatisPlus依赖,代替Mybatis依赖

因此我们可以用MybatisPlus的starter代替Mybatis的starter:

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3.1</version>
        </dependency>

2.定义Mapper

自定义的Mapper继承MybatisPlus提供的BaseMapper接口:

public interface UserMapper extends BaseMapper<User>{

这个泛型是我们要操作的实体类的

可以看到没有写任何代码,也是可以操作数据库的

常见注解

MyBatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库表信息。

  • 类名驼峰转下划线作为表名
  • 名为id的字段作为主键
  • 变量名驼峰转下划线作为表的字段名

MybatisPlus中比较常用的几个注解如下:

@TableName:用来指定表名

假如这个表名叫sys_user

实体类是User

就这样使用

@Tableld:用来指定表中的主键字段信息

IdType枚举:

  • AUTO:数据库自增长
  • INPUT:通过set方法自行输入
  • ASSIGN ID:分配lD,接口ldentifierGenerator的方法nextld来生成id默认实现类为DefaultldentifierGenerator雪花算法

@TableField:用来指定表中的普通字段信息 

使用@TableField的常见场景:

成员变量名与数据库字段名不一致

成员变量名以is开头,且是布尔值 

成员变量名与数据库关键字冲突

成员变量不是数据库字段 

常用配置 

条件构造器

MyBatisPlus支持各种复杂的where条件,可以满足日常开发的所有需求

基于QueryWrapper的查询

查询出名字中带o的,存款大于等于888元的人的id、username、info、balance字段

 

 

更新用户名为jack的用户的余额为1888 

基于UpdateWrapper的更新

更新id为1,2,4的用户的余额,扣200 

 

尽量使用LambdaQueryWrapper和LambdaUpdateWrapper,避免硬编码

QueryWrapper和LambdaQueryWrapper通常用来构建selectdelete、update的where条件部分

UpdateWrapper和LambdaUpdateWrapper通常只有在set语句比较特殊才使用 

自定义SQL

我们可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,然后自己定义SQL语句中剩下的部分。 

1、基于Wrapper构建where条件

2、在mapper方法参数中用Param注解声明wrapper变量名称,必须是ew

3、自定义SQL,并使用Wrapper条件

Service接口

自定义Service接口继承IService接口 

自定义Service实现类,实现自定义接口并继承Servicelmpl类

 例子:

controller层:

package com.yjj.mp.controller;

import cn.hutool.core.bean.BeanUtil;
import com.yjj.mp.domain.dto.UserFormDTO;
import com.yjj.mp.domain.po.User;
import com.yjj.mp.service.MyUserService;
import com.yjj.mp.vo.UserVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@RestController
@Api(tags = "用户管理接口")
@RequestMapping("/users")
@RequiredArgsConstructor
public class UserController {
    @Autowired
    private MyUserService myUserService;

    //新增用户
    @PostMapping
    @ApiOperation("新增用户接口")
    public void saveUser(@RequestBody UserFormDTO userFormDTO){
        User user = new User();
        BeanUtil.copyProperties(userFormDTO,user);
        myUserService.save(user);
    }

    //删除用户
    @DeleteMapping("/{id}")
    @ApiOperation("删除用户接口")
    public void deleteUserById(@PathVariable("id") Long id){
        myUserService.removeById(id);
    }

    //查询用户
    @GetMapping("/{id}")
    @ApiOperation("根据id查询用户接口")
    public UserVO queryUserById(@PathVariable("id") Long id){
        User user = myUserService.getById(id);
        return BeanUtil.copyProperties(user,UserVO.class);

    }

    //批量查询用户
    @GetMapping
    @ApiOperation("根据id批量查询用户接口")
    public List<UserVO> queryUserByIds(@RequestParam ("ids") List<Long> ids){
        List<User> users = myUserService.listByIds(ids);
        return BeanUtil.copyToList(users,UserVO.class);

    }

    @PutMapping("/{id}/deduction/{money}")
    @ApiOperation("扣除用户余额接口")
    public void decuctBalance(@PathVariable("id") Long id,@PathVariable("money") Integer money){
        myUserService.deductBalance(id,money);
    }
}

service接口层:

package com.yjj.mp.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yjj.mp.domain.po.User;

public interface MyUserService extends IService<User> {
    void deductBalance(Long id, Integer money);
}

service层:

package com.yjj.mp.service.Impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yjj.mp.domain.po.User;
import com.yjj.mp.mapper.UserMapper;
import com.yjj.mp.service.MyUserService;
import org.springframework.stereotype.Service;

@Service
public class MyServiceImpl extends ServiceImpl<UserMapper, User> implements MyUserService {

    @Override
    public void deductBalance(Long id, Integer money) {
        //查询用户
        User user = getById(id);
        //校验用户状态
        if (user==null||user.getStatus()==2){
        throw   new RuntimeException("用户状态异常!");
        }
        //校验余额是否充足
        if (user.getBalance()<money){
            throw   new RuntimeException("用户余额不足!");
        }
        //扣减余额
        baseMapper.deductBalance(id,money);
    }
}

 mapper层:

package com.yjj.mp.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import com.yjj.mp.domain.po.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;


public interface UserMapper extends BaseMapper<User> {


   

    @Update("update user set balance=balance-#{money} where id=#{id}")
    void deductBalance(@Param("id") Long id,@Param("money") Integer money);
}

 IService的Lambda查询

实现一个根据复杂条件查询用户的接口,查询条件如下:name:用户名关键字,可以为空、status:用户状态,可以为空、minBalance:最小余额,可以为空、maxBalance:最大余额,可以为空 

controller层

 @GetMapping("/list")
    @ApiOperation("根据复杂条件查询用户接口")
    public List<UserVO> queryUsers(UserQuery query){
        List<User> users = myUserService.queryUsers(query.getName(),query.getStatus(),query.getMinBalance(),query.getMaxBalance());
        return BeanUtil.copyToList(users,UserVO.class);

    }

 service层

@Override
    public List<User> queryUsers(String name, Integer status, Integer minBalance, Integer maxBalance) {
        List<User> list = lambdaQuery()
                .like(name != null, User::getUsername, name)
                .eq(status != null, User::getStatus, status)
                .gt(minBalance != null, User::getBalance, minBalance)
                .lt(maxBalance != null, User::getBalance, maxBalance)
                .list();
        return list;
    }

IService的Lambda更新

改造根据id修改用户余额的接口,要求如下

  • 完成对用户状态校验
  • 完成对用户余额校验
  • 如果扣减后余额为0,则将用户status修改为冻结状态(2)

批处理方案

普通for循环逐条插入速度极差,不推荐

MyBatis-plus的批量新增,基于预编译的批处理,性能不错

配置jdbc参数,开rewriteBatchedStatements,性能最好 

 

代码生成器


这一期就到这里啦

努力遇见更好的自己!!!

标签:MyBatisPlus,用户,id,User,import,com,public
From: https://blog.csdn.net/m0_46702681/article/details/140085726

相关文章

  • MyBatisPlus
    1特点mybatis-plus是在mybatis基础上进行二次封装的一套orm框架,对mybatis只做增强不做改变,不会对项目中原生mybatis代码产生任何影响,完全兼容mybatis;优点:mybatis-plus只需要做简单的配置,即可快速进行单表CRUD操作,无需编写sql语句;mybatis-plus提供了内置插件,提供分页,逻辑......
  • 解决Mybatisplus中没有Db类静态工具的方案--提高版本
    方案:将两个的版本都提高即可解决Mybatis—plus的依赖文件<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3</version></dependency>&......
  • MyBatis-利用切面实现公有字段自动填充(非MyBatisPlus方式)
    需求:在MyBatis框架中,如何对createBy,createTime,updateBy等这些公有字段实现自动填充呢?网上搜了很多,实现的方案全是采用集成MyBatisPlus,利用其封装好的方法来实现的。。。。。数据准备:1、准备一张数据库表CREATETABLE`user`(`id`varchar(36)NOTNULL,`username`......
  • MybatisPlus学习-2
    增删改id生成策略@TableId(Type=IdType.)auto自增noneinput数据库不要自增,代码中需要指定idassign_ID雪花数据库bigint占位1时间戳41机器码(5+5)序列号12assign_UUID全局配置:配置idtypetable-prefix:tb1_save:dao.save(domain)多条删除deletebatchids......
  • MybatisPlus学习-1
    MP入门程序创建配置有MySQL的的springboot项目(不要导入mybatis)添加MPbootstarter依赖3.4.1datasourcedao继承BaseMapperend@testinsert,deletebyid(...L),updata(null不修改),selectbyid,添加lombok依赖@data(包括tostring和hashequal)@Allarg...分页查询配置分页拦......
  • MyBatisPlus全攻略:轻松掌握高级数据库操作
    文章目录基础操作1.基础操作概念2.基础操作示例分页查询1.分页查询概念2.分页查询示例3.分页查询SQL代码条件构造器1.条件构造器概念2.条件构造器示例3.条件构造器SQL代码自动填充1.自动填充概念2.自动填充示例3.自动填充SQL代码代码生成器1.代码生成器......
  • MybatisPlus逆向工程插件,无需编写任何配置文件,只需配置数据库信息,一键生成Entity、Con
    文章目录1.前言2.与其它逆向工程工具相比的优势3.下载插件4.准备工作4.1创建数据库和表(可跳过)4.2配置数据库信息4.2.1打开IDEA的菜单栏4.2.2找到工具,点击ConfigDatabase4.2.3填写连接数据库所需要的信息4.3导入MybatisPlus的Maven依赖和SpringWeb的Maven依......
  • mybatisplus代码生成
    1.引入依赖点击查看代码<!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.......
  • MybatisPlus之继承IService
    有一些简简单单的数据库增删改查还需要Service到Mapper一步步地来吗?答案是否定地,甚至代码都不用实现哦。这就是因为IService接口提供了一些基础功能的实现IService和ServiceImplIService只是一个接口,它并不能实现功能,如果你的service的接口继承它,继承过来的只是接口没有功......
  • MybatisPlus逻辑删除
    逻辑删除就是基于代码逻辑模拟删除效果,但并不会真正删除数据。思路如下:1.在表中添加一个字段标记数据是否被删除2.当删除数据时把标记置为13.查询时只查询标记为0的数据 例如逻辑删除字段为deleted,那么删除操作的sql语句为:UPDATEuserSETdeleted=1WHEREid=1AND......