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

yizhihongxing

以下是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日

相关文章

  • 线程局部变量的作用是什么?

    以下是关于线程局部变量的作用的完整使用攻略: 线程局部变量的作用 线程局部变量是指在多线程编程中,每个线程都拥有自己的变量本,互不干扰的一种变量。线程局部变量可以用来存储线程的状态信息,从而实现线程之间的数据隔离和共享。 线程局部变量的作用主要有以下几个方面: 1. 实现线程之间的数据隔离 在多线程编程中,线程之间的数据隔离是非常重要的。线程局部变量用来存储…

    Java 2023年5月12日
    00
  • Spring注解驱动之ApplicationListener异步处理事件说明

    在Spring应用程序中,我们可以使用ApplicationListener接口来处理应用程序事件。在本文中,我们将详细介绍如何使用ApplicationListener异步处理事件,并提供两个示例说明。 1. ApplicationListener接口 ApplicationListener接口是Spring框架中的一个接口,用于处理应用程序事件。当应用程…

    Java 2023年5月18日
    00
  • Android指纹解锁方法解析

    Android指纹解锁方法解析 简介 在 Android 6.0(API level 23)及以上版本中,Google 加入了指纹识别技术,让 Android 设备拥有了指纹解锁的功能。在 Android 开发中,可以通过使用指纹解锁 API 来实现指纹解锁功能。本攻略将详细介绍如何在 Android 应用中使用指纹解锁 API 实现指纹解锁功能。 指纹解锁…

    Java 2023年5月26日
    00
  • Java实现俄罗斯方块游戏简单版

    Java实现俄罗斯方块游戏简单版攻略 1. 游戏规则 游戏主体是一个10×20的矩形,叫做游戏区域。 有7种俄罗斯方块:O型方块、I型方块、J型方块、L型方块、S型方块、Z型方块和T型方块。 方块从游戏区域的顶端开始落下,用户通过键盘来控制方块的下落、旋转和移动。 方块在落地和碰到已经堆叠的方块后会停止下落。 能够得分的方式是消除已堆叠的完整行,一次可以消除…

    Java 2023年5月19日
    00
  • Java递归算法详解(动力节点整理)

    Java递归算法详解(动力节点整理) 什么是递归? 递归是指在函数的定义中,直接或间接地调用自身的行为。 递归调用的实现过程 递归调用是通过栈实现的,每一次函数调用会将调用时的参数和函数运行的状态信息压入栈中,函数运行完成后,再从栈中弹出上一次调用的信息并恢复上一种状态信息,继续执行下去。 递归调用的分类 递归调用可以分为两类:直接递归和间接递归。 直接递归…

    Java 2023年5月26日
    00
  • js阻止默认浏览器行为与冒泡行为的实现代码

    阻止默认浏览器行为和阻止冒泡事件是JavaScript中常用的操作。在以下的示例中,假设有一个HTML页面和一个按钮,我们将通过代码示例来演示如何阻止默认浏览器行为和阻止冒泡事件。 阻止默认浏览器行为 默认情况下,当用户点击一个链接或提交表单时,浏览器会自动执行一些动作。有时候我们需要阻止这些默认的动作,那么如何实现它呢?下面是一个实现阻止默认行为的示例代码…

    Java 2023年6月15日
    00
  • JAVA SpringBoot统一日志处理原理详解

    JAVA SpringBoot统一日志处理原理详解 在JAVA SpringBoot框架中,通过统一日志处理可以将所有的日志信息都记录下来,并按照指定的格式输出。本文将讲解JAVA SpringBoot统一日志处理的原理和使用方法。 为什么要进行统一日志处理? 在实际开发过程中,我们需要记录很多日志信息,以便我们去检查程序的运行情况,或者是查找问题。然而,如…

    Java 2023年5月19日
    00
  • SpringBoot快速集成jxls-poi(自定义模板,支持本地文件导出,在线文件导出)

    下面是SpringBoot快速集成jxls-poi的完整攻略。 1. jxls-poi简介 jxls-poi是一个基于POI实现Excel导出的工具,可以使用自定义模板导出Excel,并且支持本地文件导出和在线文件导出。 2. 集成jxls-poi到SpringBoot项目 2.1 导入依赖 在SpringBoot项目的pom.xml中添加以下依赖: &lt…

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