本篇內(nèi)容介紹了“如何使用FreeMarker和Mybatis Generator實現(xiàn)代碼生成工具”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計制作、網(wǎng)站設(shè)計、海原網(wǎng)絡(luò)推廣、微信小程序定制開發(fā)、海原網(wǎng)絡(luò)營銷、海原企業(yè)策劃、海原品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供海原建站搭建服務(wù),24小時服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
日常開發(fā)過程中,經(jīng)常需要快速生成一些簡易代碼,該工具使用 FreeMarker 和 Mybatis Generator 實現(xiàn),可以通過表名自動生成 Model、Mapper、Service、Controller,另外還集成了通用Mapper(tk.mybatis),除了一些特殊的業(yè)務(wù)邏輯之外不需要寫任何 SQL,只需要寫好實體類及 Mapper 文件中對應(yīng)的字段即可支持相應(yīng)的增刪改查方法,大大提高了開發(fā)效率。
生成實體類,集成 Lombok 插件,實體類包含表注釋
生成 Mapper.xml文件,僅包含 BaseResultMap 的字段映射
生成 Dao 層的 Mapper 接口類,并集成了 通用 mapper(tk.mybatis),簡化開發(fā),代碼簡潔
生成 Service 接口和實現(xiàn)類,基礎(chǔ)接口抽象
生成 Controller 類,基礎(chǔ)接口抽象
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
/** * 基礎(chǔ)增刪改查通用mapper,包含基礎(chǔ)增刪改查功能、根據(jù)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.業(yè)務(wù)代碼
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 { /** * 日志服務(wù) */ private static final Logger LOGGER = LoggerFactory.getLogger(UserServiceImpl.class); /** * mapper */ @Resource private UserMapper userMapper; } @RestController @RequestMapping("user") public class UserController extends AbstractController { }
6.測試結(jié)果
http://localhost:8080/user/findById?id=1 { "id": 1, "name": "杜子騰", "gender": "男", "address": "五道口" }
可以看出,業(yè)務(wù)層幾乎不需要寫任何代碼,代碼生成工具都會幫助生成好,只需要寫其它邏輯即可。
“如何使用FreeMarker和Mybatis Generator實現(xiàn)代碼生成工具”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!