更强大的codegenerator自定义工具
更强大的 code generator 自定义工具
我们以前用 mybatis 的 generator 感觉很爽,通用mapper(tk.mapper) 也很爽,但是。。。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、网页空间、营销软件、网站建设、茌平网站维护、网站推广。
还有更爽的 就是这两种结合 并且 还可以直接生成简单的 service controller 层 还可以包含 swagger
直接上代码:
引入依赖 pom.xml
4.0.0
com.jcbjcb.tools
jcbjcb-tools
1.0-SNAPSHOT
jcbjcb-generator
jcbjcb-generator
Demo project for Spring Boot
jar
1.8
org.springframework.boot
spring-boot-starter-web
org.projectlombok
lombok
true
tk.mybatis
mapper-spring-boot-starter
2.1.5
org.springframework.boot
spring-boot-starter-data-jpa
org.springframework.boot
spring-boot-starter-test
test
org.mybatis.generator
mybatis-generator-core
1.3.7
tk.mybatis
mapper-generator
1.1.5
io.springfox
springfox-swagger2
2.9.2
io.springfox
springfox-swagger-ui
2.9.2
MySQL
mysql-connector-java
8.0.15
tk.mybatis
mapper
4.1.5
org.freemarker
freemarker
2.3.28
maven-compiler-plugin
${java.version}
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.7
${basedir}/src/main/resources/generator/generatorConfig.xml
true
true
mysql
mysql-connector-java
8.0.15
tk.mybatis
mapper
4.1.5
org.freemarker
freemarker
2.3.28
generatorConfig.xml
config.properties
jdbc.driverClass = com.mysql.cj.jdbc.Driver
jdbc.url = jdbc:mysql://127.0.0.1:3306/school_score?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
jdbc.user = root
jdbc.password = root
代码生成模板
biz.ftl
package ${package};
import com.jcbjcb.tools.common.biz.BaseBiz;
import ${package?substring(0,package?last_index_of('.'))}.mapper.${tableClass.shortClassName}Mapper;
import ${tableClass.fullClassName};
import org.springframework.stereotype.Service;
<#assign dateTime = .now>
/**
* @description ${tableClass.shortClassName}业务层
* @author jcb
* @since ${dateTime?string["yyyy-MM-dd HH:mm:ss"]}
*/
@Service
public class ${tableClass.shortClassName}Biz extends BaseBiz<${tableClass.shortClassName}Mapper, ${tableClass.shortClassName}> {
}
controller.ftl
package ${package};
import com.jcbjcb.tools.common.rest.BaseController;
import ${package?substring(0,package?last_index_of('.'))}.biz.${tableClass.shortClassName}Biz;
import ${tableClass.fullClassName};
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
<#assign dateTime = .now>
/**
* @description ${tableClass.shortClassName}控制层
* @author jcb
* @since ${dateTime?string["yyyy-MM-dd HH:mm:ss"]}
*/
@RestController
@RequestMapping("/${tableClass.variableName}")
public class ${tableClass.shortClassName}Controller extends BaseController<${tableClass.shortClassName}Biz, ${tableClass.shortClassName}> {
}
mapper.ftl
package ${package};
import com.jcbjcb.tools.common.mapper.BaseMapper;
import ${tableClass.fullClassName};
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
<#assign dateTime = .now>
/**
* @description ${tableClass.shortClassName}数据层
* @author jcb
* @since ${dateTime?string["yyyy-MM-dd HH:mm:ss"]}
*/
@Mapper
@Repository
public interface ${tableClass.shortClassName}Mapper extends BaseMapper<${tableClass.shortClassName}> {
}
基础类
BaseMapper.class
package com.jcbjcb.tools.common.mapper;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
public interface BaseMapper extends Mapper, MySqlMapper {
}
BaseBiz.class
package com.jcbjcb.tools.common.biz;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.jcbjcb.tools.common.util.Query;
import org.springframework.beans.factory.annotation.Autowired;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.entity.Example;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import java.util.Map;
public abstract class BaseBiz,T> {
@Autowired
protected M mapper;
public void setMapper(M mapper) {
this.mapper = mapper;
}
public T selectOne(T entity) {
return mapper.selectOne(entity);
}
public T selectById(Object id) {
return mapper.selectByPrimaryKey(id);
}
public List selectList(T entity) {
return mapper.select(entity);
}
public List selectListAll() {
return mapper.selectAll();
}
public Long selectCount(T entity) {
return new Long(mapper.selectCount(entity));
}
public void insert(T entity) {
mapper.insert(entity);
}
public void insertSelective(T entity) {
mapper.insertSelective(entity);
}
public void delete(T entity) {
mapper.delete(entity);
}
public void deleteById(Object id) {
mapper.deleteByPrimaryKey(id);
}
public void updateById(T entity) {
mapper.updateByPrimaryKey(entity);
}
public void updateSelectiveById(T entity) {
mapper.updateByPrimaryKeySelective(entity);
}
public List selectByExample(Object example) {
return mapper.selectByExample(example);
}
public int selectCountByExample(Object example) {
return mapper.selectCountByExample(example);
}
public PageInfo selectByQuery(Query query) {
Class clazz = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[1];
Example example = new Example(clazz);
if(query.entrySet().size()>0) {
Example.Criteria criteria = example.createCriteria();
for (Map.Entry entry : query.entrySet()) {
criteria.andLike(entry.getKey(), "%" + entry.getValue().toString() + "%");
}
}
Page
BaseController.class
package com.jcbjcb.tools.common.rest;
import com.github.pagehelper.PageInfo;
import com.jcbjcb.tools.common.biz.BaseBiz;
import com.jcbjcb.tools.common.util.ObjectRestResponse;
import com.jcbjcb.tools.common.util.Query;
import com.jcbjcb.tools.common.util.TableRestResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
public class BaseController {
@Autowired
protected HttpServletRequest request;
@Autowired
protected Biz baseBiz;
@RequestMapping(value = "",method = RequestMethod.POST)
@ResponseBody
public ObjectRestResponse add(@RequestBody Entity entity){
baseBiz.insertSelective(entity);
return new ObjectRestResponse<>(entity);
}
@RequestMapping(value = "/{id}",method = RequestMethod.GET)
@ResponseBody
public ObjectRestResponse get(@PathVariable int id){
ObjectRestResponse entityObjectRestResponse = new ObjectRestResponse<>();
Object o = baseBiz.selectById(id);
entityObjectRestResponse.setData((Entity)o);
return entityObjectRestResponse;
}
@RequestMapping(value = "/{id}",method = RequestMethod.PUT)
@ResponseBody
public ObjectRestResponse update(@RequestBody Entity entity){
baseBiz.updateSelectiveById(entity);
return new ObjectRestResponse<>(entity);
}
@RequestMapping(value = "/{id}",method = RequestMethod.DELETE)
@ResponseBody
public ObjectRestResponse remove(@PathVariable int id){
baseBiz.deleteById(id);
return new ObjectRestResponse<>();
}
@RequestMapping(value = "/all",method = RequestMethod.GET)
@ResponseBody
public List all(){
return baseBiz.selectListAll();
}
@RequestMapping(value = "/page",method = RequestMethod.GET)
@ResponseBody
public TableRestResponse list(@RequestParam Map params){
//查询列表数据
Query query = new Query(params);
PageInfo pageInfo = baseBiz.selectByQuery(query);
return new TableRestResponse<>(pageInfo.getList());
}
}
最后执行
mvn mybatis-generator:generate 生成代码
或者在idea上mvn插件里面生成
具体代码在 github 上
https://github.com/jcbjcb/jcbjcb-tools
本文题目:更强大的codegenerator自定义工具
文章分享:http://scjbc.cn/article/jeheoi.html