在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的。默认情况下:
public interface UserMapper extends BaseMapper<User> {
}
编写测试类:
@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注解,一些特殊情况除外:
支持的其它属性如下:
其他相关配置: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)