吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 511|回复: 2
收起左侧

[Java 原创] PDMAN 自定义根据数据库生成类与文件

[复制链接]
isSmallFish 发表于 2024-7-22 14:56
本帖最后由 isSmallFish 于 2024-7-22 15:01 编辑

每次建表后生成实体类很累, 还要写注解 注释, mapper.xml,尤其一个表几十上百字段时更烦了, 当然也有MybatisCodeHelper, mybaties+等插件可以玩, 但是觉得不够爽快, 于是研究了一下PDMAN, 手写生成语句, 完成数据库到项目的一键生成.
1.安装PDMAN和连接数据库, 这个就不赘叙了, 这里主要讲生成项目代码
2.PDMAN自带模板有一些, 可以自己选用
3.题主自用代码块
entity
[Asm] 纯文本查看 复制代码
{{  var today=new Date();    var fullYear=today.getFullYear();
    var month=today.getMonth() + 1;
    var days=today.getDate();
    
    var pkVarName = "undefinedId";
    var pkVarNames = "undefinedIds";
    var pkVarNameU = "UndefinedId";
    var pkFieldKey = "UNDEFINED";
    var pkDataType = "String";
    it.entity.fields.forEach(function(field){
        if(field.primaryKey){
            pkFieldKey = field.defKey;
            pkVarName = it.func.camel(field.defKey,false);
            pkVarNames = pkVarName + "s";
            pkVarNameU = it.func.camel(field.defKey,true);
            pkDataType = field["type"];
            return;
        }
    });
    var pkgName = it.entity.env.base.nameSpace;
    var toLowerName = pkgName.slice(28);
    var controllerPkg = pkgName.slice(0,23);
    var apiName = pkgName.slice(0,24)+"api."+pkgName.slice(28);
    var coreName = pkgName.slice(0,24)+"core."+pkgName.slice(28);
    var beanClass = it.entity.env.base.codeRoot;
    var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);
    var serviceClass = beanClass+'Service';
    var serviceVarName= beanVarName+'Service';
    var mapperVarName = beanVarName+'Mapper';
    var mapperName = beanClass+'Mapper';
    var convertName = beanClass+'Convert';
    var convertVarName = beanVarName+'Convert';
    var beanClassEntity = beanClass+'Entity';
    var QueryDto = 'queryDto';
    var UpdateDto = 'updateDto';
    var InsertDto = 'insertDto';
    var Info = 'info';
    var beanClassInfo = beanClass+'Info';
    var beanClassQuery = beanClass+'QueryDto';
    var beanClassUpdate = beanClass+'UpdateDto';
    var beanClassInsert = beanClass+'InsertDto';
    var beanClassQueryName = "查询dto";
    var beanClassUpdateName = "修改dto";
    var beanClassinsertName = "新增dto";
    var entitiesName = "entities";
    var valid = "@Valid";
    var QueryById = beanVarName+"QueryById";
    var SelectPageList = beanVarName+"SelectPageList";
    var SelectList = beanVarName+"SelectList";
    var InsertData = beanVarName+"InsertData";
    var UpdateById = beanVarName+"UpdateById";
    var DeleteById = beanVarName+"DeleteById";
    var project = "IMPS";
    var author = "ld";
}}package {{=coreName}}.{{=entitiesName}};
$blankline
import com.cenboomh.basicframework.db.genid.SnowflakeIDGen;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import tk.mybatis.mapper.annotation.KeySql;

import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.time.LocalDateTime;

$blankline


/**
 * {{=it.entity.defName}}
 *
 * @AuThor {{=author}}
 */
