当前位置: 首页 > article >正文

项目引入MybatisPlus

文章目录

    • 起步配置:MybatisPlus起步依赖
      • 常见配置:
      • 引入MyBatis-Plus 配置类
    • 实际使用:
      • 实体类常见注解了解:
      • 定义mapper接口
      • Service层编写
      • Controller编写

起步配置:MybatisPlus起步依赖

引入Mybatis的起步依赖(集成有Mybatis和MybatisPlus的所有功能):

<!-- mybatis-plus配置依赖-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
</dependency>

常见配置:

mybatis-plus:
  mapper-locations: classpath*:/mapper/*.xml #mapper文件地址
  type-aliases-package: com.bdps.entity #实体类地址
  configuration:
    map-underscore-to-camel-case: true  # 开启下划线和驼峰命名自动映射
    cache-enabled: false # 是否开启二级缓存
  global-config:
    db-config:
      logic-delete-field: deleted #全据逻辑删除字段
      id-type: assign_id #id是由雪花算法生成
      logic-not-delete-value: 1 #逻辑未删除值
      logic-delete-value: 0 #逻辑已删除值
      update-strategy: not_null #更新策略:只更新非空字段

引入MyBatis-Plus 配置类

用于配置 MyBatis-Plus 拦截器和启用分页功能。

package com.itheima.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;

/**
 * MyBatis-Plus 配置类,用于配置 MyBatis-Plus 拦截器和启用分页功能。
 */
@Configuration
public class MybatisPlusConfig {

    /**
     * 创建并配置 MyBatis-Plus 拦截器 Bean,添加分页插件。
     *
     * @return 配置好的 MyBatis-Plus 拦截器实例
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        // 创建 MyBatis-Plus 拦截器实例
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

        // 添加分页插件,指定数据库类型为 MySQL
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));

        // 返回配置好的拦截器实例
        return interceptor;
    }
}

实际使用:

这里以新增管理员来展示如何使用,MybatisPlus语法就不讲述了

实体类常见注解了解:

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

• @TableName :用来指定表名

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

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

IdType 枚举:

• AUTO :数据库自增长

• INPUT :通过 set 方法自行输入

• ASSIGN_ID :分配 ID ,接口 IdentifierGenerator 的方法 nextId 来

生成 id ,默认实现类为 DefaultIdentifierGenerator 雪花算法

使用 @TableField 的常见场景:

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

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

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

• 成员变量不是数据库字段

列如:

package com.bdps.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("admin")
public class Admin implements Serializable {

    private static final long serialVersionUID = 1L;

    //管理员id
    @TableId(value = "id", type = IdType.AUTO)
    private String id;

    //管理员姓名
    private String name;

    //管理员账号
    private String account;

    //管理员密码
    private String password;

    //管理员手机号码
    private String phone;

    //管理员性别
    private String sex;

    //创建时间
    private String createTime;

    //修改时间
    private String updateTime;

    //逻辑删除
    @TableLogic
    private Integer deleted;

}

定义mapper接口

根据项目的所需的实体类定义mapper

mapper接口基础继承BaseMapper

package com.bdps.mapper;

import com.baomidou.mybatisplus.core.mapper.Mapper;
//管理员mapper
public interface AdminMapper extends Mapper<AdminMapper> {
}

Service层编写

接口这里需要继承IService

//管理员
public interface AdminService extends IService<Admin> {
    /**
     * 新增管理员
     * @param adminDTO
     */
    void saveAdmin(AdminDTO adminDTO);
}

实现类这里继承ServiceImpl<AdminMapper, Admin>,并实现接口

@Service
public class AdminServiceImpl extends ServiceImpl<AdminMapper, Admin> implements AdminService {
    @Autowired
    private RedisUtil redisUtil;
    @Autowired
    private JwtProperties jwtProperties;
    @Autowired
    private AdminMapper adminMapper;

    /**
     * 新增管理员
     * @param adminDTO
     */
    @Override
    public void saveAdmin(AdminDTO adminDTO) {
        //先校验是否存在该账号或者手机号码
        Admin duplicateAdmin=this.getOne(new QueryWrapper<Admin>()
                .eq(PropertyNames.ACCOUNT,adminDTO.getAccount())
                .or()
                .eq(PropertyNames.PHONE,adminDTO.getPhone()));
        if (duplicateAdmin!=null){
            if (duplicateAdmin.getAccount().equals(adminDTO.getAccount())){
                throw new HasException(MessageConstant.ACCOUNT_HAS_EXISTED);
            }
            else if(duplicateAdmin.getPhone().equals(adminDTO.getPhone())){
                throw new HasException(MessageConstant.PHONE_HAS_EXISTED);
            }
        }

        //对象属性拷贝
        Admin admin=new Admin();
        BeanUtils.copyProperties(adminDTO,admin);

        //对密码进行密码加密
        admin.setPassword(DigestUtils.md5DigestAsHex(admin.getPassword().getBytes()));
        //设置创建时间和修改时间
        admin.setCreateTime(LocalDateTime.now());
        admin.setUpdateTime(LocalDateTime.now());

        adminMapper.insert(admin);

    }

}

Controller编写

这里就正常写就可以了

public class adminController {

    @Autowired
    private AdminService adminService;

    @Autowired
    private  RedisUtil redisUtil;

    @Autowired
    private ConfigrarionBean config;
    /**
     * 新增管理员
     * @param adminDTO
     * @return
     */
    @PostMapping
    @ApiOperation("新增管理员")
    public Result saveAdmin(@RequestBody AdminDTO adminDTO){
        log.info("新增管理员:{}",adminDTO);
        adminService.saveAdmin(adminDTO);
        return Result.success();
    }
  }


http://www.kler.cn/a/465487.html

相关文章:

  • 电子应用设计方案86:智能 AI背景墙系统设计
  • 本地测试文件解析
  • 深入浅出 Beam Search:自然语言处理中的高效搜索利器
  • 云效流水线使用Node构建部署前端web项目
  • Java高频面试之SE-08
  • 供需平台信息发布付费查看小程序系统开发方案
  • npm提示Install fail! Error_ EBUSY_ resource busy or
  • STM32G431收发CAN
  • python的urllib模块和http模块
  • stm32f103zet6 ds18b20
  • openbmc sdk09.03 适配(一)
  • 内存卡乱码问题全解析与高效恢复方案
  • 【Java基础】Java数据类型阐述、基本数据类型的占用和范围、二进制的讲述
  • iOS 11 中的 HEIF 图像格式 - 您需要了解的内容
  • tomcat配置存放静态资源,实现网页访问并下载
  • node.js之---CommonJS 模块
  • Monolith - 大规模推荐建模的深度学习框架
  • C#Halcon交互绘制ROI
  • 啥是大模型
  • 【Golang 面试题】每日 3 题(十七)
  • Objective-C语言的软件开发工具
  • 热备份路由HSRP及配置案例
  • 大数据学习(33)-续集
  • 如何配置【Docker镜像】加速器+【Docker镜像】的使用
  • 【踩坑记录】uni-app 微信小程序调试不更新问题解决指南
  • GitHub的简单操作