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日

相关文章

  • Springmvc和ajax如何实现前后端交互

    在 Web 开发中,前后端交互是非常重要的。Spring MVC 和 Ajax 可以很好地实现前后端交互。本文将详细讲解 Spring MVC 和 Ajax 如何实现前后端交互的完整攻略,并提供两个示例说明。 1. Spring MVC 和 Ajax 简介 Spring MVC 是一个基于 Java 的 Web 框架,它可以帮助我们构建 Web 应用程序。A…

    Java 2023年5月18日
    00
  • springmvc利用jquery.form插件异步上传文件示例

    针对你的问题,我可以提供以下完整攻略,希望能够帮助你。 一、简介 在web应用中,文件上传功能是比较常见的。而在Spring MVC框架中,文件上传则可以通过SpringMVC提供的MultipartHttpServletRequest类来完成,但是这种方式需要整个页面提交才能上传文件,速度比较慢,因此在前端使用异步上传文件功能可以大幅提升用户体验。而jqu…

    Java 2023年5月31日
    00
  • MyBatis通用Mapper中的通用example(排序)详解

    关于“MyBatis通用Mapper中的通用example(排序)详解”的攻略,我会从以下几个方面进行讲解: 了解通用Mapper 排序方法介绍 示例代码演示 接下来,我会逐一详细讲解。 1. 了解通用Mapper 通用Mapper是 MyBatis 中的一个插件,可以自动化生成针对单表的基础 SQL 操作(增删改查),并且提供了通用的 Example 条件…

    Java 2023年5月20日
    00
  • Spring Boot教程之必须了解的核心概念

    Spring Boot教程之必须了解的核心概念 Spring Boot是一个基于Spring框架的快速开发框架,许多开发人员都选择使用它来进行项目开发。本篇教程将介绍Spring Boot的一些核心概念。 1. 自动配置 Spring Boot使用自动配置的方式,可以大大减轻我们的负担。它会根据classpath中的jar包,自动配置应用程序所需的依赖项。如…

    Java 2023年5月19日
    00
  • Java创建与结束线程代码示例

    创建线程是使用Java多线程的基本步骤之一,可以使用线程类或者实现Runnable接口的线程对象。结束线程可以使用stop方法,但因为此方法可能会导致不可预知的结果而被废弃,因此推荐使用条件退出方式停止线程。 以下是Java创建与结束线程的完整攻略: 创建线程 使用线程类 继承Thread类并实现run方法,run方法中包含当前线程的操作逻辑。然后创建线程对…

    Java 2023年5月18日
    00
  • 用headjs来管理和加载js 提高网站加载速度

    使用headjs来管理和加载JS可以提高网站的加载速度,这是因为headjs通过异步加载JS文件来提高页面渲染的速度。下面是使用headjs来管理和加载JS的完整攻略: 1. 下载并引入headjs 首先,需要下载head.js库,并在网页中引入该文件,可以使用CDN来引入该文件,如下所示: <script src="https://cdn.…

    Java 2023年6月15日
    00
  • 解决try-catch捕获异常信息后Spring事务失效的问题

    解决try-catch捕获异常信息后Spring事务失效的问题,需要做以下几个步骤: 1. 开启对事务的支持 将事务注解开启,可以使用在类或方法级别上使用事务注解: @Configuration @EnableTransactionManagement public class AppConfig { // … } 2. 设置事务传播属性 使用@Tran…

    Java 2023年5月25日
    00
  • 读取Java文件到byte数组的三种方法(总结)

    这里为您详细讲解“读取Java文件到byte数组的三种方法(总结)”的完整攻略。 什么是“读取Java文件到byte数组”? 将 Java 文件读取为 byte 数组可以用于在编程中进行很多操作,比如文件传输、加密等。在 Java 中,我们可以通过多种方式来实现这一目的,下面将介绍三种常用的方法。 方法一:使用FileInputStream和ByteArra…

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