您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“如何使用FreeMarker和Mybatis Generator實(shí)現(xiàn)代碼生成工具”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
日常開(kāi)發(fā)過(guò)程中,經(jīng)常需要快速生成一些簡(jiǎn)易代碼,該工具使用 FreeMarker 和 Mybatis Generator 實(shí)現(xiàn),可以通過(guò)表名自動(dòng)生成 Model、Mapper、Service、Controller,另外還集成了通用Mapper(tk.mybatis),除了一些特殊的業(yè)務(wù)邏輯之外不需要寫(xiě)任何 SQL,只需要寫(xiě)好實(shí)體類及 Mapper 文件中對(duì)應(yīng)的字段即可支持相應(yīng)的增刪改查方法,大大提高了開(kāi)發(fā)效率。
生成實(shí)體類,集成 Lombok 插件,實(shí)體類包含表注釋
生成 Mapper.xml文件,僅包含 BaseResultMap 的字段映射
生成 Dao 層的 Mapper 接口類,并集成了 通用 mapper(tk.mybatis),簡(jiǎn)化開(kāi)發(fā),代碼簡(jiǎn)潔
生成 Service 接口和實(shí)現(xiàn)類,基礎(chǔ)接口抽象
生成 Controller 類,基礎(chǔ)接口抽象
Github倉(cāng)庫(kù)地址: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驅(qū)動(dòng) --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.22</version> </dependency> <!-- druid 數(shù)據(jù)源 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.5</version> </dependency>
2.通用Mapper
/** * 基礎(chǔ)增刪改查通用mapper,包含基礎(chǔ)增刪改查功能、根據(jù)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.業(yè)務(wù)代碼
public class User implements Serializable { /** * 編號(hào) */ @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 { /** * 日志服務(wù) */ private static final Logger LOGGER = LoggerFactory.getLogger(UserServiceImpl.class); /** * mapper */ @Resource private UserMapper userMapper; } @RestController @RequestMapping("user") public class UserController extends AbstractController<User> { }
6.測(cè)試結(jié)果
http://localhost:8080/user/findById?id=1 { "id": 1, "name": "杜子騰", "gender": "男", "address": "五道口" }
可以看出,業(yè)務(wù)層幾乎不需要寫(xiě)任何代碼,代碼生成工具都會(huì)幫助生成好,只需要寫(xiě)其它邏輯即可。
“如何使用FreeMarker和Mybatis Generator實(shí)現(xiàn)代碼生成工具”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。