扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
本篇内容介绍了“如何使用FreeMarker和Mybatis Generator实现代码生成工具”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站设计制作、网站设计、海原网络推广、微信小程序定制开发、海原网络营销、海原企业策划、海原品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联公司为所有大学生创业者提供海原建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
日常开发过程中,经常需要快速生成一些简易代码,该工具使用 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依赖
org.mybatis.spring.boot mybatis-spring-boot-starter 2.1.4 org.springframework.boot spring-boot-starter-web tk.mybatis mapper-spring-boot-starter 1.2.4 org.projectlombok lombok 1.18.18 org.mybatis.generator mybatis-generator-core 1.3.5 org.freemarker freemarker 2.3.28 mysql mysql-connector-java 8.0.22 com.alibaba druid-spring-boot-starter 1.2.5
2.通用Mapper
/** * 基础增删改查通用mapper,包含基础增删改查功能、根据id批量查询、批量插入等功能。 * 如需其它接口参考官方文档自行添加 * * @author: JavaBest * @date: 2021/4/17 19:00 */ public interface CrudMapperextends BaseMapper , ConditionMapper , IdsMapper , InsertListMapper { }
3.通用Service
public class AbstractServiceimplements Service { @Resource protected CrudMapper crudMapper; private Class modelClass; @SuppressWarnings("unchecked") public AbstractService() { ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass(); modelClass = (Class ) 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 findByCondition(Condition condition) { return crudMapper.selectByCondition(condition); } ...... }
4.通用Controller
public class AbstractControllerimplements PostController { @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 list(@RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "100") Integer size) { PageHelper.startPage(page, size); List 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 AbstractServiceimplements UserService { /** * 日志服务 */ private static final Logger LOGGER = LoggerFactory.getLogger(UserServiceImpl.class); /** * mapper */ @Resource private UserMapper userMapper; } @RestController @RequestMapping("user") public class UserController extends AbstractController { }
6.测试结果
http://localhost:8080/user/findById?id=1 { "id": 1, "name": "杜子腾", "gender": "男", "address": "五道口" }
可以看出,业务层几乎不需要写任何代码,代码生成工具都会帮助生成好,只需要写其它逻辑即可。
“如何使用FreeMarker和Mybatis Generator实现代码生成工具”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流