以下是Mybatis-plus在项目中的简单应用攻略:
1. 简介
Mybatis-plus是Mybatis的增强工具,它大大简化了Mybatis的使用。Mybatis-plus提供了各种方便的功能,如:自动生成代码、分页查询、乐观锁、多租户等。
2. 安装
在Maven项目中使用Mybatis-plus,需在pom.xml中添加相关依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
3. 代码生成
Mybatis-plus提供了代码自动生成工具,可以快速生成实体类、Mapper接口和XML文件。
public class CodeGeneratorDemo {
public static void main(String[] args) {
AutoGenerator generator = new AutoGenerator();
// 数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mybatis_plus_demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("root");
dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
generator.setDataSource(dataSourceConfig);
// 包配置
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("com.example.demo");
generator.setPackageInfo(packageConfig);
// 策略配置
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setInclude("user"); //要生成的表名
generator.setStrategy(strategyConfig);
// 全局配置
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
globalConfig.setAuthor("authorName");
globalConfig.setOpen(false);
generator.setGlobalConfig(globalConfig);
generator.execute();
}
}
以上代码生成器Demo设置的是数据源jdbc:mysql://localhost:3306/mybatis_plus_demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai,所以要先在电脑上安装好MySQL,并配置好数据库表信息。
4. 实体类
Mybatis-plus提供了强大的实体类功能,可以通过注解轻松实现基本的CRUD操作。以下是一个示例:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
}
5. Mapper接口
Mybatis-plus通过注解方式编写Mapper接口,提供了丰富的CRUD操作方法。以下是一个示例:
public interface UserMapper extends BaseMapper<User> {
}
6. Service
Service层主要业务逻辑,将Mapper接口与Controller解耦。以下是一个示例:
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
7. Controller
Controller层主要处理web请求、响应和调用Service层方法,负责将前端传递的参数传递到Service层。 以下是一个示例:
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/get/{id}")
public User getUserById(@PathVariable("id") Long id) {
return userService.getById(id);
}
@PostMapping("/save")
public boolean saveUser(@RequestBody User user) {
return userService.save(user);
}
@PutMapping("/update")
public boolean updateUser(@RequestBody User user) {
return userService.updateById(user);
}
@DeleteMapping("/delete/{id}")
public boolean deleteUser(@PathVariable("id") Long id) {
return userService.removeById(id);
}
}
8. 分页查询
Mybatis-plus提供了方便的分页查询功能,可以轻松实现分页功能。以下是一个示例:
@GetMapping("/list")
public IPage<User> getUserList(@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(value = "name", required = false) String name) {
Page<User> page = new Page<>(pageNo, pageSize);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
if (StringUtils.isNotBlank(name)) {
queryWrapper.like("name", name);
}
return userService.page(page, queryWrapper);
}
9. 多租户
Mybatis-plus提供了多租户功能,可以轻松实现多租户,让不同租户的数据得到隔离。以下是一个示例:
@Component
public class TenantLineHandler implements MybatisPlusPropertiesCustomizer {
@Override
public void customize(MybatisPlusProperties properties) {
properties.setSqlInjector(new TenantSqlInjector()); //设置租户SQL注入器
TenantLineInnerInterceptor tenantLineInnerInterceptor = new TenantLineInnerInterceptor();
tenantLineInnerInterceptor.setTenantLineHandler(new TenantLineHandler() { //设置租户变量名
@Override
public Expression getTenantId() {
return new LongValue(WebUtils.getTenantId());
}
@Override
public String getTenantIdColumn() {
return "tenant_id";
}
@Override
public boolean isIgnoreTable(String tableName) {
return false;
}
});
properties.setInterceptor(new Interceptor[]{tenantLineInnerInterceptor});
}
}
需要在使用的插件处加上租户标记,示例代码:
public class TenantSqlInjector extends AbstractSqlInjector {
public static final String tenantMethod = "<script>\nSELECT id,name,age,email FROM user WHERE tenant_id = #{tenantId}\n</script>";
@Override
public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
List<AbstractMethod> methodList = new ArrayList<>();
SqlMethod sqlMethod = SqlMethod.SELECT_LIST;
String additional = "selectListWithTenantId";
methodList.add(new AbstractMethod() {
@Override
public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo, SqlMethod sqlMethod) {
String sql = String.format(tenantMethod, sqlMethod.getSql());
SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
return addSelectMappedStatementForTable(mapperClass, additional, sqlSource, tableInfo);
}
});
return methodList;
}
}
以上是Mybatis-plus在项目中的简单应用攻略,涉及代码生成、实体类、Mapper接口、Service、Controller、分页查询以及多租户,可以参照上述示例进行开发。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mybatis-plus在项目中的简单应用 - Python技术站