一句话:MyBatis 的“超强外挂”,让数据库操作更简单!
com.baomidou
mybatis-plus-boot-starter
3.5.7
mysql
mysql-connector-j
8.0.33
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatis_test?useSSL=false&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启 SQL 日志
@Data
@TableName("user_info") // 实体类对应表名
public class User {
@TableId(type = IdType.AUTO) // 主键自增
private Long id;
private String name;
private Integer age;
@TableField("email") // 字段名映射(解决驼峰与下划线问题)
private String email;
}
@Mapper
public interface UserMapper extends BaseMapper {
// 继承 BaseMapper 后,自动获得 CRUD 方法
}
@SpringBootTest
public class UserTest {
@Autowired
private UserMapper userMapper;
// 新增
@Test
void testInsert() {
User user = new User();
user.setName("Alice");
user.setAge(25);
user.setEmail("[email protected]");
userMapper.insert(user); // 自动生成 INSERT 语句
}
// 查询
@Test
void testSelect() {
User user = userMapper.selectById(1L); // SELECT * FROM user WHERE id=1
List users = userMapper.selectList(null); // 查询所有
}
// 分页查询
@Test
void testPage() {
Page page = new Page<>(1, 10); // 第1页,每页10条
userMapper.selectPage(page, null); // 分页自动处理
}
// 更新
@Test
void testUpdate() {
User user = new User();
user.setId(1L);
user.setAge(30);
userMapper.updateById(user); // UPDATE user SET age=30 WHERE id=1
}
}
QueryWrapper(手动指定字段名):
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.gt("age", 20) // WHERE age > 20
.like("name", "张") // AND name LIKE '%张%'
.orderByDesc("create_time");
List users = userMapper.selectList(wrapper);
LambdaQueryWrapper(避免字段硬编码):
LambdaQueryWrapper lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.gt(User::getAge, 20)
.like(User::getName, "李")
.orderByDesc(User::getCreateTime);
List users = userMapper.selectList(lambdaWrapper);
UpdateWrapper updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", 1)
.set("age", 30)
.set("email", "[email protected]");
userMapper.update(null, updateWrapper); // UPDATE user SET age=30, email='..' WHERE id=1
@Select("SELECT * FROM user ${ew.customSqlSegment}")
List selectAll(@Param(Constants.WRAPPER) Wrapper wrapper);
// 使用示例:
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.gt(User::getAge, 18);
List users = userMapper.selectAll(wrapper);
BaseMapper
,自动获得 CRUD 方法,无需手动写 XML。@TableField
的值是否正确。ew
或 @Param(Constants.WRAPPER)