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文件,大大提高我工作的效率。用起来真的很舒服,强烈推荐!