@Data
@Builder
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "{{=it.entity.defName}}",description = "{{=it.entity.defName}}")
@Table(name = "{{=it.entity.defKey}}")
public class {{=beanClass}}Entity implements Serializable{
    private static final long serialVersionUID = 1L;
$blankline
{{~it.entity.fields:field:index}}
    /** {{=it.func.join(field.defName,field.comment,';')}} */
    {{? field.primaryKey }}
    @Id
    @KeySql(genId = SnowflakeIDGen.class)
    {{?}}
    @ApiModelProperty(name = "{{=field.defName}}" , notes = "{{=field.defName}}")
    private {{? field.type=="VARCHAR2" }}String{{?? field.type=="DATE"}}LocalDateTime{{?? field.type=="Date"}}LocalDateTime{{?? field.type=="NUMBER"}}Integer{{??}}{{=field.type}}{{?}} {{=it.func.camel(field.defKey,false)}};
$blankline
{{~}}
$blankline
}


mapper
[Asm] 纯文本查看 复制代码
{{  var today=new Date();
    var fullYear=today.getFullYear();
    var month=today.getMonth() + 1;
    var days=today.getDate();
    
    var pkVarName = "undefinedId";
    var pkVarNames = "undefinedIds";
    var pkVarNameU = "UndefinedId";
    var pkFieldKey = "UNDEFINED";
    var pkDataType = "String";
    it.entity.fields.forEach(function(field){
        if(field.primaryKey){
            pkFieldKey = field.defKey;
            pkVarName = it.func.camel(field.defKey,false);
            pkVarNames = pkVarName + "s";
            pkVarNameU = it.func.camel(field.defKey,true);
            pkDataType = field["type"];
            return;
        }
    });
    var pkgName = it.entity.env.base.nameSpace;
    var toLowerName = pkgName.slice(28);
    var controllerPkg = pkgName.slice(0,23);
    var apiName = pkgName.slice(0,24)+"api."+pkgName.slice(28);
    var coreName = pkgName.slice(0,24)+"core."+pkgName.slice(28);
    var beanClass = it.entity.env.base.codeRoot;
    var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);
    var serviceClass = beanClass+'Service';
    var serviceVarName= beanVarName+'Service';
    var mapperVarName = beanVarName+'Mapper';
    var mapperName = beanClass+'Mapper';
    var convertName = beanClass+'Convert';
    var convertVarName = beanVarName+'Convert';
    var beanClassEntity = beanClass+'Entity';
    var QueryDto = 'queryDto';
    var UpdateDto = 'updateDto';
    var InsertDto = 'insertDto';
    var Info = 'info';
    var beanClassInfo = beanClass+'Info';
    var beanClassQuery = beanClass+'QueryDto';
    var beanClassUpdate = beanClass+'UpdateDto';
    var beanClassInsert = beanClass+'InsertDto';
    var beanClassQueryName = "查询dto";
    var beanClassUpdateName = "修改dto";
    var beanClassinsertName = "新增dto";
    var entitiesName = "entities";
    var valid = "@Valid";
    var QueryById = beanVarName+"QueryById";
    var SelectPageList = beanVarName+"SelectPageList";
    var SelectList = beanVarName+"SelectList";
    var InsertData = beanVarName+"InsertData";
    var UpdateById = beanVarName+"UpdateById";
    var DeleteById = beanVarName+"DeleteById";
    var project = "IMPS";
    var author = "ld";
}}package {{=coreName}}.mapper;
$blankline

import {{=apiName}}.model.dto.{{=beanClassQuery}};
import {{=coreName}}.{{=entitiesName}}.{{=beanClassEntity}};
import tk.mybatis.mapper.common.Mapper;

import java.util.List;
$blankline


/**
 * {{=it.entity.defName}}
 *
 * @author {{=author}}
 */
public interface {{=beanClass}}Mapper extends Mapper<{{=beanClass}}Entity> {

    /**
     * 查询
     *
     * @param {{=QueryDto}} 查询入参
     * @return 记录
     */
    List<{{=beanClassInfo}}> selectList({{=beanClassQuery}} {{=QueryDto}});
}


