写博客是为了记录和分享自己的学习,所分享内容是网上的资源,由于非原创项目,主要分享学习思路,只展示贴图部分代码(本人不分享本项目源码,支持项目付费)
//创建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 类的包声明以及导入必要的类。
//生成类名
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类文件中继续添加内容,包括生成类名、注释以及定义各种服务方法的接口。这些方法涵盖了根据条件查询列表、查询数量、分页查询、新增、批量新增、批量新增或修改,以及根据特定字段组合进行查询、更新和删除等功能。
//创建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 类的包声明以及导入必要的类和包。
- 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;”);:导入分页查询对象类
。
//生成类名
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类文件中继续添加内容,包括生成类名、添加注解、定义成员变量以及实现服务接口中的各个方法
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();
遍历表的键索引映射,针对每个键对应的字段组合,在服务实现类中实现了根据这些字段组合进行查询、更新和删除的方法。
如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务