首页 > 编程语言 >手写Java代码生成工具(五)生成service和serviceImpl文件

手写Java代码生成工具(五)生成service和serviceImpl文件

时间:2024-10-20 23:19:41浏览次数:3  
标签:代码生成 Java service tableInfo newLine write bw methodName Constants

目录


前言

写博客是为了记录和分享自己的学习,所分享内容是网上的资源,由于非原创项目,主要分享学习思路,只展示贴图部分代码本人不分享本项目源码,支持项目付费


一、创建service文件以及导入所需的类

        //创建Service包
        File folder = new File(Constants.PATH_SERVICE);
        if(!folder.exists()){
            folder.mkdirs();
        }
        String className=tableInfo.getBeanName()+Constants.SUFFIX_BEAN_SERVICE;
        //创建Service文件
        File file = new File(folder,className+".java");
        OutputStream out=null;
        OutputStreamWriter writer=null;
        BufferedWriter bw=null;

        out=new FileOutputStream(file);
        writer=new OutputStreamWriter(out,"UTF-8");
        bw=new BufferedWriter(writer);


        //生成包名
        bw.write("package "+Constants.PACKAGE_SERVICE+";");
        bw.newLine();
        bw.newLine();

        bw.write("import "+Constants.PACKAGE_PO+"."+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+";");
        bw.newLine();
        bw.write("import "+Constants.PACKAGE_QUREY+"."+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_QUREY+";");
        bw.newLine();
        bw.write("import "+Constants.PACKAGE_VO+".PaginationResultVO;");
        bw.newLine();
        bw.write("import java.util.List;");
        bw.newLine();
  

这段代码用于创建一个 Service 包(如果该包不存在的话),并在该包中创建一个以特定名称命名的 Java 文件。然后,向该文件中写入 Java 类的包声明以及导入必要的类。

  1. 创建 Service 包和文件
  • File folder = new File(Constants.PATH_SERVICE);:通过一个常量路径创建一个表示 Service 包的File对象。
  • if(!folder.exists()){ folder.mkdirs(); }:如果该包对应的文件路径不存在,则创建这个目录。
  • String className = tableInfo.getBeanName() + Constants.SUFFIX_BEAN_SERVICE;:根据表信息获取服务类的名称。
  • File file = new File(folder, className + “.java”);:在已创建的 Service 包中创建一个以特定名称命名的 Java 文件。
  1. 准备写入文件
  • OutputStream out = null;、OutputStreamWriter writer = null;、BufferedWriter bw = null;:声明输出流、输出流写入器和缓冲写入器,用于向文件写入内容。
  • out = new FileOutputStream(file);:创建一个文件输出流,指向要创建的 Java 文件。
  • writer = new OutputStreamWriter(out, “UTF-8”);:使用指定的字符编码创建一个输出流写入器,包裹文件输出流。
  • bw = new BufferedWriter(writer);:创建一个缓冲写入器,包裹输出流写入器,以提高写入效率。
  1. 写入内容
  • 生成包名:bw.write("package " + Constants.PACKAGE_SERVICE + “;”);,写入服务类所在的包名。
  • 导入必要的类:
    bw.write("import " + Constants.PACKAGE_PO + “.” + tableInfo.getBeanName() + Constants.SUFFIX_BEAN_PO + “;”);:导入实体类。
    bw.write("import " + Constants.PACKAGE_QUREY + “.” + tableInfo.getBeanName() + Constants.SUFFIX_BEAN_QUREY + “;”);:导入查询对象类。
    bw.write("import " + Constants.PACKAGE_VO + “.PaginationResultVO;”);:导入分页结果视图对象类。
    bw.write(“import java.util.List;”);:导入java.util.List类,用于表示列表。

