spring boot自动生成代码的方法(以表为准)

一共是四层,为dao+service+mapper+model,控制器因为不需要逐表生成,因而省略。

package create;

import org.apache.commons.lang.StringUtils;

import java.io.*;
import java.sql.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Create
{
    static final String tablename = "edu_goods";
    static final String packagePath = "/src/main/java/com/test";
    static final String pakageName = "test";
    private static String PATH;
    private static Map dbInfo;
    private static String PK;
    private Map propertylist;
    private Map columnComments;

    /**
     * 初始化配置信息
     */
    static
    {
        try {
            //读取根路径
            File file = new File("");
            PATH = file.getAbsolutePath();

//            //简历项目文件夹
//            File f = new File(PATH + "/src/main/java/com/test");
//            if (!f.exists()) f.mkdir();
//            File f1 = new File(PATH + "/src/main/java/com/test/dao");
//            if (!f1.exists()) f1.mkdir();
//            File f2 = new File(PATH + "/src/main/java/com/test/service");
//            if (!f2.exists()) f2.mkdir();
//            File f3 = new File(PATH + "/src/main/java/com/test/model");
//            if (!f3.exists()) f3.mkdir();
//            File f4 = new File(PATH + "/src/main/java/com/test/controller");
//            if (!f4.exists()) f4.mkdir();

            //设置配置信息
            InputStream inputStream = new BufferedInputStream(new FileInputStream(PATH + "/src/main/resources/application.properties"));
            Properties properties = new Properties();
            properties.load(inputStream);
            Map db = new HashMap();
            db.put("url",properties.getProperty("spring.datasource.url"));
            db.put("username",properties.getProperty("spring.datasource.username"));
            db.put("password",properties.getProperty("spring.datasource.password"));
            db.put("driverName",properties.getProperty("spring.datasource.driver-class-name"));
            dbInfo = db;
            inputStream.close();

            //设置jdbc反射对象
            Class.forName(dbInfo.get("driverName").toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    };

    public static void main(String[] args) throws IOException
    {
        Create create = new Create();
        List list = create.get_tablename_list();
        for (int i = 0;i < list.size();i++) {
            //生成dao
            create.createDao(list.get(i).toString());

            //生成service
            create.createService(list.get(i).toString());

            //生成xml
            create.createMapperXml(list.get(i).toString());

            //生成model
            create.createModel(list.get(i).toString());
        }
    }

    /**
     * 生成dao
     */
    public void createDao(String tablename)
    {
        tablename = underlineToCamel(tablename);
        String content = this.readToString(PATH + "/src/main/resources/example/exampleMapper.temp");

        //替换包名
        content = content.replaceAll("examplepackage",pakageName);

        //替换实例名称
        content = content.replaceAll("example",tablename);

        //生成文件
        String mapperName = PATH + packagePath + "/dao/" + tablename + "Mapper.java";
        this.writeContent(mapperName,content);

        System.out.println("文件" + mapperName + "创建成功");
    }

    /**
     * 生成service
     */
    public void createService(String tablename)
    {
        tablename = underlineToCamel(tablename);
        String content = this.readToString(PATH + "/src/main/resources/example/exampleService.temp");

        //替换包名
        content = content.replaceAll("examplepackage",pakageName);

        //替换实例名称
        content = content.replaceAll("example",tablename);

        //生成文件
        String serviceName = PATH + packagePath + "/service/" + tablename + "Service.java";
        this.writeContent(serviceName,content);
        System.out.println("文件" + serviceName + "创建成功");
    }

    /**
     * 生成sql查询文件
     */
    public void createMapperXml(String tablename)
    {
        String tableName = underlineToCamel(tablename);
        String content = this.readToString(PATH + "/src/main/resources/example/exampleMapperXML.temp");

        //替换包名
        content = content.replaceAll("examplepackage",pakageName);

        //替换实例名称
        content = content.replaceAll("example",tableName);

        //替换表名和主键
        content = content.replaceAll("tablename",tablename)
                         .replaceAll("PK",this.getPK(tablename));

        //替换字段
        try {
            String fieldlist = "";
            Map list = this.getTableInfo(tablename);
            Iterator iterator = list.keySet().iterator();
            int count = 0;
            while (iterator.hasNext()) {
                if(count > 0) fieldlist += ",";
                fieldlist += iterator.next();
                count ++;
            }
            content = content.replaceAll("(field_list|value_list)",fieldlist);
        } catch (Exception e) {
            e.printStackTrace();
        }

        //生成文件
        String xmlName = PATH  + "/src/main/resources/mapper/" + tableName + "Mapper.xml";
        this.writeContent(xmlName,content);
        System.out.println("文件" + xmlName + "创建成功");
    }

    /**
     * 生成model
     */
    public void createModel(String tablename)
    {
        String tableName = underlineToCamel(tablename);
        String content = this.readToString(PATH + "/src/main/resources/example/exampleModel.temp");

        //替换包名
        content = content.replaceAll("examplepackage",pakageName);

        //替换实例名称
        content = content.replaceAll("example",tableName);

        //替换表名和主键
        content = content.replaceAll("tablename",tablename)
                         .replaceAll("PK",PK);

        //生成属性
        content = content.replaceAll("property",this.createModelProperty(tablename));

        //生成方法
        content = content.replaceAll("method",this.createModelMethod(tablename));

        //生成打印方法
        content = content.replaceAll("toString_",this.createModeltoString(tablename));

        //生成文件
        String modelName = PATH + packagePath + "/model/" + tableName + "Model.java";
        this.writeContent(modelName,content);
        System.out.println("文件" + modelName + "创建成功");
    }

    /**
     * 生成model属性
     */
    private String createModelProperty(String tablename)
    {
        String content = "";
        try {
            Map propertylist = this.getTableInfo(tablename);
            this.propertylist = propertylist;
            Map columnComments = this.getColumnComments(tablename);
            this.columnComments = columnComments;
            Iterator iterator = propertylist.keySet().iterator();
            int count = 0;
            while (iterator.hasNext()) {
                String next = iterator.next();
                if(count > 0) content += "\t";
                content += "/** @var " + propertylist.get(next) + " " + columnComments.get(next) + " */\r";
                content += "\t@TableField(" + "\""+ next + "\"" + ")\r";
                content += "\tprivate " + this.getFieldType(propertylist.get(next)) + " " + next + ";\n";
                count ++;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return content;
    }

    /**
     * 生成model方法
     */
    private String createModelMethod(String tablename)
    {
        String content = "";
        try {
            Iterator iterator = propertylist.keySet().iterator();
            int count = 0;
            while (iterator.hasNext()) {
                String next = iterator.next();
                if(count > 0) content += "\t";
                //生成set方法
                content += "/** @var " + propertylist.get(next) + " " + columnComments.get(next) + " */\r";
                String returnname = underlineToCamel(tablename) + "Model";
                String setname = "set" + underlineToCamel(next)
                        + "("
                        + this.getFieldType(propertylist.get(next))
                        + " "
                        + next
                        + ")";
                content += "\tpublic " + returnname + " " + setname + "\r";
                content += "\t{\r";
                content += "\t\tthis." + next + " = " + next + ";\r";
                content += "\t\treturn this;\r";
                content += "\t}\r";

                //生成get方法
                content += "\t/** @var " + propertylist.get(next) + " " + columnComments.get(next) + " */\r";
                String getname = "get" + underlineToCamel(next) + "()";
                content += "\tpublic " + this.getFieldType(propertylist.get(next)) + " " + getname + "\r";
                content += "\t{\r";
                content += "\t\treturn this." + next + ";\r";
                content += "\t}\n";
                count ++;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return content;
    }

    /**
     * 生成model打印方法
     */
    public String createModeltoString(String tablename)
    {
        tablename = underlineToCamel(tablename);
        String content = "\"" +tablename+":\" + \n";
        try {
            List mapKeyList = new ArrayList(propertylist.keySet());
            for (int i = 0;i < mapKeyList.size();i++) {
                content += "\t\t";
                if (i > 0) {
                    content +=  "\"," + mapKeyList.get(i) + " = \" + " + mapKeyList.get(i);
                } else {
                    content +=  "\"" + mapKeyList.get(i) + " = \" + " + mapKeyList.get(i);
                }

                if (i < mapKeyList.size()-1) content += " + \r";
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return content;
    }

    /**
     * 读取文件内容
     * @param fileName
     * @return
     */
    public String readToString(String fileName) {
        String encoding = "UTF-8";
        File file = new File(fileName);
        Long filelength = file.length();
        byte[] filecontent = new byte[filelength.intValue()];
        try {
            FileInputStream in = new FileInputStream(file);
            in.read(filecontent);
            in.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            return new String(filecontent, encoding);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 生成并写入文件内容
     */
    public void writeContent(String writePath,String content)
    {
        System.out.println(writePath);
        File myFilePath = new File(writePath);
        try {
            if (!myFilePath.exists()) myFilePath.createNewFile();
            FileWriter fileWriter = new FileWriter(myFilePath);
            PrintWriter printWriter = new PrintWriter(fileWriter);
            printWriter.println(content);
            printWriter.close();

            //System.out.println(writePath + "创建成功");
        } catch (Exception e) {
            System.out.println(writePath + "创建失败");
            e.printStackTrace();
        }
    }

    /**
     * 获取表名
     */
    private  List get_tablename_list()
    {
        List tablelist = new ArrayList();
        if (tablename != ""){
            tablelist.add(tablename);
        } else {
            try {
                Connection conn = this.getConnection();
                DatabaseMetaData databaseMetaData = conn.getMetaData();
                //PreparedStatement pstmt = conn.prepareStatement(sql);
                ResultSet rs = databaseMetaData.getTables(null, null, null,new String[] { "TABLE" });
                while (rs.next()) {
                    tablelist.add(rs.getString(3));
                }
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return tablelist;
    }

    /**
     * 获取表字段和字段类型
     */
    public Map getTableInfo(String tablename) throws SQLException
    {
        String sql = "select COLUMN_NAME,DATA_TYPE from information_schema.COLUMNS where table_name = \"{tablename}\"";
        sql = sql.replace("{tablename}",tablename);
        Map info = new HashMap();
        Connection conn = this.getConnection();
        PreparedStatement pstmt = conn.prepareStatement(sql);
        ResultSet rs = pstmt.executeQuery();
        while (rs.next()) {
            info.put(rs.getString("COLUMN_NAME"),rs.getString("DATA_TYPE"));
        }
        this.closeAll(conn,pstmt,rs);
        return info;
    }

    /**
     * 获取表中字段的所有注释
     * @param tableName
     * @return
     */
    public Map getColumnComments(String tableName)
    {
        Map columnComments = new HashMap();
        //与数据库的连接
        String tableSql = "show full columns from " + tableName;
        try {
            Connection conn = this.getConnection();
            PreparedStatement pstmt = conn.prepareStatement(tableSql);
            ResultSet rs = pstmt.executeQuery();
            while (rs.next()) {
                columnComments.put(rs.getString("Field"),rs.getString("Comment"));
            }
            this.closeAll(conn,pstmt,rs);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return columnComments;
    }

    /**
     * 获取某个数据表的主键
     */
    public String getPK(String tablename)
    {
        String key = "";
        try {
            Connection connection = this.getConnection();
            String catalog = connection.getCatalog();//数据库名
            DatabaseMetaData dbmd = connection.getMetaData();
            ResultSet p_key = dbmd.getPrimaryKeys(catalog,null,tablename);
            while (p_key.next()) {
                key = p_key.getString("COLUMN_NAME");
            }
            connection.close();
            p_key.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        PK = key;
        return key;
    }

    /**
     * 获取model属性类型
     */
    private String getFieldType(String type)
    {
        String newType = "String";
        switch (type) {
            case "tinyint":newType = "int";break;
            case "int":newType = "int";break;
            case "decimal":newType = "double";break;
        }
        return newType;
    }

    /**
     * 下划线格式字符串转换为驼峰格式字符串2
     *
     * @param param
     * @return
     */
    public static String underlineToCamel(String param) {
        if (param == null || "".equals(param.trim())) {
            return "";
        }
        StringBuilder sb = new StringBuilder(Create.toUpperCaseFirstOne(param));
        Matcher mc = Pattern.compile("_").matcher(param);
        int i = 0;
        while (mc.find()) {
            int position = mc.end() - (i++);
            sb.replace(position - 1, position + 1, sb.substring(position, position + 1).toUpperCase());
        }
        return sb.toString();
    }

    //首字母转大写
    public static String toUpperCaseFirstOne(String s){
        if(Character.isUpperCase(s.charAt(0)))
            return s;
        else
            return (new StringBuilder()).append(Character.toUpperCase(s.charAt(0))).append(s.substring(1)).toString();
    }

    /**
     * 判断字符串是否为空
     */
    public static boolean checkString(String str)
    {
        if (str != null && !"".equals(str.trim())) {
            return true;
        }
        return false;
    }

    /**
     * 获取数据库连接
     * @return
     */
    private Connection getConnection()
    {
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(dbInfo.get("url").toString(),
                                                     dbInfo.get("username").toString(),
                                                     dbInfo.get("password").toString()
                                                     );
        } catch (SQLException se){
            se.printStackTrace();
        }
        return connection;
    }

    /**
     * 关闭mysql数据库连接
     */
    private void closeAll(Connection con, Statement stmt, ResultSet rs)
    {
        try {
            if (rs != null){
                rs.close();
            }
            if (stmt != null){
                stmt.close();
            }
            if (rs != null){
                rs.close();
            }
        } catch (SQLException ce) {
            ce.printStackTrace();
        }
    }

}

exampleMapper模板:

package com.examplepackage.dao;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import com.examplepackage.model.exampleModel;

import java.util.List;
import java.util.Map;

@Repository
@Mapper
public interface exampleMapper extends BaseMapper
{
    List getList();//获取所有信息

    List getListByMap(@Param("params") Map map);//通过map字典查询

    List getListByArray(@Param("idlist") int[] idlist);//通过主键组合数组查询

    Object getField(@Param("field") String field,@Param("params") Map map);//查询单个字段

    Page getListPage(@Param("params") Map map);//分页查询

    exampleModel detail(@Param("id") int id);//通过主键获取一行数据

    exampleModel detailByMap(@Param("params") Map map);//通过map字典查询一行数据

    int addexampleModel(exampleModel example);//增加数据返回生成数据的主键

    boolean updateexampleModel(@Param("data") Map map,@Param("where") Map where);//修改数据

    boolean deleteexampleModel(@Param("id") int id);//通过主键删除数据

    boolean deleteexampleModelByArray(@Param("idlist") int[] idlist);//通过主键删除多行数据

    boolean deleteexampleModelByMap(@Param("params") Map map);//通过map字典删除数据
}

exampleMapperXML模板





    

    

    

    

    

    

    

    
        insert into tablename (field_list) values ( value_list )
    

    
        update tablename set
        
            ${key} = #{data[${key}]}
        
        where
        
            ${key} = #{where[${key}]}
        
    

    
        delete from tablename where PK = ${id}
    

    
        delete from tablename where PK in
        
            #{item}
        
    

    
        delete from tablename where
        
            ${key} = #{params[${key}]}
        
    


exampleService模板

package com.examplepackage.service;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.examplepackage.dao.exampleMapper;
import com.examplepackage.model.exampleModel;

import java.util.List;
import java.util.Map;

@Service
public class exampleService
{
    @Autowired
    private exampleMapper example;

    /**
     * 查询所有数据
     * @return
     */
    public List getList()
    {
       return example.getList();
    }

    /**
     * 通过字典查询所有数据
     * @param where
     * @return
     */
    public List getListByMap(Map where)
    {
        return example.getListByMap(where);
    }

    /**
     * 组合主键数组查询
     * @param idlist
     * @return
     */
    public List getListByArray(int[] idlist)
    {
        return example.getListByArray(idlist);
    }

    /**
     * 查询单个字段
     * @param field
     * @param where
     * @return
     */
    public Object getField(String field,Map where)
    {
        return example.getField(field,where);
    }

    /**
     * 分页查询
     * @param where
     * @param pageNo
     * @param pageSize
     * @return
     */
    public Page getListPage(Map where,int pageNo, int pageSize)
    {
        PageHelper.startPage(pageNo,pageSize);
        return example.getListPage(where);
    }

    /**
     * 主键查询获取一行数据
     * @param id
     * @return
     */
    public exampleModel detail(int id)
    {
        return example.detail(id);
    }

    /**
     * map字典查询一行数据
     * @param where
     * @return
     */
    public exampleModel detailByMap(Map where)
    {
        return example.detailByMap(where);
    }

    /**
     * 添加一行数据
     * @param model
     * @return
     */
    public int addexampleModel(exampleModel model)
    {
        return example.addexampleModel(model);
    }

    /**
     * 修改数据
     * @param data
     * @param where
     * @return
     */
    public boolean updateexampleModel(Map data,Map where)
    {
        return example.updateexampleModel(data,where);
    }

    /**
     * 通过主键删除多行数据
     * @param idlist
     * @return
     */
    public boolean deleteexampleModelByArray(int[] idlist)
    {
        return example.deleteexampleModelByArray(idlist);
    }

    /**
     * 通过主键删除一行数据
     * @param id
     * @return
     */
    public boolean deleteexampleModel(int id)
    {
        return example.deleteexampleModel(id);
    }

    /**
     * 通过map字典删除数据
     * @param map
     * @return
     */
    public boolean deleteexampleModelByMap(Map map)
    {
        return example.deleteexampleModelByMap(map);
    }
}

exampleModel模板

package com.examplepackage.model;

import java.io.Serializable;

import com.baomidou.mybatisplus.enums.IdType;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableName;

@TableName("tablename")
public class exampleModel extends Model
{
    private static final long serialVersionUID = 1L;

    property

    method

    @Override
    protected Serializable pkVal()
    {
        return this.PK;
    }

    @Override
    public String toString()
    {
        return toString_;
    }
}

生成后的一般的增删改查方法都有了,可以加速开发速度

你可能感兴趣的:(spring boot自动生成代码的方法(以表为准))