接上一项目,使用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 {
@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
注解即可运行成功