service
[Asm] 纯文本查看 复制代码
{{  var today=new Date();
    var fullYear=today.getFullYear();
    var month=today.getMonth() + 1;
    var days=today.getDate();
    
    var pkVarName = "undefinedId";
    var pkVarNames = "undefinedIds";
    var pkVarNameU = "UndefinedId";
    var pkFieldKey = "UNDEFINED";
    var pkDataType = "String";
    it.entity.fields.forEach(function(field){
        if(field.primaryKey){
            pkFieldKey = field.defKey;
            pkVarName = it.func.camel(field.defKey,false);
            pkVarNames = pkVarName + "s";
            pkVarNameU = it.func.camel(field.defKey,true);
            pkDataType = field["type"];
            return;
        }
    });
    var pkgName = it.entity.env.base.nameSpace;
    var toLowerName = pkgName.slice(28);
    var controllerPkg = pkgName.slice(0,23);
    var apiName = pkgName.slice(0,24)+"api."+pkgName.slice(28);
    var coreName = pkgName.slice(0,24)+"core."+pkgName.slice(28);
    var beanClass = it.entity.env.base.codeRoot;
    var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);
    var serviceClass = beanClass+'Service';
    var serviceVarName= beanVarName+'Service';
    var mapperVarName = beanVarName+'Mapper';
    var mapperName = beanClass+'Mapper';
    var convertName = beanClass+'Convert';
    var convertVarName = beanVarName+'Convert';
    var beanClassEntity = beanClass+'Entity';
    var QueryDto = 'queryDto';
    var UpdateDto = 'updateDto';
    var InsertDto = 'insertDto';
    var Info = 'info';
    var beanClassInfo = beanClass+'Info';
    var beanClassQuery = beanClass+'QueryDto';
    var beanClassUpdate = beanClass+'UpdateDto';
    var beanClassInsert = beanClass+'InsertDto';
    var beanClassQueryName = "查询dto";
    var beanClassUpdateName = "修改dto";
    var beanClassinsertName = "新增dto";
    var entitiesName = "entities";
    var valid = "@Valid";
    var QueryById = beanVarName+"QueryById";
    var SelectPageList = beanVarName+"SelectPageList";
    var SelectList = beanVarName+"SelectList";
    var InsertData = beanVarName+"InsertData";
    var UpdateById = beanVarName+"UpdateById";
    var DeleteById = beanVarName+"DeleteById";
    var project = "IMPS";
    var author = "ld";
}}package {{=coreName}}.service;
$blankline
import com.cenboomh.basicframework.commons.domain.PageResult;
import {{=apiName}}.model.{{=beanClassInfo}};
import {{=apiName}}.model.dto.{{=beanClassQuery}};
import {{=apiName}}.model.dto.{{=beanClassUpdate}};
import {{=apiName}}.model.dto.{{=beanClassInsert}};
import {{=coreName}}.convert.{{=convertName}};
import {{=coreName}}.mapper.{{=mapperName}};
import com.cenboomh.hicor.huap.api.GatewayContextHolder;
import com.github.pagehelper.Page;
import com.github.pagehelper.page.PageMethod;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.weekend.Weekend;
$blankline
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
$blankline
/**
 * {{=it.entity.defName}}({{=it.entity.defKey}})表服务实现类
 *
 * @author {{=author}}
 */
@Slf4j
@Service
public class {{=serviceClass}}{
    $blankline
    @Resource
    private {{=mapperName}} {{=mapperVarName}};
    $blankline
    @Resource
    private {{=convertName}} {{=convertVarName}};
    $blankline
    @Resource
    private SqlSessionFactory sqlSessionFactory;
    $blankline
    /** 
     * {{=it.entity.defName}}通过ID查询单条数据 
     *
     * @param {{=pkVarName}} 主键
     * @return 实例对象
     * @author {{=author}}
     */
    public {{=beanClassInfo}} {{=QueryById}}(String {{=pkVarName}}){
        return {{=convertVarName}}.convert({{=mapperVarName}}.selectByPrimaryKey({{=pkVarName}}));
    }
    $blankline

