Mybatis-Plus的基本使用

这个作业属于哪个课程 2021春软件工程实践|S班
这个作业要求在哪里 软件工程实践总结&个人技术博客
这个作业的目标 进行软工实践总结,对自己最擅长的一个相关技术,进行分析描述并总结
其他参考文献 CSDN、简书等

目录

技术概述

Mybatis-Plus是为简化开发、提高效率而生,可直接调用其封装好的有关数据库的操作的方法。在此次团队项目里,数据库表多达17个,若是使用Mybatis需要编写大量的SQL语句、xml文件,Mybatis-Plus可以让开发者省去这部分工作量。难点在于其扩展功能的使用。

技术详述

为进一步简化开发,本次实践项目还使用了Mybatis-Plus的核心功能——代码生成器,直接根据数据库表生成实体类以及各个层关于数据库的操作。

流程图

引入相关依赖

<!-- Mybatis-Plus 配置 -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.3.1</version>
</dependency>
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-generator</artifactId>
  <version>3.3.1</version>
</dependency>
<!-- 模板引擎 -->
<dependency>
  <groupId>org.apache.velocity</groupId>
  <artifactId>velocity-engine-core</artifactId>
  <version>2.0</version>
</dependency>

编写代码生成器类

参考官方文档【狂神说Java】MyBatisPlus最新完整教程的写法

    // 需要构建一个代码自动生成器对象
    AutoGenerator mpg = new AutoGenerator();

    // 配置策略
    // 全局配置
    GlobalConfig gc = new GlobalConfig();
    String projectPath = System.getProperty("user.dir");
    gc.setOutputDir(projectPath + "/src/main/java");
    gc.setAuthor("yangyu");// 作者名
    gc.setOpen(false);
    gc.setFileOverride(false); // 是否覆盖
    gc.setServiceName("%sService"); // 去Service的I前缀
    gc.setIdType(IdType.AUTO);// Id自增
    gc.setDateType(DateType.ONLY_DATE);
    gc.setSwagger2(true);// 设置Swagger
    mpg.setGlobalConfig(gc);

    // 设置数据源
    DataSourceConfig dsc = new DataSourceConfig();
    dsc.setUrl("jdbc:mysql://localhost:3306/teamproject?" +
        "useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai");
    dsc.setDriverName("com.mysql.cj.jdbc.Driver");// 数据库连接地址
    dsc.setUsername("root");// 数据库用户名
    dsc.setPassword("password");// 数据库密码
    dsc.setDbType(DbType.MYSQL);// 数据库类型
    mpg.setDataSource(dsc);

    // 包的配置
    PackageConfig pc = new PackageConfig();
    pc.setParent("com.team.backend");
    pc.setEntity("model");// 实体类名
    pc.setMapper("mapper");// mapper层名
    pc.setService("service");// service层名
    pc.setController("controller");// controller层名
    mpg.setPackageInfo(pc);

    // 策略配置
    StrategyConfig strategy = new StrategyConfig();
    strategy.setInclude("user"); // 设置要映射的数据库表名,可多个"user","notification"
    strategy.setNaming(NamingStrategy.underline_to_camel);// 表名下划线转驼峰
    strategy.setColumnNaming(NamingStrategy.underline_to_camel);// 字段名下划线转驼峰
    strategy.setEntityLombokModel(true); // 自动lombok;
    strategy.setLogicDeleteFieldName("deleted");// 逻辑删除

    strategy.setRestControllerStyle(true);
    strategy.setControllerMappingHyphenStyle(true);
    mpg.setStrategy(strategy);
    
    //执行
    mpg.execute(); 

CRUD基本使用

@Autowired
UserMapper userMapper;

// 新增
User newUser = new User();
userMapper.insert(newUser);

// 查询
User user = userMapper.selectById(id);

// 更新
User user = new User();
user.setId(id);
user.setUsername("新用户名");
userMapper.updateById(user);

// 删除
userMapper.deleteById(id);

条件构造器的使用

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("open_id", openId);// 数据库表的open_id字段的值与openId值相等时
wrapper.last(" limit 1");// 结果查询一条

User user = userMapper.selectOne(wrapper);

分页插件的使用

@MapperScan("com.team.backend.mapper")
@Configuration
public class MybatisPlusConfig {

  // 分页插件
  @Bean
  public PaginationInterceptor paginationInterceptor() {
    return new PaginationInterceptor();
  }
}
IPage<User> page = new Page<>(pageNum, pageSize);// 页数、页大小
page = userMapper.selectPage(page, wrapper);
List<User> UserList = page.getRecords();

技术使用中的遇到的问题和解决过程

问题:代码生成器缺少必要的模板引擎依赖,不起作用

解决过程:查看官方文档后,发现是MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖。自己使用的版本是 3.3.1 ,因此需引入模板引擎依赖。

Velocity(默认):

<!-- 模板引擎 -->
<dependency>
  <groupId>org.apache.velocity</groupId>
  <artifactId>velocity-engine-core</artifactId>
  <version>2.0</version>
</dependency>

总结

在这次项目中使用了Mybatis-Plus之后,我觉得这真是一个很不错的工具,在Mybatis的基础上进行了增强,大大减少了我编写代码的工作量,配合Lombok插件使用,使得我不需要写与数据库表对应的实体类,让其自动生成,之后通过Lombok提供的方法,间接访问实体类的字段。通过直接调用其BaseMapper的封装好的与数据库有关的操作,无需我自己再编写xml文件,大大提高我工作的效率。用起来真的很舒服,强烈推荐!

参考文献、参考博客

MyBatis-Plus官方文档

【狂神说Java】MyBatisPlus最新完整教程通俗易懂

posted @ 2021-06-28 16:33  羊羊羽  阅读(770)  评论(3编辑  收藏  举报