MP入门案例

MP入门案例

为什么使用MP

MP即==MyBatisPlus==,可以对Mybatis进行改造

1
2
3
4
5
6
7
8
9
10
11
12
public interface UserMapper {

void saveUser(User user);

void deleteUser(Long id);

void updateUser(User user);

User queryUserById(@Param("id") Long id);

List<User> queryUserByIds(@Param("ids") List<Long> ids);
}
  • 这些SQL语句对应的xml文件虽然不难,但是繁琐

怎么使用MP呢

  1. 引入MP依赖
    MP官方提供了starter,其中集成了Mybatis和MP的所有功能,并且实现了自动装配的效果。
    因此我们可以用MybatisPlus代替Mybatis的starter:
1
2
3
4
5
6
<!--MybatisPlus--> 
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
  1. 定义Mapper
    自定义的Mapper继承MybatisPlus提供的BeanMapper接口:
    注意:在继承的时候要注意实体类为你的实体类的类型,只有这样才知道你的增删改查操作的是哪个实体
1
2
3
public interface UserMapper extends BaseMapper<User> {

}

继承之后这些方法就都可以直接用了
1.png

MP常见注解

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

1
2
3
4
// 就是这个
public interface UserMapper extends BaseMapper<User> {

}

通过==反射==拿到对应的字节码信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import lombok.Data;
import java.time.LocalDateTime;

@Data
public class User {
private Long id;
private String username;
private String password;
private String phone;
private String info;
private Integer status;
private Integer balance;
private LocalDateTime createTime;
private LocalDateTime updateTime;
}

有如下规定

  • 美名驼峰转下划线为表名
  • 名为id字段作为主键
  • 变量名驼峰转下划线作为表的字段名
    若不符合以上规定,可以使用MP常用的几个注解
  • @TableName:用来指定表名
  • @TableId:用来指定表中的主键字段信息
  • @TableField:用来指定表中的普通字段信息
    注意:
  1. 一定要有主键,不然将来MP找不到主键,无法进行增删改查操作
  2. 主键自增长
  • AUTO:数据库自增长
  • INPUT:通过set方法自行输入
  • ASSIGN_ID:分配ID 接口IdentifierGenerator的方法nextId来生成id,默认实现类为DefaultIdentifierGenerator雪花算法

使用@TableField的常见场景:

  • 成员变量名与数据库字段名不一致
  • 成员变量名以is开头,且是布尔值
  • 成员变量名与数据库关键字冲突
  • 成员变量不是数据库字段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@TableName("tb_user")
public class User implements Serializable {

@TableId(value = "id", type = IdType.AUTO)
private Long id;

@TableField("username")
private String name;

@TableField("is_married")
private Boolean isMarried;

@TableField("`order`")
private Integer order;

@TableField(exist = false)
private String address;
}

MP常见配置

1
2
3
4
5
6
7
8
9
10
mybatis-plus:
type-aliases-package: com.it.mp.domain.po # 别名扫描包
mapper-locations: "classpath*:/mapper/**/*.xml" # Mapper.xml文件地址,默认值
configuration:
map-underscore-to-camel-case: true # 是否开启下划线和驼峰的映射
cache-enabled: false # 是否开启二级缓存
global-config:
db-config:
id-type: assign_id # id为雪花算法生成
update-strategy: not_null # 更新策略:只更新非空字段

具体可参考官方文档:使用配置 | MyBatis-Plus (baomidou.com)