MybatisPlus
引入依赖
首先,在项目中引入MyBatis-Plus的依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
定义一个实体类,例如User:
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
// 省略getter和setter
}
继承BaseMapper接口:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper<User> {
}
条件构造器
MyBatis-Plus提供了QueryWrapper和LambdaQueryWrapper来构造查询条件。
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("age", 18).like("name", "张");
List<User> userList = userMapper.selectList(wrapper);
使用Lambda方式:
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getAge, 18).like(User::getName, "张");
List<User> userList = userMapper.selectList(wrapper);
通用CRUD
通过BaseMapper接口,可以实现基本的CRUD操作。
// 插入
User user = new User();
user.setName("张三");
user.setAge(18);
userMapper.insert(user);
// 更新
user.setName("李四");
userMapper.updateById(user);
// 删除
userMapper.deleteById(user.getId());
// 查询
User userById = userMapper.selectById(user.getId());
List<User> userList = userMapper.selectList(null);
在MyBatis配置中添加分页插件:
@Configuration
public class MyBatisConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
使用分页:
Page<User> page = new Page<>(1, 10);
Page<User> userPage = userMapper.selectPage(page, null);
乐观锁插件
在实体类中添加@Version注解:
import com.baomidou.mybatisplus.annotations.Version;
public class User {
@Version
private Integer version;
// ...
}
配置乐观锁插件:
@Configuration
public class MyBatisConfig {
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
}
代码生成器
MyBatis-Plus提供了代码生成器,可以自动生成实体类、Mapper接口、Service接口和Controller。
示例代码:
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
public class CodeGenerator {
public static void main(String[] args) {
FastAutoGenerator.create("jdbc:mysql://localhost:3306/mydb", "username", "password")
.globalConfig(builder -> {
builder.author("yourName")
.outputDir(System.getProperty("user.dir") + "/src/main/java")
.fileOverride()
.disableOpenDir();
})
.packageConfig(builder -> {
builder.parent("com.example")
.entity("entity")
.mapper("mapper")
.service("service")
.controller("controller");
})
.strategyConfig(builder -> {
builder.addInclude("user") // 表名
.entityBuilder()
.enableLombok()
.versionColumnName("version")
.logicDeleteColumnName("deleted");
})
.templateEngine(new FreemarkerTemplateEngine())
.execute();
}
}
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决