Mybatis-plus在项目中的简单应用

以下是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技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Spring Boot中使用JDBC Templet的方法教程

    下面是Spring Boot中使用JDBC Template的方法教程。 简介 JDBC Template是Spring框架提供的一种用于简化JDBC操作的工具,它封装了许多常见的JDBC操作,使得开发人员能够通过简单的代码实现JDBC数据访问。本教程将介绍在Spring Boot项目中如何使用JDBC Template进行数据访问。 步骤 以下是使用JDB…

    Java 2023年5月20日
    00
  • Java线程池高频面试题总结

    Java线程池高频面试题总结 线程池是什么 线程池是一种用于管理多个线程的机制,它能够根据应用程序需要动态地增减线程。线程池在执行完任务后并不会立即销毁线程,而是将线程放入池中等待下一次使用。线程池通常会预先准备好一定数量的线程,这些线程被称为核心线程,在需要时更多的线程将被创建。 为什么使用线程池 线程池有以下优点: 减少线程创建的开销: 创建线程需要花费…

    Java 2023年5月19日
    00
  • Spring boot2.0 日志集成方法分享(1)

    Spring Boot2.0 日志集成方法分享(1) 在Spring Boot2.0中,我们可以使用多种方式来集成日志框架,如Logback、Log4j2、Java Util Logging等。本文将详细讲解Spring Boot2.0日志集成方法的完整攻略,并提供两个示例。 1. 集成Logback 以下是集成Logback的基本流程: 在pom.xml文…

    Java 2023年5月15日
    00
  • java输出镂空金字塔实现案例

    下面是实现java输出镂空金字塔的完整攻略。 需求说明 我们需要实现一个程序,能够打印出指定层数的镂空金字塔。例如,当我们指定金字塔总层数为5时,程序应该输出如下图所示的镂空金字塔: * * * * * * * * * * * * * * * * * * * * * * * * 实现步骤 确定金字塔的总层数n,同时计算出金字塔每一层的空格数和星号数。空格数的…

    Java 2023年5月26日
    00
  • Spring Cloud升级最新Finchley版本的所有坑

    Spring Cloud升级最新Finchley版本的所有坑 升级Spring Cloud版本是一个具有一定挑战性的任务,本篇文章主要介绍在升级Spring Cloud到最新版本Finchley时的几个注意事项及相关解决方案。 1. 升级前的准备工作 在升级Spring Cloud前,需要先了解当前的Spring Boot版本与Spring Cloud版本之…

    Java 2023年5月20日
    00
  • SpringBoot分页的实现与long型id精度丢失问题的解决方案介绍

    针对SpringBoot分页的实现与long型id精度丢失问题的解决方案,我提供以下完整攻略: SpringBoot分页的实现 SpringBoot中分页的实现可以通过Pageable和Page进行操作。 1、Pageable Pageable是一个接口,我们可以通过PageRequest类来实例化这个接口。 Pageable pageable = Page…

    Java 2023年5月20日
    00
  • 浅谈Maven的安装及修改为阿里云下载依赖

    下面是详细的“浅谈Maven的安装及修改为阿里云下载依赖”的完整攻略。 一、Maven的安装 下载Maven:打开官方网站 https://maven.apache.org/download.cgi 找到最新的 Maven 安装包,选择apache-maven-x.x.x-bin.zip下载。 安装Maven:将下载的 Maven 安装包解压到指定目录下(如…

    Java 2023年5月20日
    00
  • 简单了解java函数式编码结构及优势

    简单了解Java函数式编码结构及优势 前言 在 Java 8 中,函数式编程成为了一个重大的特性。这项特性使得开发人员可以写出更具有简洁性、清晰性和可维护性的代码。在本篇攻略中,我们将简单了解 Java 函数式编码的结构和优势。 函数式编码结构 Lambda 表达式 Lambda 表达式是 Java 8 中最重要的一个特性,是一种简洁地表示函数的方法。它可以…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部