您好,登錄后才能下訂單哦!
本篇內容介紹了“如何使用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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。