MyBatisPlus代码生成器的使用(超详细)

今天我们来浅谈一下MyBatisPlus代码生成器,今天是教会大家怎么使用,并不会讲一下太底层的东西,使用MyBatisPlus代码生成器需要的前置知识。

  1. MyBatis
  2. MyBatisPlus
  3. MySQL

我这里使用的是最新版本的MyBatisPlus的代码生成器3.5.1版本,这个版本不兼容历史版本,旧版本的代码生成器的使用方法也差不多,小伙伴们可以看一下官方文档。
在这里插入图片描述

重点开始了!!!,我这里是在SpringBoot项目中使用MyBatisPlus,其他项目中使用也是同理
第一步(引入依赖):这一步是必不可少的

<!-- mysql驱动,让项目可以连接上MySQL数据库,自己数据库是什么版本的,就导入对应版本的驱动,我这里的数据库是8.0.27 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.27</version>
        </dependency>
        
<!-- springboot整合MybatisPlus,这个依赖只有在SpringBoot项目中才需要导入,其他项目无需导入这个依赖 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatisplus-spring-boot-starter</artifactId>
            <version>1.0.5</version>
        </dependency>

<!-- MyBatisPlus依赖,要使用MyBatisPlus就必须导入MyBatisPlus的依赖,因为MyBatisPlus中默认有MyBatis的依赖,所以无需再导入MyBatis的依赖了 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>3.4.3.4</version>
        </dependency>

<!-- MyBatis代码生成器依赖,要使用代码生成器,就需要导入代码生成器依赖 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.1</version>
        </dependency>

<!-- MyBatis代码生成器的模板引擎,这个也许需要导入的,官方的文档是这样写的,velocity引擎是默认的,不需要配置其他东西,比较方便,其他模板引擎也可以使用,还可以自定义模板引擎,具体请看官网 -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>

接下来就是编写代码的环节了,所谓代码生成器,不过是我们自己写一串代码,然后运行一些,就会自动生成一些controller、service、dao、xml文件
所以接下来我们需要在一个类中,编写一个方法,类命没有限制,方法命也没有限制,单元测试方法也行,main方法也行,能运行就行,具体代码如下。小伙伴们最好是结合官方文档看代码,这样会非常清楚,学习也会事半功倍。

@Test
    public void test01() {
    	//创建一个代码生成器
        FastAutoGenerator.create("数据库url地址",
                "数据库用户名,一般是root", "数据库密码")
                //全局配置(GlobalConfig)
                .globalConfig(builder -> {
                    builder.author("张三") // 设置作者,可以写自己名字
                            //.enableSwagger() // 开启 swagger 模式,这个是接口文档生成器,如果开启的话,就还需要导入swagger依赖
                            .fileOverride() // 覆盖已生成文件
                            .dateType(DateType.TIME_PACK) //时间策略
                            .commentDate("yyyy-MM-dd") //注释日期
                            .outputDir("C:\\IDEAWorkSpace\\work01\\lost_found\\src\\main\\java"); // 指定输出目录,一般指定到java目录
                })
                //包配置(PackageConfig)
                .packageConfig(builder -> {
                    builder.parent("com.atguigu") // 设置父包名
                            .moduleName("") // 设置父包模块名,这里一般不设置
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "C:\\IDEAWorkSpace\\work01\\lost_found\\src\\main\\resources\\com\\atguigu\\mapper")); // 设置mapperXml生成路径,这里是Mapper配置文件的路径,建议使用绝对路径
                })
                //策略配置(StrategyConfig)
                .strategyConfig(builder -> {
                    builder.addInclude("tbl_classify") // 设置需要生成的表名
                            .addInclude("tbl_found") // 设置需要生成的表名
                            .addInclude("tbl_identify") // 设置需要生成的表名
                            .addInclude("tbl_lost") // 设置需要生成的表名
                            .addInclude("tbl_school") // 设置需要生成的表名
                            .addInclude("tbl_status") // 设置需要生成的表名
                            .addInclude("tbl_user") // 设置需要生成的表名
                            .addTablePrefix("tbl_"); // 设置过滤表前缀

                    builder.serviceBuilder()
                            .formatServiceFileName("%sService") //设置service的命名策略,没有这个配置的话,生成的service和serviceImpl类前面会有一个I,比如IUserService和IUserServiceImpl
                            .formatServiceImplFileName("%sServiceImpl"); //设置serviceImpl的命名策略
                    builder.controllerBuilder()
                            .enableRestStyle(); // 开启生成@RestController 控制器,不配置这个默认是Controller注解,RestController是返回Json字符串的,多用于前后端分离项目。
                    builder.mapperBuilder()
                            .enableMapperAnnotation() ;//开启 @Mapper 注解,也就是在dao接口上添加一个@Mapper注解,这个注解的作用是开启注解模式,就可以在接口的抽象方法上面直接使用@Select和@Insert和@Update和@Delete注解。
                })
//                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .templateEngine(new VelocityTemplateEngine())
                .execute(); //执行以上配置
    }

以上就是MyBatisPlus代码生成器的全部使用步骤,有一些参数和配置并没有使用到,因为那些参数暂时还没必要使用,用这些配置已经够了,本人对MyBatisPlus代码生成器的见解也不算太深,只是想把自己知道的东西,教给大家。

对了最后提一嘴,这样生成的代码可能会让springboot项目启动不起来,我是报了如下的错误

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'deptServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.zgnj.mapper.DeptMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660) ~[spring-beans-5.3.7.jar:5.3.7]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.3.7.jar:5.3.7]
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.7.jar:5.3.7]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.3.7.jar:5.3.7]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1413) ~[spring-beans-5.3.7.jar:5.3.7]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.3.7.jar:5.3.7]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.7.jar:5.3.7]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.7.jar:5.3.7]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.7.jar:5.3.7]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.7.jar:5.3.7]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.7.jar:5.3.7]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.7.jar:5.3.7]
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.7.jar:5.3.7]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.7.jar:5.3.7]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.6.jar:2.4.6]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:771) [spring-boot-2.4.6.jar:2.4.6]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:763) [spring-boot-2.4.6.jar:2.4.6]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:438) [spring-boot-2.4.6.jar:2.4.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:339) [spring-boot-2.4.6.jar:2.4.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1329) [spring-boot-2.4.6.jar:2.4.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1318) [spring-boot-2.4.6.jar:2.4.6]
	at com.zgnj.PersonnelManagementApplication.main(PersonnelManagementApplication.java:10) [classes/:na]
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.zgnj.mapper.DeptMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1790) ~[spring-beans-5.3.7.jar:5.3.7]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1346) ~[spring-beans-5.3.7.jar:5.3.7]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.7.jar:5.3.7]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.3.7.jar:5.3.7]
	... 21 common frames omitted


Process finished with exit code 1

这个错误的解决方法就是在SpringBoot项目的主启动类上的@SpringBootApplication注解中添加一个属性,这个属性的作用是,指定mapper接口所在的包,上方的报错正是因为找不到mapper接口,解决方法如下图所示。
在这里插入图片描述
上面这个方法对我来说没有用,我这里还会报一个错误,这个错误是启动项目时候产生的,就是项目启动报错,项目没有跑起来,下面是错误信息的截图!!!

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.liuyang.mapper.EmployeeMapper' available: expected at least 1 bean which qualifies as autowire candidate. Depend

错误截图:
在这里插入图片描述

解决方法:先把MyBatisPlus和代码生成器的依赖都删除,然后将以下依赖添加到pom.xml中,就可以运行起来了。

<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>
  • 12
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值