MyBatisPlus快速开发之代码生成器解析
2023-01-06 08:21:08来源:今日头条
造句:
我们可以往空白内容进行填词造句,比如:
(资料图片)
在比如:
观察我们之前写的代码,会发现其中也会有很多重复内容,比如:
那我们就想,如果我想做一个Book模块的开发,是不是只需要将红色部分的内容全部更换成Book即可,如:
所以我们会发现,做任何模块的开发,对于这段代码,基本上都是对红色部分的调整,所以我们把去掉红色内容的东西称之为模板,红色部分称之为参数,以后只需要传入不同的参数,就可以根据模板创建出不同模块的dao代码。
除了Dao可以抽取模块,其实我们常见的类都可以进行抽取,只要他们有公共部分即可。再来看下模型类的模板:
① 可以根据数据库表的表名来填充② 可以根据用户的配置来生成ID生成策略③到⑨可以根据数据库表字段名称来填充所以只要我们知道是对哪张表进行代码生成,这些内容我们都可以进行填充。
分析完后,我们会发现,要想完成代码自动生成,我们需要有以下内容:
模板: MyBatisPlus已经提供了模板,也可以自己提供模板,但是麻烦,不建议数据库相关配置:读取数据库获取表和字段信息开发者自定义配置:手工配置,比如ID生成策略2、代码生成器实现步骤1:创建一个Maven项目步骤2:导入对应的jar包步骤3:编写引导类4.0.0 org.springframework.boot spring-boot-starter-parent 2.5.1 com.itheima mybatisplus_04_generator 0.0.1-SNAPSHOT 1.8 org.springframework.boot spring-boot-starter-web com.baomidou mybatis-plus-boot-starter 3.4.1 com.alibaba druid 1.1.16 mysql mysql-connector-java runtime org.springframework.boot spring-boot-starter-test test org.projectlombok lombok 1.18.12 com.baomidou mybatis-plus-generator 3.4.1 org.apache.velocity velocity-engine-core 2.3 org.springframework.boot spring-boot-maven-plugin
@SpringBootApplicationpublic class Mybatisplus04GeneratorApplication { public static void main(String[] args){ SpringApplication.run(Mybatisplus04GeneratorApplication.class, args); }}步骤4:创建代码生成类
public class CodeGenerator { public static void main(String[] args){ //1.获取代码生成器的对象 AutoGenerator autoGenerator = new AutoGenerator(); //设置数据库相关配置 DataSourceConfig dataSource = new DataSourceConfig(); dataSource.setDriverName("com.mysql.cj.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezone=UTC"); dataSource.setUsername("root"); dataSource.setPassword("root"); autoGenerator.setDataSource(dataSource); //设置全局配置 GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setOutputDir(System.getProperty("user.dir")+"/mybatisplus_04_generator/src/main/java"); //设置代码生成位置 globalConfig.setOpen(false); //设置生成完毕后是否打开生成代码所在的目录 globalConfig.setAuthor("黑马程序员"); //设置作者 globalConfig.setFileOverride(true); //设置是否覆盖原始生成的文件 globalConfig.setMapperName("%sDao"); //设置数据层接口名,%s为占位符,指代模块名称 globalConfig.setIdType(IdType.ASSIGN_ID); //设置Id生成策略 autoGenerator.setGlobalConfig(globalConfig); //设置包名相关配置 PackageConfig packageInfo = new PackageConfig(); packageInfo.setParent("com.aaa"); //设置生成的包名,与代码所在位置不冲突,二者叠加组成完整路径 packageInfo.setEntity("domain"); //设置实体类包名 packageInfo.setMapper("dao"); //设置数据层包名 autoGenerator.setPackageInfo(packageInfo); //策略设置 StrategyConfig strategyConfig = new StrategyConfig(); strategyConfig.setInclude("tbl_user"); //设置当前参与生成的表名,参数为可变参数 strategyConfig.setTablePrefix("tbl_"); //设置数据库表的前缀名称,模块名 = 数据库表名 - 前缀名 例如: User = tbl_user - tbl_ strategyConfig.setRestControllerStyle(true); //设置是否启用Rest风格 strategyConfig.setVersionFieldName("version"); //设置乐观锁字段名 strategyConfig.setLogicDeleteFieldName("deleted"); //设置逻辑删除字段名 strategyConfig.setEntityLombokModel(true); //设置是否启用lombok autoGenerator.setStrategy(strategyConfig); //2.执行生成操作 autoGenerator.execute(); }}
对于代码生成器中的代码内容,我们可以直接从官方文档中获取代码进行修改,https://baomidou.com/pages/d357af/#%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B
步骤5:运行程序运行成功后,会在当前项目中生成很多代码,代码包含controller,service,mapper和entity
至此代码生成器就已经完成工作,我们能快速根据数据库表来创建对应的类,简化我们的代码开发。
3、Mybatisplus中Service的CRUD回顾我们之前业务层代码的编写,编写接口和对应的实现类:
public interface UserService{ }@Servicepublic class UserServiceImpl implements UserService{}
接口和实现类有了以后,需要在接口和实现类中声明方法
public interface UserService{ public ListfindAll();}@Servicepublic class UserServiceImpl implements UserService{ @Autowired private UserDao userDao; public List findAll(){ return userDao.selectList(null); }}
Mybatisplus看到上面的代码以后就说这些方法也是比较固定和通用的,那来帮你抽取下,所以Mybatisplus提供了一个Service接口和实现类,分别是:IService和ServiceImpl,后者是对前者的一个具体实现。
以后我们自己写的Service就可以进行如下修改:
public interface UserService extends IService{ }@Servicepublic class UserServiceImpl extends ServiceImpl implements UserService{}
修改以后的好处是,Mybatisplus已经帮我们把业务层的一些基础的增删改查都已经实现了,可以直接进行使用。
编写测试类进行测试:
@SpringBootTestclass Mybatisplus04GeneratorApplicationTests { private IUserService userService; @Test void testFindAll(){ Listlist = userService.list(); System.out.println(list); }}
思考:在Mybatisplus封装的Service层都有哪些方法可以用?
https://baomidou.com/pages/49cc81/