Java根据表的字段自动生成实体再也不要一个个的粘贴建实体了

controller类代码:

@Controller
@RequestMapping("/code")
public class CodeGenerateController extends BaseController {

   @RequestMapping("/generate")
    public String generate(@RequestParam("tableName") String tableName) {
        System.out.println(tableName);
        List<Map<String,String>> map = codeGenerateService.selectTable(tableName);
        if(map==null){
           return "没有这张表";
        }else{
            return "";
        }
    }
}

service类的代码:
@Service
public class CodeGenerateService {

    @Resource
    private CodeGenerateMapper codeGenerateMapper;

   public List<Map<String,String>> selectTable(String tableName){
       String table = cast(tableName);
       List<Map<String,String>>  o = codeGenerateMapper.selectTable(tableName);
       try {
           //调用write方法,将字符串写入到流中。
           FileWriter fw = new FileWriter("d:/generate/"+table+".java");
           fw.write("@TableName(\"" +tableName+ "\")");
           fw.write("\r\n");
           fw.write("@Data");
           fw.write("\r\n");
           fw.write("public class "+table+"{");
           fw.write("\r\n");
           for (Map<String, String> map : o) {
               fw.write( "/**"+"\r\n"+
                "*"+map.get("comment")+"\r\n"+
                "*/"+"\r\n");
               fw.write("@TableField(\""+map.get("columns")+"\")");
               fw.write("\r\n");
               if(map.get("type").contains("varchar")){
                   String columns = cast(map.get("columns"));
                   fw.write("private String "+columns+";");
                   fw.write("\r\n");
               }if(map.get("type").contains("int")){
                   String columns = cast(map.get("columns"));
                   fw.write("private Integer "+columns+";");
                   fw.write("\r\n");
               }if(map.get("type").contains("datetime")){
                   String columns = cast(map.get("columns"));
                   fw.write("private Date "+columns+";");
                   fw.write("\r\n");
               }
               System.out.println(map);

           }
           fw.write("}");
           //刷新流对象中的缓冲中的数据,将数据刷到目的地中。
           fw.flush();
           fw.close();
       } catch (IOException e) {
           e.printStackTrace();
       }
       return o;
   }

   public String cast(String tableName){
       char[] chars = tableName.toCharArray();
       for(int a=0;a<chars.length;a++){
           if(chars[a] =='_'){
               char c = Character.toUpperCase(chars[a + 1]);
               chars[a+1]=c;
           }
       }
       String table="";
       for(int a=0;a<chars.length;a++){
           if(chars[a] =='_'){

           }else{
               table=table+ chars[a];
           }
       }
       return table;
   }
}

mapper的代码:
public interface CodeGenerateMapper {

   Map<String,Object> exsitTable(@Param("tableName") String tableName);

   List<Map<String,String>> selectTable(@Param("tableName") String tableName);
}


mapper对应的xml

    <select id="selectTable" resultType="java.util.Map" parameterType="java.lang.String">
        select COLUMN_COMMENT as comment,COLUMN_NAME as columns,COLUMN_TYPE AS type from information_schema.COLUMNS
          where table_name = #{tableName} and table_schema = '此处是数据库名字';
    </select>

FileWriter fw = new FileWriter(“d:/generate/”+table+".java");
此处是指定生成的实体类的位置,可以自己调整,但是路径必须存在。

将代码拷进项目中后运行起来通过调接口的方式传入表名即可自动生成实体类,尤其是在字段多的时候很方便,请大家多多指教

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值