日常开发过程中,常常须要疾速生成一些繁难代码,该工具应用 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

1. 我的项目结构图

├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─best
│ │ │ │ CodeGeneratorApplication.java
│ │ │ ├─common
│ │ │ │ ├─controller
│ │ │ │ │ AbstractController.java
│ │ │ │ ├─mapper
│ │ │ │ │ CrudMapper.java
│ │ │ │ └─service
│ │ │ │ AbstractService.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
│ └─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><!-- 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;}@Servicepublic 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": "五道口"}

能够看出,业务层简直不须要写任何代码,代码生成工具都会帮忙生成好,只须要写其它逻辑即可。


关注公众号【JavaBest】获取更多精彩内容