日常开发过程中,常常须要疾速生成一些繁难代码,该工具应用 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
我的项目简介
- 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】获取更多精彩内容