项目引入MybatisPlus

文章目录

起步配置:MybatisPlus起步依赖

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

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

常见配置:

java 复制代码
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 拦截器和启用分页功能。

java 复制代码
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 开头,且是布尔值

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

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

列如:

java 复制代码
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

java 复制代码
package com.bdps.mapper;

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

Service层编写

接口这里需要继承IService

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

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

java 复制代码
@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编写

这里就正常写就可以了

plain 复制代码
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();
    }
  }
相关推荐
小林学习编程17 分钟前
SpringBoot校园失物招领信息平台
java·spring boot·后端
撸码到无法自拔18 分钟前
docker常见命令
java·spring cloud·docker·容器·eureka
heart000_134 分钟前
IDEA 插件推荐:提升编程效率
java·ide·intellij-idea
ŧ榕树先生1 小时前
查看jdk是否安装并且配置成功?(Android studio安装前的准备)
java·jdk
未来的JAVA高级开发工程师1 小时前
适配器模式
java
LUCIAZZZ1 小时前
JVM之内存管理(一)
java·jvm·spring·操作系统·springboot
D_aniel_2 小时前
排序算法-计数排序
java·排序算法·计数排序
极小狐2 小时前
极狐GitLab 通用软件包存储库功能介绍
java·数据库·c#·gitlab·maven
旧故新长2 小时前
Browserless 快速上手
java
java1234_小锋2 小时前
Spring Bean有哪几种配置方式?
java·后端·spring