有了前面的铺垫,我们能看懂mybatis和springboot工程整合之后各个文件都有什么用处了。但是每次都要写实体类、Mapper接口、Mapper XML,在web项目中还要写Service层和Controller层,大部分都是重复性的工作,现在就使用mybatis-plus快速生成这些重复性的代码吧!
因为mybatis-plus从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,所以,我们需要需要手动添加代码生成器依赖和模板引擎依赖:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.4.0</version> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.2</version> </dependency>现在我们告诉mybatis-plus如何生成代码吧!
import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.config.DataSourceConfig; import com.baomidou.mybatisplus.generator.config.GlobalConfig; import com.baomidou.mybatisplus.generator.config.PackageConfig; import com.baomidou.mybatisplus.generator.config.StrategyConfig; import com.baomidou.mybatisplus.generator.config.rules.DateType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; public class CodeGenerator { public static void main(String[] args) { AutoGenerator autoGenerator = new AutoGenerator(); //全局配置 GlobalConfig globalConfig = new GlobalConfig(); String projectPath = System.getProperty("user.dir"); globalConfig.setOutputDir(projectPath+"/src/main/java"); globalConfig.setAuthor("zhanghaopai"); globalConfig.setOpen(false); globalConfig.setServiceName("%sService"); globalConfig.setDateType(DateType.ONLY_DATE); autoGenerator.setGlobalConfig(globalConfig); //设置数据源 DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/blog?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8"); dataSourceConfig.setDriverName("com.mysql.jdbc.Driver"); dataSourceConfig.setUsername("root"); dataSourceConfig.setPassword("AaA19980818"); dataSourceConfig.setDbType(DbType.MYSQL); autoGenerator.setDataSource(dataSourceConfig); //包设置 PackageConfig pc = new PackageConfig(); // pc.setModuleName("generator"); pc.setParent("com.zhp.generator"); pc.setEntity("entity"); pc.setMapper("mapper"); pc.setService("service"); pc.setController("controller"); autoGenerator.setPackageInfo(pc); //策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setInclude("t_blog","t_blog_tags","t_comment","t_tag","t_type","t_user"); // 设置要映射的表名 strategy.setNaming(NamingStrategy.underline_to_camel); strategy.setColumnNaming(NamingStrategy.underline_to_camel); strategy.setEntityLombokModel(true); // 自动lombok strategy.setRestControllerStyle(true); autoGenerator.setStrategy(strategy); autoGenerator.execute();//执行代码自动生成 } }可以看到一共有四处设置,分别是全局设置、设置数据源、生成包设置、生成策略配置。 这其中还需要到了一些依赖,比如设置数据源需要用到mysql依赖,策略配置中使用了lombok,所以也需要添加lombok依赖,依赖如下:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.16</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.30</version> </dependency>点击运行CodeGenerator主程序,即可生成相关代码。 运行结果如下: ![image.png](https://img-blog.csdnimg.cn/img_convert/6ffec75a276eaa2141d673b96a272875.png#align=left&display=inline&height=743&margin=[object Object]&name=image.png&originHeight=743&originWidth=326&size=25600&status=done&style=none&width=326)
现在只是将代码生成出来了,想要运行起来还有一些步骤需要进行。
我们刚才只是添加了mybatis-plus的generator依赖,现在我们需要添加mybatis-plus运行时的核心依赖。
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.0</version> </dependency>我们需要在springboot的配置中说明刚刚生成的mapper地址和实体类的地址,这样mybatis-plus才能将从数据库中查询的数据转换成实体类。 在springboot的application.yml核心配置中填写如下的配置:
mybatis-plus: mapper-locations: classpath:/com/zhp/generator/mapper/xml/*.xml type-aliases-package: com.zhp.generator.entity我们还需要配置数据库的连接信息
spring: datasource: url: jdbc:mysql://localhost:3306/blog username: root password: AaA19980818 driver-class-name: com.mysql.jdbc.Driver现在springboot知道了Mapper XML的地址、实体类的包地址,现在我们要告诉springboot的Mapper地址,只需要在启动类上开启包扫描即可。
@SpringBootApplication @MapperScan("com.zhp.generator.mapper") public class GeneratorApplication { public static void main(String[] args) { SpringApplication.run(GeneratorApplication.class, args); } }点击运行之后,请打开生成的target目录,如果里面没有像我一样的xml文件,可能是你没有告诉编译系统需要将xml文件编译。 ![image.png](https://img-blog.csdnimg.cn/img_convert/cf749ad30e8add6046813474a77da969.png#align=left&display=inline&height=489&margin=[object Object]&name=image.png&originHeight=489&originWidth=444&size=23196&status=done&style=none&width=444) 如果你有这样的问题,那么请在pom.xml文件的标签中添加如下的代码:
<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.yml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.yml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>现在你告诉了编译系统src/main/resources文件夹下的properties、xml、yml文件需要编译,src/main/java文件夹下的properties、xml、yml文件也需要编译。
我们采用web方式验证,在任意生成的controller中添加测试代码,测试代码有两项内容,①自动注入Service ②调用Service的方法访问数据库并返回,对于我的项目我是按照如下方式写的测试代码:
@RestController @RequestMapping("/tBlog") public class TBlogController { @Autowired private TBlogService blogService; @GetMapping("/getBlogById") public TBlog getBlogById(){ return blogService.getById(6); } }运行并访问,结果如下: ![image.png](https://img-blog.csdnimg.cn/img_convert/4ee7e27e1c1821cda1ac6452c0c27ef6.png#align=left&display=inline&height=111&margin=[object Object]&name=image.png&originHeight=111&originWidth=1772&size=30538&status=done&style=none&width=1772)