easyCode代码生成器,减少低价值搬砖。
声明下:自定义模板内有大量自定义类,所以可以借鉴,不能直接使用。
setting下载插件,重启idea,点开dataBase连接上数据库。
针对有一定基础的程序员哈,小白的话,建议先老老实实手敲代码。
1: dataBase连接上数据库后,选中某个表,右键->EasyCode->Generate Code,出现下面这个弹出框:
Module:是哪个项目模块
Package:生成的代码放在哪个包下
Path:生成代码所在的路劲
红框:这个是我自定义的模板(后面会怎么弄),这里可以选择默认的模板,如:MybatisPlus ,Default
Template:勾选需要生成哪些文件
2:选择完成后,点击OK就可以了。
File->settings->Other Settings->EasyCode->Template
我是复制了MybatisPlus- Mixed,然后重名为:MybatisPlus-lt。在此基础上修改的模板内容
我配置了字段自动插入,需要在字段属性上加额外的注解,所以这里用到了
#if($!{column.name} == ‘delFlag’)
@TableLogic
@TableField(fill = FieldFill.INSERT)
#end
因为在实现类里有实现方法,所以需要使用到bookMapper,但是如何获取到Book对象的小写单词是个问题:
##定义实体对象名(驼峰)
#set($entityName = $!tool.firstLowerCase($!tableInfo.name))
说明下:
实现类里期望结果生成这个代码:bookMapper.deleteBatchIds(idList);
错误的:
下面这句的生成结果是:bookMapper;
$!tool.firstLowerCase($!tableInfo.name))Mapper.deleteBatchIds(idList);
正确的:
##定义实体对象名
#set($entityName = $!tool.firstLowerCase($!tableInfo.name))
这样去使用:
$!{entityName}Mapper.deleteBatchIds(idList);
例子:
将BookMapping.xml 放在/src/main/resources/mapper/book目录下
模板内使用到了较多的自定义类,所以大家可以借鉴下,全盘照搬肯定是不行的。
自定义异常:CheckException
自定义返回类:BaseResponse
自定义查询类:BaseQuery
自定义:Msg
分页插件:PageHelper
id生成器:IdWorker
##导入宏定义
$!{define.vm}
##保存文件(宏定义)
#save("/entity", ".java")
##包路径(宏定义)
#setPackageSuffix("entity")
##自动导入包(全局变量)
$!autoImport
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.tao.base.BaseQuery;
import lombok.Data;
import java.util.Date;
##表注释(宏定义)
#tableComment("表实体类")
@Data
public class $!{tableInfo.name} extends BaseQuery {
#foreach($column in $tableInfo.fullColumn)
#if(${column.comment})
/**
* ${column.comment}
**/
#end
#if($!{column.name} == 'delFlag')
@TableLogic
@TableField(fill = FieldFill.INSERT)
#end
#if($!{column.name} == 'createTime')
@TableField(fill = FieldFill.INSERT)
#end
#if($!{column.name} == 'updateTime')
@TableField(fill = FieldFill.INSERT_UPDATE)
#end
private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
#end
}
##导入宏定义
$!{define.vm}
##设置表后缀(宏定义)
#setTableSuffix("Mapper")
##保存文件(宏定义)
#save("/dao", "Mapper.java")
##包路径(宏定义)
#setPackageSuffix("dao")
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import $!{tableInfo.savePackageName}.entity.$!tableInfo.name;
##表注释(宏定义)
#tableComment("表数据库访问层")
@Mapper
public interface $!{tableName} extends BaseMapper<$!tableInfo.name> {
}
##导入宏定义
$!{define.vm}
##设置表后缀(宏定义)
#setTableSuffix("Service")
##保存文件(宏定义)
#save("/service", "Service.java")
##包路径(宏定义)
#setPackageSuffix("service")
import com.baomidou.mybatisplus.extension.service.IService;
import $!{tableInfo.savePackageName}.entity.$!tableInfo.name;
##表注释(宏定义)
#tableComment("表服务接口")
public interface $!{tableName} extends IService<$!tableInfo.name> {
/**
* 根据ids删除多条数据
**/
void deleteByIds(String ids);
}
##导入宏定义
$!{define.vm}
##设置表后缀(宏定义)
#setTableSuffix("ServiceImpl")
##保存文件(宏定义)
#save("/service/impl", "ServiceImpl.java")
##包路径(宏定义)
#setPackageSuffix("service.impl")
##定义实体对象名
#set($entityName = $!tool.firstLowerCase($!tableInfo.name))
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import $!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Mapper;
import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
##表注释(宏定义)
#tableComment("表服务实现类")
@Service("$!tool.firstLowerCase($tableInfo.name)Service")
public class $!{tableName} extends ServiceImpl<$!{tableInfo.name}Mapper, $!{tableInfo.name}> implements $!{tableInfo.name}Service {
@Resource
private $!{tableInfo.name}Mapper ${entityName}Mapper;
/**
* 根据ids删除多条数据
**/
@Override
public void deleteByIds(String ids) {
String[] idsArr = ids.split(",");
if (idsArr.length > 0) {
List<Long> idList = Stream.of(idsArr).map(Long::valueOf).collect(Collectors.toList());
$!{entityName}Mapper.deleteBatchIds(idList);
}
}
}
##导入宏定义
$!{define.vm}
##设置表后缀(宏定义)
#setTableSuffix("Controller")
##保存文件(宏定义)
#save("/controller", "Controller.java")
##包路径(宏定义)
#setPackageSuffix("controller")
##定义服务名
#set($serviceName = $!tool.append($!tool.firstLowerCase($!tableInfo.name), "Service"))
##定义实体对象名
#set($entityName = $!tool.firstLowerCase($!tableInfo.name))
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.tao.Enum.Msg;
import com.tao.base.BaseQuery;
import com.tao.base.BaseResponse;
import $!{tableInfo.savePackageName}.entity.$!tableInfo.name;
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
import com.tao.exception.CheckException;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
##表注释(宏定义)
#tableComment("表控制层")
@RestController
@RequestMapping("$!tool.firstLowerCase($!tableInfo.name)")
public class $!{tableName} {
/**
* 服务对象
*/
@Autowired
private $!{tableInfo.name}Service $!{serviceName};
/**
* 列表查询不分页 查询全部
**/
@RequestMapping(value = "list", method = RequestMethod.POST)
public BaseResponse list(@RequestBody $!tableInfo.name model) {
//条件查询
QueryWrapper<$!tableInfo.name> queryWrapper = new QueryWrapper();
//动态sql
// if(StringUtils.isNotBlank(model.getAuthor())){
// queryWrapper.lambda().eq($!tableInfo.name::getAuthor,model.getAuthor());
// }
//排序
queryWrapper.lambda().orderByDesc($!tableInfo.name::getCreateTime);
//执行查询
List<$!tableInfo.name> list = $!{serviceName}.list(queryWrapper);
//封装查询结果
return new BaseResponse(Msg.SUCCESS, list);
}
/**
* 列表查询 分页
* 只能查询自己的
**/
@RequestMapping(value = "listPage", method = RequestMethod.POST)
public BaseResponse listPage(@RequestBody $!tableInfo.name model) {
//没有传分页参数时,默认设置查询前10条数据
if (null == model.getPageSize()) {
PageHelper.startPage(BaseQuery.DEFAULT_PAGE, BaseQuery.DEFAULT_SIZE);
} else {
PageHelper.startPage(model.getCurrentPage(), model.getPageSize());
}
//条件查询
QueryWrapper<$!tableInfo.name> queryWrapper = new QueryWrapper();
//动态sql
if (StringUtils.isNotBlank(model.getAuthor())) {
queryWrapper.lambda().eq($!tableInfo.name::getAuthor, model.getAuthor());
}
//排序
queryWrapper.lambda().orderByDesc($!tableInfo.name::getCreateTime);
//执行查询
List<$!tableInfo.name> list = $!{serviceName}.list(queryWrapper);
PageInfo<$!tableInfo.name> pageInfo = new PageInfo<>(list);
//封装查询结果
return new BaseResponse(Msg.SUCCESS, pageInfo.getTotal(), pageInfo.getList());
}
/**
* 保存
**/
@RequestMapping(value = "insert", method = RequestMethod.POST)
public BaseResponse insert(@RequestBody $!tableInfo.name model) {
//设置默认id
if (model.getId() == null) {
model.setId(IdWorker.getId());
}
$!{serviceName}.save(model);
//封装查询结果
return new BaseResponse(Msg.SUCCESS, model.getId());
}
/**
* 根据id更新
**/
@RequestMapping(value = "updateById", method = RequestMethod.PUT)
public BaseResponse updateById(@RequestBody $!tableInfo.name model) throws Exception {
//字段检查
if (null == (model.getId())) {
throw new CheckException(Msg.CHECK_ATTRIBUTE_FAIL, "id不能为空");
}
$!{serviceName}.updateById(model);
//封装查询结果
return new BaseResponse(Msg.SUCCESS);
}
/**
* 根据id查询
**/
@RequestMapping(value = "getById/{id}", method = RequestMethod.GET)
public BaseResponse getById(@PathVariable("id") Long id) {
$!tableInfo.name temp = $!{serviceName}.getById(id);
//封装查询结果
return new BaseResponse(Msg.SUCCESS, temp);
}
/**
* 根据id更新
**/
@RequestMapping(value = "deleteById/{id}", method = RequestMethod.DELETE)
public BaseResponse deleteById(@PathVariable("id") Long id) {
$!{serviceName}.removeById(id);
//封装查询结果
return new BaseResponse(Msg.SUCCESS);
}
/**
* 根据多个id删除
**/
// @RequestMapping(value = "deleteByIds/{ids}", method = RequestMethod.DELETE)
// public BaseResponse deleteByIds(@PathVariable("ids") String ids) throws Exception {
@RequestMapping(value = "deleteByIds", method = RequestMethod.DELETE)
public BaseResponse deleteByIds(@Param("ids") String ids) throws Exception {
//业务检查
if (StringUtils.isEmpty(ids)) {
throw new CheckException(Msg.CHECK_ATTRIBUTE_FAIL, "请传入正确的ids");
}
$!{serviceName}.deleteByIds(ids);
//封装查询结果
return new BaseResponse(Msg.SUCCESS);
}
}
##引入mybatis支持
$!{mybatisSupport.vm}
##定义实体对象名
#set($entityName = $!tool.firstLowerCase($!tableInfo.name))
##设置保存名称与保存位置
$!callback.setFileName($tool.append($!{tableInfo.name}, "Mapping.xml"))
$!callback.setSavePath($tool.append($modulePath, $tool.append("/src/main/resources/mapper/",$entityName)))
##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
#set($pk = $tableInfo.pkColumn.get(0))
#end
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="$!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Mapper">
<resultMap type="$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}" id="$!{tableInfo.name}Map">
#foreach($column in $tableInfo.fullColumn)
<result property="$!column.name" column="$!column.obj.name" jdbcType="$!column.ext.jdbcType"/>
#end
</resultMap>
<!-- 批量插入 -->
<!--
<insert id="insertBatch" keyProperty="$!pk.name" useGeneratedKeys="true">
insert into $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name}(#foreach($column in $tableInfo.otherColumn)$!column.obj.name#if($velocityHasNext), #end#end)
values
<foreach collection="entities" item="entity" separator=",">
(#foreach($column in $tableInfo.otherColumn)#{entity.$!{column.name}}#if($velocityHasNext), #end#end)
</foreach>
</insert>
-->
</mapper>