日常开发过程中,常常须要疾速生成一些繁难代码,该工具应用 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;
}
@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": "五道口"
}
能够看出,业务层简直不须要写任何代码,代码生成工具都会帮忙生成好,只须要写其它逻辑即可。
关注公众号【JavaBest】获取更多精彩内容