接上一项目,使用mybatis-plus-generator实现简易代码文件生成
在fast-demo-web
模块中的pom.xml中添加mybatis-plus-generator
、freemarker
和Lombok
依赖
<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 {@Autowiredprivate IUserService userService;@Autowiredprivate 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;@Overridepublic 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
注解即可运行成功