MybatisPlus使用
起步配置: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 #更新策略:只更新非空字段
实际使用:
这里以新增管理员来展示如何使用,MybatisPlus语法就不讲述了
实体类常见注解了解:
:::info
MybatisPlus 中比较常用的几个注解如下:
• @TableName :用来指定表名
• @TableId :用来指定表中的主键字段信息
• @TableField :用来指定表中的普通字段信息
:::
:::info
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();
}
}