二、生成service类需要的方法

       //生成类名
            bw.newLine();
            BuildComment.createClassComment(bw, tableInfo.getComment()+" Service");
            bw.write("public interface "+className+" {");
            bw.newLine();


            BuildComment.createFieldComment(bw,"根据条件查询列表");
            bw.write("\tList<"+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+"> findListByParam("+tableInfo.getBeanParamName()+" param);");
            bw.newLine();
            bw.newLine();

            BuildComment.createFieldComment(bw,"根据条件查询数量");
            bw.write("\tInteger findCountByParam("+tableInfo.getBeanParamName()+" query);");
            bw.newLine();
            bw.newLine();

            BuildComment.createFieldComment(bw,"分页查询");
            bw.write("\tPaginationResultVO<"+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+"> findListByPage("+tableInfo.getBeanParamName()+" query);");
            bw.newLine();
            bw.newLine();

            BuildComment.createFieldComment(bw,"新增");
            bw.write("\tInteger add("+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+" bean);");
            bw.newLine();
            bw.newLine();


            BuildComment.createFieldComment(bw,"批量新增");
            bw.write("\tInteger addBatch(List<"+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+"> listBean);");
            bw.newLine();
            bw.newLine();

            BuildComment.createFieldComment(bw,"批量新增或修改");
            bw.write("\tInteger addOrUpdateBatch(List<"+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+"> listBean);");
            bw.newLine();
            bw.newLine();

            for(Map.Entry<String,List<FieldInfo>> entry:tableInfo.getKeyIndexMap().entrySet()){
                List<FieldInfo> fieldInfoList = entry.getValue();

                Integer index=0;
                StringBuilder methodName = new StringBuilder();
                StringBuilder methodParamName = new StringBuilder();
                for(FieldInfo fieldInfo:fieldInfoList){
                    index++;
                    methodName.append(StringUtils.uperCaseFirstLetter(fieldInfo.getPropertyName()));
                    if(index<fieldInfoList.size()){
                        methodName.append("And");
                    }

                    methodParamName.append(fieldInfo.getJavaType()+" "+fieldInfo.getPropertyName());
                    if(index<fieldInfoList.size()){
                        methodParamName.append(",");
                    }
                }
                //TODO 类目一致
                BuildComment.createFieldComment(bw,"根据"+methodName+"查询");
                bw.write("\t"+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+" selectBy"+ methodName+"("+methodParamName+");");
                bw.newLine();
                bw.newLine();

                BuildComment.createFieldComment(bw,"根据"+methodName+"更新");
                bw.write("\t Integer updateBy"+ methodName+"("+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+" bean,"+methodParamName+");");
                bw.newLine();
                bw.newLine();

                BuildComment.createFieldComment(bw,"根据"+methodName+"删除");
                bw.write("\t Integer deleteBy"+ methodName+"("+methodParamName+");");
                bw.newLine();
                bw.newLine();

这段代码在生成的service类文件中继续添加内容,包括生成类名、注释以及定义各种服务方法的接口。这些方法涵盖了根据条件查询列表、查询数量、分页查询、新增、批量新增、批量新增或修改,以及根据特定字段组合进行查询、更新和删除等功能。

  1. 生成类名和接口声明:
  • BuildComment.createClassComment(bw, tableInfo.getComment() + " Service");:调用方法生成类的注释。
  • bw.write(“public interface " + className + " {”);:声明一个类接口,接口名为根据表信息生成的类名。
  1. 定义服务方法:
  • 对于每个方法,首先使用BuildComment.createFieldComment(bw, “方法描述”)生成方法的注释,然后定义方法签名。
  • 方法包括:
  • 根据条件查询列表:List<实体类名> findListByParam(参数类型 param);。
  • 根据条件查询数量:IntegerfindCountByParam(参数类型 query);。
  • 分页查询:PaginationResultVO<实体类名>findListByPage(参数类型 query);。
  • 新增:Integer add(实体类名 bean);。
  • 批量新增:Integer addBatch(List<实体类名> listBean);。
  • 批量新增或修改:Integer addOrUpdateBatch(List<实体类名> listBean);。
  • 对于每个键索引对应的字段组合,定义查询、更新和删除方法:
    查询:实体类名 selectBy方法名(参数列表);。
    更新:Integer updateBy方法名(实体类名 bean, 参数列表);。
    删除:Integer deleteBy方法名(参数列表);。

三、创建ServiceImpl文件以及生成导入语句

 //创建ServiceImpl包
        File folder = new File(Constants.PATH_SERVICE_IMPL);
        if(!folder.exists()){
            folder.mkdirs();
        }
        String mapperName=tableInfo.getBeanName()+Constants.SUFFIX_BEAN_MAPPER;
        String mapperBeanName=StringUtils.lowerCaseFirstLetter(mapperName);

        String className=tableInfo.getBeanName()+Constants.SUFFIX_BEAN_SERVICE_IMPL;
        //创建ServiceImpl文件
        File file = new File(folder,className+".java");
        OutputStream out=null;
        OutputStreamWriter writer=null;
        BufferedWriter bw=null;
        
        out=new FileOutputStream(file);
        writer=new OutputStreamWriter(out,"UTF-8");
        bw=new BufferedWriter(writer);


        //生成包名
        bw.write("package "+Constants.PACKAGE_SERVICE_IMPL+";");
        bw.newLine();
        bw.newLine();

        bw.write("import org.springframework.stereotype.Service;");
        bw.newLine();
        bw.write("import javax.annotation.Resource;");
        bw.newLine();
        bw.write("import "+Constants.PACKAGE_SERVICE+"."+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_SERVICE+";");
        bw.newLine();
        bw.write("import "+Constants.PACKAGE_PO+"."+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+";");
        bw.newLine();
        bw.write("import "+Constants.PACKAGE_QUREY+"."+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_QUREY+";");
        bw.newLine();
        bw.write("import "+Constants.PACKAGE_MAPPER+"."+mapperName+";");
        bw.newLine();
        bw.write("import "+Constants.PACKAGE_VO+".PaginationResultVO;");
        bw.newLine();
        bw.write("import java.util.List;");
        bw.newLine();
        bw.write("import "+Constants.PACKAGE_ENUM+".PageSize;");
        bw.newLine();
        bw.write("import "+Constants.PACKAGE_QUREY+".SimplePage;");
        bw.newLine();

创建一个名为ServiceImpl的包(如果该包不存在的话),并在该包中创建一个以特定名称命名的 Java 文件。然后,向该文件中写入 Java 类的包声明以及导入必要的类和包。

  1. 创建ServiceImpl包
  • File folder = new File(Constants.PATH_SERVICE_IMPL);:通过一个常量路径创建一个表示ServiceImpl包的File对象。
  • if(!folder.exists()){ folder.mkdirs(); }:如果该包对应的文件路径不存在,则创建这个目录。
  1. 创建ServiceImpl文件
  • String mapperName = tableInfo.getBeanName() + Constants.SUFFIX_BEAN_MAPPER;:获取 Mapper 类的名称。
  • String mapperBeanName = StringUtils.lowerCaseFirstLetter(mapperName);:将 Mapper 类名的首字母小写,可能用于作为 Mapper 的实例变量名。
  • String className = tableInfo.getBeanName() + Constants.SUFFIX_BEAN_SERVICE_IMPL;:根据表信息获取服务实现类的名称。
  • File file = new File(folder, className + “.java”);:在已创建的ServiceImpl包中创建一个以特定名称命名的 Java 文件。
  1. 准备写入文件
  • OutputStream out = null;、OutputStreamWriter writer = null;、BufferedWriter bw = null;:声明输出流、输出流写入器和缓冲写入器,用于向文件写入内容。
  • out = new FileOutputStream(file);:创建一个文件输出流,指向要创建的 Java 文件。
  • writer = new OutputStreamWriter(out, “UTF-8”);:使用指定的字符编码创建一个输出流写入器,包裹文件输出流。
  • bw = new BufferedWriter(writer);:创建一个缓冲写入器,包裹输出流写入器,以提高写入效率。
  1. 写入内容
  • 生成包名:bw.write("package " + Constants.PACKAGE_SERVICE_IMPL + “;”);,写入服务实现类所在的包名。
  • 导入必要的类和包:
  • bw.write(“import org.springframework.stereotype.Service;”);:导入 Spring的@Service注解。
  • bw.write(“import javax.annotation.Resource;”);:导入@Resource注解用于依赖注入。
  • bw.write("import " + Constants.PACKAGE_SERVICE + “.” + tableInfo.getBeanName() +Constants.SUFFIX_BEAN_SERVICE + “;”);:导入服务接口类。
  • bw.write("import " +Constants.PACKAGE_PO + “.” + tableInfo.getBeanName() +Constants.SUFFIX_BEAN_PO + “;”);:导入实体类。
  • bw.write("import " + Constants.PACKAGE_QUREY + “.” + tableInfo.getBeanName() +Constants.SUFFIX_BEAN_QUREY + “;”);:导入查询对象类。
  • bw.write("import " +Constants.PACKAGE_MAPPER + “.” + mapperName + “;”);:导入 Mapper 类。
  • bw.write(“import " + Constants.PACKAGE_VO +”.PaginationResultVO;");:导入分页结果视图对象类。
  • bw.write(“import.java.util.List;”);:导入java.util.List类,用于表示列表。
  • bw.write("import " +Constants.PACKAGE_ENUM + “.PageSize;”);:导入自定义的枚举类。
  • bw.write("import "+ Constants.PACKAGE_QUREY + “.SimplePage;”);:导入分页查询对象类


四、生成的ServiceImpl类文件中添加内容

            //生成类名
            bw.newLine();
            BuildComment.createClassComment(bw, tableInfo.getComment());
            bw.write("@Service(\""+mapperName+"\")");
            bw.newLine();
            bw.write("public class "+className+" implements "+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_SERVICE+" {");
            bw.newLine();
            bw.newLine();


            bw.write("\t@Resource");
            bw.newLine();
            bw.write("\tprivate "+mapperName+"<"+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+","+tableInfo.getBeanParamName()+"> "+mapperBeanName+";");
            bw.newLine();
            bw.newLine();

            //TODO
            BuildComment.createFieldComment(bw,"根据条件查询列表");
            bw.write("\t@Override");
            bw.newLine();
            bw.write("\tpublic List<"+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+"> findListByParam("+tableInfo.getBeanParamName()+" param) {");
            bw.newLine();
            bw.write("\t\treturn this."+mapperBeanName+".selectList(param);");
            bw.newLine();
            bw.write("\t}");
            bw.newLine();
            bw.newLine();

            BuildComment.createFieldComment(bw,"根据条件查询数量");
            bw.write("\t@Override");
            bw.newLine();
            bw.write("\tpublic Integer findCountByParam("+tableInfo.getBeanParamName()+" param) {");
            bw.newLine();
            bw.write("\t\treturn this."+mapperBeanName+".selectCount(param);");
            bw.newLine();
            bw.write("\t}");
            bw.newLine();
            bw.newLine();

            BuildComment.createFieldComment(bw,"分页查询");
            bw.write("\t@Override");
            bw.newLine();
            bw.write("\tpublic PaginationResultVO<"+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+"> findListByPage("+tableInfo.getBeanParamName()+" query) {");
            bw.newLine();
            bw.write("\t\t Integer count=this.findCountByParam(query);");
            bw.newLine();
            bw.write("\t\t Integer pageSize = query.getPageSize()==null?PageSize.SIZE15.getSize():query.getPageSize();");
            bw.newLine();
            bw.write("\t\t SimplePage page = new SimplePage(query.getPageNo(), count, pageSize);");
            bw.newLine();
            bw.write("\t\t query.setSimplePage(page);");
            bw.newLine();
            bw.write("\t\t List<"+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+"> list = this.findListByParam(query);");
            bw.newLine();
            bw.write("\t\t PaginationResultVO<"+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+"> result = new PaginationResultVO(count, page.getPageSize(),page.getPageNo(),page.getPageTotal(),list);");
            bw.newLine();
            bw.write("\t\t return result;");
            bw.newLine();
            bw.write("\t}");
            bw.newLine();
            bw.newLine();

            BuildComment.createFieldComment(bw,"新增");
            bw.write("\t@Override");
            bw.newLine();
            bw.write("\tpublic Integer add("+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+" bean) {");
            bw.newLine();
            bw.write("\t\treturn this."+mapperBeanName+".insert(bean);");
            bw.newLine();
            bw.write("\t}");
            bw.newLine();
            bw.newLine();


            BuildComment.createFieldComment(bw,"批量新增");
            bw.write("\t@Override");
            bw.newLine();
            bw.write("\tpublic Integer addBatch(List<"+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+"> listBean) {");
            bw.newLine();
            bw.write("\t\tif(listBean == null || listBean.isEmpty()) {");
            bw.newLine();
            bw.write("\t\t\treturn 0;");
            bw.newLine();
            bw.write("\t\t}");
            bw.newLine();
            bw.write("\t\treturn this."+mapperBeanName+".insertBatch(listBean);");
            bw.newLine();
            bw.write("\t}");
            bw.newLine();
            bw.newLine();

            BuildComment.createFieldComment(bw,"批量新增或修改");
            bw.write("\t@Override");
            bw.newLine();
            bw.write("\tpublic Integer addOrUpdateBatch(List<"+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+"> listBean) {");
            bw.newLine();
            bw.write("\t\tif(listBean == null || listBean.isEmpty()) {");
            bw.newLine();
            bw.write("\t\t\treturn 0;");
            bw.newLine();
            bw.write("\t\t}");
            bw.newLine();
            bw.write("\t\treturn this."+mapperBeanName+".insertBatchOrUpdate(listBean);");
            bw.newLine();
            bw.write("\t}");
            bw.newLine();
            bw.newLine();

这段代码在生成的ServiceImpl类文件中继续添加内容,包括生成类名、添加注解、定义成员变量以及实现服务接口中的各个方法

  1. 生成类名和添加注解:
  • BuildComment.createClassComment(bw, tableInfo.getComment());:调用方法生成类的注释。

  • bw.write(“@Service(”" + mapperName + “”)");:添加@Service注解,并指定服务的名称为 Mapper 类名。

  • bw.write("public class " + className + " implements " + tableInfo.getBeanName() +Cw 创建分页结果视图对象并返回。

  • 新增:调用 Mapper 中的insert方法,传入参数并返回结果。

  • 批量新增:检查列表是否为空,若为空则返回 0。调用 Mapper 中的insertBatch方法,传入列表并返回结果。

  • 批量新增或修改:检查列表是否为空,若为空则返回 0。调用 Mapper 中的insertBatchOrUpdate方法(可能在 Mapper 中没有实现这个方法,需要根据实际情况进行调整),传入列表并返回结果。

五、遍历索引,生成基础增删改查

            for(Map.Entry<String, List<FieldInfo>> entry:tableInfo.getKeyIndexMap().entrySet()){
                List<FieldInfo> fieldInfoList = entry.getValue();

                Integer index=0;
                StringBuilder methodName = new StringBuilder();
                StringBuilder methodParamName = new StringBuilder();
                StringBuilder paramsBuilder = new StringBuilder();
                for(FieldInfo fieldInfo:fieldInfoList){
                    index++;
                    methodName.append(StringUtils.uperCaseFirstLetter(fieldInfo.getPropertyName()));
                    if(index<fieldInfoList.size()){
                        methodName.append("And");
                    }

                    methodParamName.append(fieldInfo.getJavaType()+" "+fieldInfo.getPropertyName());

                    paramsBuilder.append(fieldInfo.getPropertyName());
                    if(index<fieldInfoList.size()){
                        methodParamName.append(",");
                        paramsBuilder.append(",");
                    }
                }
                //TODO 类目一致
                BuildComment.createFieldComment(bw,"根据"+methodName+"查询");
                bw.write("\t@Override");
                bw.newLine();
                bw.write("\tpublic "+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+" selectBy"+ methodName+"("+methodParamName+") {");
                bw.newLine();
                bw.write("\t\treturn this."+mapperBeanName+".selectBy"+methodName+"("+paramsBuilder+");");
                bw.newLine();
                bw.write("\t}");
                bw.newLine();
                bw.newLine();

                BuildComment.createFieldComment(bw,"根据"+methodName+"更新");
                bw.write("\t@Override");
                bw.newLine();
                bw.write("\tpublic  Integer updateBy"+ methodName+"("+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+" bean,"+methodParamName+") {");
                bw.newLine();
                bw.write("\t\treturn this."+mapperBeanName+".updateBy"+methodName+"(bean,"+paramsBuilder+");");
                bw.newLine();
                bw.write("\t}");
                bw.newLine();
                bw.newLine();

                BuildComment.createFieldComment(bw,"根据"+methodName+"删除");
                bw.write("\t@Override");
                bw.newLine();
                bw.write("\tpublic  Integer deleteBy"+ methodName+"("+methodParamName+") {");
                bw.newLine();
                bw.write("\t\treturn this."+mapperBeanName+".deleteBy"+methodName+"("+paramsBuilder+");");
                bw.newLine();
                bw.write("\t}");
                bw.newLine();
                bw.newLine();

遍历表的键索引映射,针对每个键对应的字段组合,在服务实现类中实现了根据这些字段组合进行查询、更新和删除的方法。

  1. 遍历键索引映射:
  • for(Map.Entry<String, List> entry:tableInfo.getKeyIndexMap().entrySet()){…}:遍历表的键索引映射,获取每个键对应的字段信息列表。
  1. 生成方法名和参数名:
  • 对于每个字段信息列表,遍历其中的字段信息:
    Integer index=0; StringBuilder methodName = new StringBuilder(); StringBuilder methodParamName = new StringBuilder(); StringBuilder paramsBuilder = new StringBuilder();:初始化索引、方法名、方法参数名和参数构建器的字符串构建器。
  • 在循环中,拼接方法名和方法参数名,将属性名首字母大写后添加到方法名中,同时构建参数名形式为 “类型 属性名”,并将属性名添加到参数构建器中。如果不是最后一个字段,则在方法名和方法参数名中添加 “And” 进行连接,在参数构建器中添加逗号分隔。
  1. 实现查询方法:
  • 添加注释:BuildComment.createFieldComment(bw,“根据”+methodName+“查询”);。
  • 添加@Override注解:bw.write(“\t@Override”);。
  • 定义方法签名:bw.write(“\tpublic “+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+” selectBy”+ methodName+“(”+methodParamName+“) {”);。
  • 调用 Mapper 中的方法实现查询:bw.write(“\t\treturn this.”+mapperBeanName+“.selectBy”+methodName+“(”+paramsBuilder+“);”);,通过 Mapper 对象调用对应的查询方法,并返回结果。
  1. 实现更新方法:
  • 添加注释:BuildComment.createFieldComment(bw,“根据”+methodName+“更新”);。
    添加@Override注解:bw.write(“\t@Override”);。
  • 定义方法签名:bw.write(“\tpublic Integer updateBy”+ methodName+“(”+tableInfo.getBeanName()+Constants.SUFFIX_BEAN_PO+" bean,“+methodParamName+”) {");。
  • 调用 Mapper 中的方法实现更新:bw.write(“\t\treturn this.”+mapperBeanName+“.updateBy”+methodName+“(bean,”+paramsBuilder+“);”);,通过 Mapper 对象调用对应的更新方法,并返回结果。
  1. 实现删除方法:
  • 添加注释:BuildComment.createFieldComment(bw,“根据”+methodName+“删除”);。
  • 添加@Override注解:bw.write(“\t@Override”);。
  • 定义方法签名:bw.write(“\tpublic Integer deleteBy”+ methodName+“(”+methodParamName+“) {”);。
  • 调用 Mapper 中的方法实现删除:bw.write(“\t\treturn this.”+mapperBeanName+“.deleteBy”+methodName+“(”+paramsBuilder+“);”);,通过 Mapper 对象调用对应的删除方法,并返回结果。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!
在这里插入图片描述

标签:代码生成,Java,service,tableInfo,newLine,write,bw,methodName,Constants
From: https://blog.csdn.net/2203_75372944/article/details/142997241

相关文章

  • java常见异常
    NullPointerException(NPE)发生原因:尝试使用一个尚未初始化(即为null)的对象实例。解决方案:确保所有变量在使用前已被正确初始化。ArrayIndexOutOfBoundsException发生原因:访问数组时索引超出数组的范围。解决方案:确保索引值在访问数组之前已经过验证,并且处于有效范围内。......
  • 分享一下java中遇到过的十个异常报错情况
    1.使用lambda表达式时候的闭包问题闭包:在lambda表达式中使用外部变量的时候,会给该变量自动加上final可以看到forEach中的a++处出现报错,因为a定义在了lambda表达式之外,即不在o->{}的大括号中。解决办法:把该变量变成引用数据类型2.算术异常(ArithmeticException)解决办法:......
  • 【Java SE 】继承 与 多态 详解
     ......
  • 初学javaweb遇到的问题
    1.环境配置问题我得知要创建一个javaweb项目,需要下载安装idea专业版,于是我搜索网络资源,找到了使用专业版的办法。并根据教程配置tomcat,jdk,meaven等项目基础环境配置。2.项目结构理解我在使用Maven创建项目时,对pom.xml文件的配置感到困惑。特别是依赖管理部分,很多依赖的版......
  • 【Java SE 】封装 的特性 和 static 详解
     ......
  • 基于Java的畅销书图书管理系统的设计与实现(源码+LW+讲解和调试)
    目录:目录:博主介绍: 完整视频演示:你应该选择我技术栈介绍:需求分析:系统各功能实现一览:1.注册2.登录部分代码参考: 项目功能分析: 项目论文:源码获取:博主介绍: ......
  • java项目篇-用户脱敏展示
    用户敏感信息脱敏展示定义手机号和证件号的Jackson自定义序列化器,并在对应需要脱敏的敏感字段上指定自定义序列化器。在进行指定的需要脱敏的字段(身份证号,手机号,银行卡号等)序列化的时候,该字段自动变成脱敏json对象。1)身份证号序列化器importcn.hutool.core.util.Des......
  • 一,Java 环境配置与基础语法
    Java环境配置与基础语法在开始Java编程之前,正确配置Java环境和理解基础语法是至关重要的。这不仅帮助我们编写有效的Java程序,还能确保程序的顺利运行。Java环境配置Java环境配置主要包括JDK(JavaDevelopmentKit)和JRE(JavaRuntimeEnvironment)的安装和环境变量的配......
  • 测开必备-java基础-for、while和do-while循环使用场景
    在编程中,选择使用for循环、while循环还是do-while循环,主要取决于你的具体需求和代码逻辑。下面我们来详细讨论一下这三种循环的使用场景。for循环的使用场景for循环通常用于已知循环次数的场景,特别是当你需要遍历数组、集合或执行固定次数的迭代时。for循环的语法结构清晰地定义......
  • 黑马JavaWeb-day02
    什么是JavaScript?JavaScript:简称Js,是一门跨平台、面向对象的脚本语言。是用来控制网页行为的,它能使网页可交互JavaScript和Java是完全不同的语言,无论是概念还是设计。但是基础语法类似。JavaScriptJavaScript引入方式内部脚本:将JS代码定义在HTML页面中JavaScript代码必......