配置
在application.yaml中修改jdbc参数:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mp
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
引入依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
使用
MybatisPlus提供了一个BaseMapper接口,其中已经实现了单表的CRUD:

我们自定义的Mapper只要实现了这个BaseMapper,就无需自己实现单表CRUD了。
泛型中的 User 就是与数据库对应的 Java 类(PO)。
MybatisPlus根据PO实体的信息来推断出表的信息,从而生成SQL的。默认情况下:
- MybatisPlus会把PO实体的类名驼峰转下划线作为表名
- MybatisPlus会把PO实体的所有变量名驼峰转下划线作为表的字段名,并根据变量类型推断字段类型
- MybatisPlus会把名为id的字段作为主键
public interface UserMapper extends BaseMapper<User> {
}
编写测试类:
这里可以结合 MybatisX 插件提高开发效率
如果使用了 Junit ,可以直接在 service 类名上 alt+ enter,可以看到一个 create test,然后根据自己所选的配置就可以生成 对应的测试类了。
这里要注意:我们要将测试类的包名和上面的包名保持一致。
然后在为 下面的 user 设置值时,可以用一个插件 generateAllSetter,快速生成 setter。之后在 user 按 alt + enter,就可以看到一个 generate all setter with default value ,选择就可快速创建 setter。
@SpringBootTest
class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
void testInsert() {
User user = new User();
user.setId(5L);
user.setUsername("Lucy");
user.setPassword("123");
user.setPhone("18688990011");
user.setBalance(200);
user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");
user.setCreateTime(LocalDateTime.now());
user.setUpdateTime(LocalDateTime.now());
userMapper.insert(user);
}
@Test
void testSelectById() {
User user = userMapper.selectById(5L);
System.out.println("user = " + user);
}
@Test
void testSelectByIds() {
List<User> users = userMapper.selectBatchIds(List.of(1L, 2L, 3L, 4L, 5L));
users.forEach(System.out::println);
}
@Test
void testUpdateById() {
User user = new User();
user.setId(5L);
user.setBalance(20000);
userMapper.updateById(user);
}
@Test
void testDelete() {
userMapper.deleteById(5L);
}
}
上面说到 MybatisPlus 会自动把PO实体的类名驼峰转下划线作为表名。但是如果我们在数据库字段本身就使用了驼峰命名,那么就需要关闭自动转换配置。
mybatis-plus:
configuration:
map-underscore-to-camel-case: false

常用注解:
以下是Mybatisx自动生成的model。包含常用注解:@TableName,@TableId, @TableField。
/**
* 用户表
* @TableName user
*/
@TableName(value ="user")
@Data
public class User implements Serializable {
/**
*
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 用户昵称
*/
private String username;
/**
* 账号
*/
private String userAccount;
/**
* 用户头像
*/
private String avatarUrl;
/**
* 性别
*/
private Integer gender;
/**
* 密码
*/
private String userPassword;
/**
* 邮箱
*/
private String email;
/**
* 状态 0-正常
*/
private Integer userStatus;
/**
* 电话
*/
private String phone;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 是否删除
*/
@TableLogic
private Integer isDelete;
/**
* 用户角色 0 - 普通用户 1 - 管理员
*/
private Integer userRole;
/**
* 用户编号
*/
private String userCode;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
@Tablename:
- 描述:表名注解,标识实体类对应的表
- 使用位置:实体类
TableName注解除了指定表名以外,还可以指定很多其它属性:

@TableId:
- 描述:主键注解,标识实体类中的主键字段
- 使用位置:实体类的主键字段
TableId注解支持两个属性:

IdType支持的类型有:

@TableField:
描述:普通字段注解
一般情况下我们并不需要给字段添加@TableField注解,一些特殊情况除外:
- 成员变量名与数据库字段名不一致
- 成员变量是以isXXX命名,按照JavaBean的规范,MybatisPlus识别字段时会把is去除,这就导致与数据库不符。
- 成员变量名与数据库一致,但是与数据库的关键字冲突。使用@TableField注解给字段名添加转义字符:``
支持的其它属性如下:

其他相关配置:MybatisPlus配置
比如逻辑删除:
mybatis-plus:
global-config:
db-config:
logic-delete-field: isDelete # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
2647

被折叠的 条评论
为什么被折叠?



