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配置多数据源代码实例

    Spring Boot具有很强的扩展性和灵活性,可以轻松地实现多数据源的配置。下面我将分享一个完整的“Spring Boot配置多数据源代码实例”的攻略,步骤如下: 1.在pom.xml中添加如下配置: <dependency> <groupId>org.springframework.boot</groupId> &lt…

    Java 2023年5月31日
    00
  • 了解java中对象基础Object类

    了解Java中对象基础Object类,需要掌握以下知识点: Object类的定义 Object类提供的常用方法 如何使用Object类 Object类的定义 在Java编程语言中,Object类是所有类的超类。如果不明确指定超类,那么所定义的类默认继承Object类。因此,Object类是Java中最基础的类之一,提供了一些非常基础的方法,并且可以被所有其他…

    Java 2023年5月26日
    00
  • java代码实现mysql分表操作(用户行为记录)

    下面是详细讲解“Java代码实现MySQL分表操作(用户行为记录)”的完整攻略: 一、需求背景 在实际应用中,用户行为记录是一项重要的工作。随着用户数量的不断增加,数据量也随之增加,如果所有的用户行为记录都存放在同一张表中,会严重影响数据库的性能。因此,我们需要对用户行为记录进行分表操作,以减轻数据库的压力。 二、分表方案 在分表方案中,我们可以按照时间、用…

    Java 2023年5月20日
    00
  • 一个处理用户登陆的servlet简单实例

    下面我来详细讲解如何实现一个处理用户登录的servlet的完整攻略,包括在Eclipse中的创建项目、编写代码和运行测试等过程。 创建项目和包 首先,我们需要在Eclipse中创建一个Java Web项目,具体步骤如下: 在Eclipse中点击 File > New > Project; 选择“Java Web”项目类型,点击“Next”按钮; …

    Java 2023年6月16日
    00
  • Spring Security 实现用户名密码登录流程源码详解

    下面是关于Spring Security实现用户名密码登录流程源码详解的完整攻略: Spring Security 实现用户名密码登录流程源码详解 什么是 Spring Security Spring Security是基于Spring框架的安全框架,它提供了企业级的安全性,可以防止用户身份被窃取、数据被篡改、应用被攻击等安全问题。它支持各种认证机制,包括基…

    Java 2023年5月20日
    00
  • AndroidHttpClient使用Cookie应用分析

    AndroidHttpClient使用Cookie应用分析 什么是Cookie? 在 Web 开发中,Cookie 是一种常用的技术,可以存储用户的信息,使之可以跟踪用户的在线活动。而在 HTTP 协议中,Cookie 是通过服务器在响应头中发送 Set-Cookie 报文告诉客户端,然后客户端把 Cookie 存储起来,在下次请求时自动发给服务器。 Coo…

    Java 2023年5月30日
    00
  • springboot集成开发实现商场秒杀功能

    下面是详细讲解”springboot集成开发实现商场秒杀功能”的完整攻略。 1. 环境搭建 在开始之前,需要先确保你已经安装了以下环境: JDK1.8及以上 Maven3.3及以上 IDE(比如IntelliJ IDEA、Eclipse) 2. 导入依赖 在pom.xml文件中添加以下依赖: <dependency> <groupId&gt…

    Java 2023年5月19日
    00
  • 从Spring迁移到Spring Boot的方法步骤

    从Spring迁移到SpringBoot主要需要将项目的配置文件进行改造,主要的改造点是将原来手动配置的部分,改为使用SpringBoot提供的依赖自动配置的机制。下面是从Spring迁移到SpringBoot的方法步骤: 1. 配置文件的改造 SpringBoot采用了约定优于配置的原则,它提供了一些默认的配置,让我们可以快速地启动和搭建项目。因此,在迁移…

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