    /**
     * {{=it.entity.defName}}分页查询
     *
     * @param {{=QueryDto}} 查询信息
     * @return {@link PageResult<{{=beanClassInfo}}>} 数据集合
     * @author {{=author}}
     */
    public PageResult<{{=beanClassInfo}}> {{=SelectPageList}}({{=beanClassQuery}} {{=QueryDto}}) {
        Page<{{=beanClassInfo}}> entityPage = PageMethod.startPage({{=QueryDto}}.getPageNum(), {{=QueryDto}}.getPageSize())
                .doSelectPage(() -> {{=SelectList}}({{=QueryDto}}));
        return new PageResult<>(entityPage.getResult(), entityPage.getPageSize(), entityPage.getTotal());
    }
    $blankline
    
    /**
     * {{=it.entity.defName}}全部查询
     *
     * @param {{=QueryDto}} 查询信息
     * @return {@link PageResult<{{=beanClassInfo}}>} 数据集合
     * @author {{=author}}
     */
    public List<{{=beanClassInfo}}> {{=SelectList}}({{=beanClassQuery}} {{=QueryDto}}) {
        return {{=mapperVarName}}.selectList({{=QueryDto}});
    }
    $blankline
    /** 
     * {{=it.entity.defName}}新增数据
     *
     * @param {{=InsertDto}} 实例对象
     * @return int 是否成功
     * @author {{=author}}
     */
    @Transactional(rollbackFor = Throwable.class)
    public int {{=InsertData}}({{=beanClassInsert}} {{=InsertDto}}){
        return {{=mapperVarName}}.insertSelective(
            {{=convertVarName}}.insertConvertEntity({{=InsertDto}})
                .setCreateBy(GatewayContextHolder.get().getUserId())
                .setCreateTime(LocalDateTime.now())
        );
    }
    $blankline
    /** 
     * {{=it.entity.defName}}更新数据
     *
     * @param {{=UpdateDto}} 实例对象
     * @return int 是否成功
     * @author {{=author}}
     */
    @Transactional(rollbackFor = Throwable.class)
    public int {{=UpdateById}}({{=beanClassUpdate}} {{=UpdateDto}}){
        return {{=mapperVarName}}.updateByPrimaryKeySelective(
            {{=convertVarName}}.updateConvertEntity({{=UpdateDto}})
                .setUpdateBy(GatewayContextHolder.get().getUserId())
                .setUpdateTime(LocalDateTime.now())
        );
    }
    $blankline
    /** 
     * {{=it.entity.defName}}通过主键删除数据
     *
     * @param {{=pkVarNames}} 主键
     * @author {{=author}}
     */
    @Transactional(rollbackFor = Throwable.class)
    public void {{=DeleteById}}(String {{=pkVarNames}}){
        batchDeleteByIds(Arrays.asList({{=pkVarNames}}.split(",")));
    }
    $blankline
    /**
     * 批量删除
     *
     * @param {{=pkVarNames}} 主键
     */
    @Transactional(rollbackFor = Throwable.class)
    public void batchDeleteByIds(List<String> {{=pkVarNames}}) {
        List<List<String>> partition = Lists.partition({{=pkVarNames}}, 200);
        if (ObjectUtils.isNotEmpty(partition)) {
            try (SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, Boolean.FALSE)) {
                {{=mapperName}} mapper = sqlSession.getMapper({{=mapperName}}.class);
                partition.forEach(l -> {
                    l.forEach(mapper::deleteByPrimaryKey);
                    sqlSession.commit();
                    sqlSession.clearCache();
                });
            }
        }
    }
}


效果图
[Asm] 纯文本查看 复制代码
package core..service;

import com.cenboomh.basicframework.commons.domain.PageResult;
import api..model.BmsInvRecordInfo;
import api..model.dto.BmsInvRecordQueryDto;
import api..model.dto.BmsInvRecordUpdateDto;
import api..model.dto.BmsInvRecordInsertDto;
import core..convert.BmsInvRecordConvert;
import core..mapper.BmsInvRecordMapper;
import com.cenboomh.hicor.huap.api.GatewayContextHolder;
import com.github.pagehelper.Page;
import com.github.pagehelper.page.PageMethod;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.weekend.Weekend;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;

/**
 * ****表服务实现类
 *
 * @author ld
 */
