本篇内容介绍了“如何使用FreeMarker和Mybatis Generator实现代码生成工具”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
日常开发过程中,经常需要快速生成一些简易代码,该工具使用 FreeMarker 和 Mybatis Generator 实现,可以通过表名自动生成 Model、Mapper、Service、Controller,另外还集成了通用Mapper(tk.mybatis),除了一些特殊的业务逻辑之外不需要写任何 SQL,只需要写好实体类及 Mapper 文件中对应的字段即可支持相应的增删改查方法,大大提高了开发效率。
生成实体类,集成 Lombok 插件,实体类包含表注释
生成 Mapper.xml文件,仅包含 BaseResultMap 的字段映射
生成 Dao 层的 Mapper 接口类,并集成了 通用 mapper(tk.mybatis),简化开发,代码简洁
生成 Service 接口和实现类,基础接口抽象
生成 Controller 类,基础接口抽象
Github仓库地址:code-generator
├─src │ ├─main │ │ ├─java │ │ │ └─com │ │ │ └─best │ │ │ │ CodeGeneratorApplication.java │ │ │ ├─common │ │ │ │ ├─controller │ │ │ │ │ AbstractController.java │ │ │ │ │ PostController.java │ │ │ │ ├─mapper │ │ │ │ │ CrudMapper.java │ │ │ │ └─service │ │ │ │ AbstractService.java │ │ │ │ Service.java │ │ │ ├─controller │ │ │ │ UserController.java │ │ │ ├─dao │ │ │ │ UserMapper.java │ │ │ ├─entity │ │ │ │ User.java │ │ │ └─service │ │ │ │ UserService.java │ │ │ │ │ │ │ └─impl │ │ │ UserServiceImpl.java │ │ └─resources │ │ application.yml │ └─test │ ├─java │ │ └─com │ │ └─best │ │ CodeGenerator.java │ │ CommentPlugin.java │ │ GeneratorConstant.java │ │ LombokPlugin.java │ │ MapperPlugin.java │ │ │ └─resources │ └─template │ controller.ftl │ service-impl.ftl │ service.ftl
1.maven依赖
<!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <!-- web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 通用mapper --> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>1.2.4</version> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.18</version> </dependency> <!-- mybatis Generator --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version> </dependency> <!-- freemarker --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.28</version> </dependency> <!-- mysql jdbc驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.22</version> </dependency> <!-- druid 数据源 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.5</version> </dependency>
2.通用Mapper
/** * 基础增删改查通用mapper,包含基础增删改查功能、根据id批量查询、批量插入等功能。 * 如需其它接口参考官方文档自行添加 * * @author: JavaBest * @date: 2021/4/17 19:00 */ public interface CrudMapper<T> extends BaseMapper<T>, ConditionMapper<T>, IdsMapper<T>, InsertListMapper<T> { }
3.通用Service
public class AbstractService<T> implements Service<T> { @Resource protected CrudMapper<T> crudMapper; private Class<T> modelClass; @SuppressWarnings("unchecked") public AbstractService() { ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass(); modelClass = (Class<T>) pt.getActualTypeArguments()[0]; } @Override public int save(T record) { return crudMapper.insertSelective(record); } @Override public int deleteById(Long id) { return crudMapper.deleteByPrimaryKey(id); } @Override public int update(T record) { return crudMapper.updateByPrimaryKeySelective(record); } @Override public List<T> findByCondition(Condition condition) { return crudMapper.selectByCondition(condition); } ...... }
4.通用Controller
public class AbstractController<T> implements PostController<T> { @Resource private AbstractService service; @Override @PostMapping("add") public int add(@RequestBody T record) { return service.save(record); } @Override @PostMapping("delete") public int delete(@RequestParam Long id) { return service.deleteById(id); } @Override @PostMapping("update") public int update(@RequestBody T record) { return service.update(record); } @Override @PostMapping("findById") public T findById(@RequestParam Long id) { return (T) service.findById(id); } @Override @PostMapping("list") public PageInfo<T> list(@RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "100") Integer size) { PageHelper.startPage(page, size); List<T> recordList = service.findAll(); return new PageInfo<>(recordList); } }
5.业务代码
public class User implements Serializable { /** * 编号 */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /** * 姓名 */ private String name; /** * 性别 */ private String gender; /** * 地址 */ private String address; private static final long serialVersionUID = 1L; } @Service public class UserServiceImpl extends AbstractService<User> implements UserService { /** * 日志服务 */ private static final Logger LOGGER = LoggerFactory.getLogger(UserServiceImpl.class); /** * mapper */ @Resource private UserMapper userMapper; } @RestController @RequestMapping("user") public class UserController extends AbstractController<User> { }
6.测试结果
http://localhost:8080/user/findById?id=1 { "id": 1, "name": "杜子腾", "gender": "男", "address": "五道口" }
可以看出,业务层几乎不需要写任何代码,代码生成工具都会帮助生成好,只需要写其它逻辑即可。
“如何使用FreeMarker和Mybatis Generator实现代码生成工具”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。