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");
此处是指定生成的实体类的位置,可以自己调整,但是路径必须存在。
将代码拷进项目中后运行起来通过调接口的方式传入表名即可自动生成实体类,尤其是在字段多的时候很方便,请大家多多指教