@Slf4j
@Service
public class BmsInvRecordService{
    
    @Resource
    private BmsInvRecordMapper bmsInvRecordMapper;
    
    @Resource
    private BmsInvRecordConvert bmsInvRecordConvert;
    
    @Resource
    private SqlSessionFactory sqlSessionFactory;
    
    /** 
     * *****
     *
     * @param id 主键
     * @return 实例对象
     * @author ld
     */
    public BmsInvRecordInfo bmsInvRecordQueryById(String id){
        return bmsInvRecordConvert.convert(bmsInvRecordMapper.selectByPrimaryKey(id));
    }
    
    /**
     * *****
     *
     * @param queryDto 查询信息
     * @return {@link PageResult<BmsInvRecordInfo>} 数据集合
     * @author ld
     */
    public PageResult<BmsInvRecordInfo> bmsInvRecordSelectPageList(BmsInvRecordQueryDto queryDto) {
        Page<BmsInvRecordInfo> entityPage = PageMethod.startPage(queryDto.getPageNum(), queryDto.getPageSize())
                .doSelectPage(() -> bmsInvRecordSelectList(queryDto));
        return new PageResult<>(entityPage.getResult(), entityPage.getPageSize(), entityPage.getTotal());
    }
    
    /**
     * *****
     *
     * @param queryDto 查询信息
     * @return {@link PageResult<BmsInvRecordInfo>} 数据集合
     * @author ld
     */
    public List<BmsInvRecordInfo> bmsInvRecordSelectList(BmsInvRecordQueryDto queryDto) {
        return bmsInvRecordMapper.selectList(queryDto);
    }
    
    /** 
     * *****
     *
     * @param insertDto 实例对象
     * @return int 是否成功
     * @author ld
     */
    @Transactional(rollbackFor = Throwable.class)
    public int bmsInvRecordInsertData(BmsInvRecordInsertDto insertDto){
        return bmsInvRecordMapper.insertSelective(
            bmsInvRecordConvert.insertConvertEntity(insertDto)
                .setCreateBy(GatewayContextHolder.get().getUserId())
                .setCreateTime(LocalDateTime.now())
        );
    }
    
    /** 
     * *****
     *
     * @param updateDto 实例对象
     * @return int 是否成功
     * @author ld
     */
    @Transactional(rollbackFor = Throwable.class)
    public int bmsInvRecordUpdateById(BmsInvRecordUpdateDto updateDto){
        return bmsInvRecordMapper.updateByPrimaryKeySelective(
            bmsInvRecordConvert.updateConvertEntity(updateDto)
                .setUpdateBy(GatewayContextHolder.get().getUserId())
                .setUpdateTime(LocalDateTime.now())
        );
    }
    
    /** 
     * *****
     *
     * @param ids 主键
     * @author ld
     */
    @Transactional(rollbackFor = Throwable.class)
    public void bmsInvRecordDeleteById(String ids){
        batchDeleteByIds(Arrays.asList(ids.split(",")));
    }
    
    /**
     * 批量删除
     *
     * @param ids 主键
     */
    @Transactional(rollbackFor = Throwable.class)
    public void batchDeleteByIds(List<String> ids) {
        List<List<String>> partition = Lists.partition(ids, 200);
        if (ObjectUtils.isNotEmpty(partition)) {
            try (SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, Boolean.FALSE)) {
                BmsInvRecordMapper mapper = sqlSession.getMapper(BmsInvRecordMapper.class);
                partition.forEach(l -> {
                    l.forEach(mapper::deleteByPrimaryKey);
                    sqlSession.commit();
                    sqlSession.clearCache();
                });
            }
        }
    }
}

PDMAN自带

PDMAN自带

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| isSmallFish 发表于 2024-7-22 14:59
理论上这不属于JAVA 属于dot.js, 所以可以生成所有语言的entity与mapper等数据文件, 目前题主根据业务表生成的所有代码是可以玩的
newdriver 发表于 2024-7-22 17:06
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-12 13:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表