博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
更强大的 code generator 自定义工具
阅读量:6764 次
发布时间:2019-06-26

本文共 13399 字,大约阅读时间需要 44 分钟。

更强大的 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}
${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"]}*/@Servicepublic 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@Repositorypublic 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
result = PageHelper.startPage(query.getPage(), query.getLimit()); List
list = mapper.selectByExample(example); return new PageInfo
(list); }}

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://blog.51cto.com/5013162/2410633

你可能感兴趣的文章