【springboot】使用代码生成器快速开发

接上一项目,使用mybatis-plus-generator实现简易代码文件生成

fast-demo-web模块中的pom.xml中添加mybatis-plus-generatorfreemarkerLombok依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.7</version>
</dependency>
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

因为生成器代码一般只使用一次即可,项目打包时并不需要打包该代码,所以这里就在fast-demo-dao模块中的src/test/java目录下写生成器代码,要使用时运行一次即可

新建CodeGenerator

public class CodeGenerator {

    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/my_demo?useUnicode=true&characterEncoding=UTF-8";
        String username = "root";
        String password = "123456";
        String moduleName = "sys";  // 模块名
        String mapperPath = "E:\\java\\fast-demo\\fast-demo-web\\fast-demo-dao\\src\\main\\resources\\mapper\\" + moduleName;  // mapper文件存放位置
        String tables = "sys_user,sys_role,sys_menu,sys_user_role,sys_role_menu";   // 需要生成对应代码的表
        FastAutoGenerator.create(url, username, password)
                .globalConfig(builder -> {
                    builder.author("cyfy") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .outputDir("E:\\java\\fast-demo\\fast-demo-web\\fast-demo-dao\\src\\main\\java"); // 指定输出目录
                })
                .dataSourceConfig(builder ->
                        builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
                            int typeCode = metaInfo.getJdbcType().TYPE_CODE;
                            if (typeCode == Types.SMALLINT) {
                                // 自定义类型转换
                                return DbColumnType.INTEGER;
                            }
                            return typeRegistry.getColumnType(metaInfo);
                        })
                )
                .packageConfig(builder ->
                        builder.parent("com.cyfy.fastdemo") // 设置父包名
                                .moduleName(moduleName) // 设置父包模块名
                                .pathInfo(Collections.singletonMap(OutputFile.xml, mapperPath)) // 设置mapperXml生成路径
                )
                .strategyConfig(builder ->
                        builder.addInclude(tables) // 设置需要生成的表名
                                .addTablePrefix("sys_") // 设置过滤表前缀
                )
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();
    }
}

这里因为官网的快速生成代码是根据3.5.7版本写的,项目之前用的mybatis-plus是3.5.2,因为赖得找之前3.5.2版本的CodeGenerator代码,所以这里直接将版本提升至3.5.7

执行代码后

在这里插入图片描述

fast-demo-dao模块中会根据数据库自动生成对应的controller、service、mapper、entity等简单的代码文件

在这里插入图片描述

根据所需,将生成的文件移至不同模块中

在这里插入图片描述

将之前写的UserService、UserController、UserServiceImpl代码复制粘贴至对应文件

UserController

@RestController
@Api("用户信息接口")
@RequestMapping("/sys")
public class UserController {
    @Autowired
    private IUserService userService;
    @Autowired
    private RedisConfig redis;

    @RequestMapping(value = "/user",method = RequestMethod.GET)
    @ApiOperation(value = "获取所有用户信息", notes = "返回用户信息")
    public List<User> getUserList(){
        List<User> userList = userService.getUserList();
        // redis.set("userList",userList.toString());
        return userList;
    }
}

IUserService

public interface IUserService extends IService<User> {
    List<User> getUserList();
}

UserServiceImpl

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
    @Autowired(required=false)
    private UserMapper userMapper;

    @Override
    public List<User> getUserList() {
        return userMapper.selectList(null);
    }
}

UserMapper

@Mapper
public interface UserMapper extends BaseMapper<User> {

}

运行项目后,我们依旧能访问http://localhost:8080/swagger-ui.html

在这里插入图片描述这里使用CodeGenerator生成代码后,直接运行项目可能会报org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController': Unsatisfied dependency expressed through field 'userService';的错误,是因为代码生成器生成的mapper文件代码中没有@Mapper注解,spring无法扫描识别mapper文件。给所有mapper类加上@Mapper注解即可运行成功

上一篇:MySQL那些事(InnoDB架构和存储结构)-四、InnoDB磁盘结构


下一篇:【Unity学习笔记】解决疑似升级Win11或使用Unity6导致Unity旧版本无法打开的问题