1、config.properties

  1. ## 数据库连接参数
  2. jdbc.driverClass = com.mysql.jdbc.Driver
  3. jdbc.url = jdbc:mysql://localhost:3306/wshop
  4. jdbc.username = root
  5. jdbc.password = 123456
  6.  
  7. ##项目路径
  8. projectPath = D:/generator/
  9.  
  10. ##是否生成Bean实体类
  11. beanFlag=true
  12.  
  13. ## 生成Bean实体类的包名
  14. beanPackage=com.hwf.bean
  15.  
  16. ##是否生成Dao接口
  17. daoFlag=true
  18.  
  19. ##生成Dao接口的包名
  20. daoPackage=com.hwf.dao
  21.  
  22. ##是否生成Mapper.xml
  23. mapperXmlFlag=true
  24.  
  25. ##生成Mapper.xml的包名
  26. mapperXmlPackage=com.hwf.daoImpl
  27.  
  28. ##是否生成Service接口
  29. serviceFlag=true
  30.  
  31. ##生成Service接口的包名
  32. servicePackage=com.hwf.service
  33.  
  34. ##是否生成ServiceImpl实现类
  35. serviceImplFlag=true
  36.  
  37. ##生成ServiceImpl实现类的包名
  38. serviceImplPackage=com.hwf.serviceImpl

2、com.hwf.auto.bean包

  1. package com.hwf.auto.bean;
  2.  
  3. /**
  4. * 数据表的列结构
  5. * @author
  6. *
  7. */
  8. public class ColumnStruct {
  9.  
  10. private String columnName;//字段名称
  11. private String dataType;//字段类型
  12.  
  13. public String getColumnName() {
  14. return columnName;
  15. }
  16.  
  17. public void setColumnName(String columnName) {
  18. this.columnName = columnName;
  19. }
  20.  
  21. public String getDataType() {
  22. return dataType;
  23. }
  24.  
  25. public void setDataType(String dataType) {
  26. this.dataType = dataType;
  27. }
  28.  
  29. public ColumnStruct(String columnName, String dataType) {
  30. super();
  31. this.columnName = columnName;
  32. this.dataType = dataType;
  33. }
  34.  
  35. public ColumnStruct() {
  36. super();
  37. }
  38. @Override
  39. public String toString() {
  40. return "ColumnStruct [columnName=" + columnName + ", dataType="
  41. + dataType + "]";
  42. }
  43. }
  1. package com.hwf.auto.bean;
  2.  
  3. import java.util.List;
  4.  
  5. /**
  6. * 数据表的表结构
  7. * @author
  8. *
  9. */
  10. public class TableStruct {
  11.  
  12. private String tableName;//表名
  13. private List Columns;//所有的列
  14. public String getTableName() {
  15. return tableName;
  16. }
  17. public void setTableName(String tableName) {
  18. this.tableName = tableName;
  19. }
  20. public List getColumns() {
  21. return Columns;
  22. }
  23. public void setColumns(List columns) {
  24. Columns = columns;
  25. }
  26. public TableStruct(String tableName, List columns) {
  27. super();
  28. this.tableName = tableName;
  29. Columns = columns;
  30. }
  31. public TableStruct() {
  32. super();
  33. }
  34. @Override
  35. public String toString() {
  36. return "TableStruct [tableName=" + tableName + ", Columns=" + Columns
  37. + "]";
  38. }
  39. }

3、com.hwf.auto.dao包

  1. package com.hwf.auto.dao;
  2.  
  3. /**
  4. * 生成Bean实体类的dao层接口
  5. * @author
  6. *
  7. */
  8. public interface BeanAutoDao {
  9. //通过表名、字段名称、字段类型创建Bean实体
  10. public boolean createBean();
  11. }
  1. package com.hwf.auto.dao;
  2.  
  3. /**
  4. * 生成Dao接口的dao层接口
  5. * @author
  6. *
  7. */
  8. public interface DaoAutoDao {
  9. //通过表名、字段名称、字段类型创建Dao接口
  10. public boolean createDao();
  11. }
  1. package com.hwf.auto.dao;
  2.  
  3. import java.util.List;
  4.  
  5. /**
  6. * 获取数据表及其结构的dao层接口
  7. * @author
  8. *
  9. */
  10. public interface GetTablesDao {
  11.  
  12. //获得数据库的所有表名
  13. public List getTablesName();
  14.  
  15. //获得数据表中的字段名称、字段类型
  16. public List getTablesStruct();
  17. }
  1. package com.hwf.auto.dao;
  2.  
  3. /**
  4. * 生成Mapper.xml的dao层接口
  5. * @author
  6. *
  7. */
  8. public interface MapperXmlAutoDao {
  9.  
  10. //通过表名、字段名称、字段类型创建Mapper.xml
  11. public boolean createMapperXml();
  12. }
  1. package com.hwf.auto.dao;
  2.  
  3. /**
  4. * 生成Service接口的dao层接口
  5. * @author
  6. *
  7. */
  8. public interface ServiceAutoDao {
  9. //通过表名、字段名称、字段类型创建Service接口
  10. public boolean createService();
  11. }
  1. package com.hwf.auto.dao;
  2.  
  3. /**
  4. * 生成ServiceImpl实现类的dao层接口
  5. * @author
  6. *
  7. */
  8. public interface ServiceImplAutoDao {
  9.  
  10. //通过表名、字段名称、字段类型创建ServiceImpl实现类
  11. public boolean createServiceImpl();
  12. }

4、com.hwf.auto.daoImpl包

  1. package com.hwf.auto.daoImpl;
  2.  
  3. import com.hwf.auto.bean.ColumnStruct;
  4. import com.hwf.auto.bean.TableStruct;
  5. import com.hwf.auto.dao.BeanAutoDao;
  6. import com.hwf.auto.dao.GetTablesDao;
  7. import com.hwf.auto.util.ConfigUtil;
  8. import com.hwf.auto.util.DataTypeUtil;
  9. import com.hwf.auto.util.FileUtil;
  10. import com.hwf.auto.util.NameUtil;
  11.  
  12. import java.util.List;
  13.  
  14. /**
  15. * 生成Bean实体类的dao层实现类
  16. * @author
  17. *
  18. */
  19. public class BeanAutoDaoImpl implements BeanAutoDao {
  20.  
  21. //从GetTablesDaoImpl中获得装有所有表结构的List
  22. GetTablesDao getTables = new GetTablesDaoImpl();
  23. List<TableStruct> list = getTables.getTablesStruct();
  24.  
  25. //通过表名、字段名称、字段类型创建Bean实体
  26. @Override
  27. public boolean createBean() {
  28. //获得配置文件的参数
  29. //项目路径
  30. String projectPath = ConfigUtil.projectPath;
  31. //是否生成实体类
  32. String beanFalg=ConfigUtil.beanFlag;
  33. //Bean实体类的包名
  34. String beanPackage=ConfigUtil.beanPackage;
  35. //判断是否生成实体类
  36. if("true".equals(beanFalg) ){
  37. //将包名com.xxx.xxx形式,替换成com/xxx/xxx形成
  38. String beanPath=beanPackage.replace(".", "/");
  39. //Bean实体类的路径
  40. String path =projectPath+"/src/"+beanPath;
  41. //遍历装有所有表结构的List
  42. for (int i = 0; i < list.size(); i++) {
  43. //文件名
  44. String fileName=NameUtil.fileName(list.get(i).getTableName())+"Bean";
  45. //获得每个表的所有列结构
  46. List<ColumnStruct> columns =list.get(i).getColumns();
  47. //(实体类)文件内容
  48. String packageCon ="package "+beanPackage+";\n\n";
  49. StringBuffer importCon=new StringBuffer();
  50. String className ="public class "+fileName+"{\n\n";
  51. StringBuffer classCon =new StringBuffer();
  52. StringBuffer gettersCon = new StringBuffer();
  53. StringBuffer settersCon = new StringBuffer();
  54. StringBuffer noneConstructor =new StringBuffer();
  55. StringBuffer constructor =new StringBuffer();
  56. String constructorParam="";
  57. StringBuffer constructorCon=new StringBuffer();
  58. //遍历List,将字段名称和字段类型写进文件
  59. for (int j = 0; j < columns.size(); j++) {
  60. //变量名(属性名)
  61. String columnName =NameUtil.columnName(columns.get(j).getColumnName());
  62. //获得数据类型
  63. String type = columns.get(j).getDataType();
  64. //将mysql数据类型转换为java数据类型
  65. String dateType =DataTypeUtil.getType(type);
  66. //有date类型的数据需导包
  67. if("Date".equals(dateType)){
  68. importCon.append("import java.util.Date;\n\n");
  69. }
  70. //有Timestamp类型的数据需导包
  71. if("Timestamp".equals(dateType)){
  72. importCon.append("import java.sql.Timestamp;\n\n");
  73. }
  74.  
  75. //生成属性
  76. classCon.append("\t"+"private"+"\t"+dateType+"\t"+columnName+";\n");
  77. //get、set的方法名
  78. String getSetName=columnName.substring(0,1).toUpperCase()+columnName.substring(1);
  79. //生成get方法
  80. gettersCon.append("\t"+"public"+"\t"+dateType+"\t"+"get"+getSetName+"(){\n"+
  81. "\t\t"+"return"+"\t"+columnName+";\n"+
  82. "\t"+"}\n");
  83. //生成set方法
  84. settersCon.append("\t"+"public void"+"\t"+"set"+getSetName+"("+dateType+" "+columnName+"){\n"+
  85. "\t\t"+"this."+columnName+" = "+columnName+";\n"+
  86. "\t"+"}\n");
  87. //获得有参构造器参数
  88. if(constructorParam==null||"".equals(constructorParam)){
  89. constructorParam=dateType+" "+columnName;
  90. }else{
  91. constructorParam+=","+dateType+" "+columnName;
  92. }
  93. //获得有参构造器的内容
  94. constructorCon.append("\t\t"+"this."+columnName+" = "+columnName+";\n");
  95. }
  96. //生成无参构造器
  97. noneConstructor.append("\t"+"public"+"\t"+fileName+"(){\n"+
  98. "\t\t"+"super();\n"+
  99. "\t"+"}\n");
  100. //生成有参构造
  101. constructor.append("\t"+"public"+" "+fileName+"("+constructorParam+"){\n"+
  102. "\t\t"+"super();\n"+constructorCon+
  103. "\t"+"}\n");
  104. //拼接(实体类)文件内容
  105. StringBuffer content=new StringBuffer();
  106. content.append(packageCon);
  107. content.append(importCon.toString());
  108. content.append(className);
  109. content.append(classCon.toString());
  110. content.append(gettersCon.toString());
  111. content.append(settersCon.toString());
  112. content.append(noneConstructor.toString());
  113. content.append(constructor.toString());
  114. content.append("}");
  115. FileUtil.createFileAtPath(path+"/", fileName+".java", content.toString());
  116. }
  117. return true;
  118. }
  119. return false;
  120. }
  121.  
  122. }
  1. package com.hwf.auto.daoImpl;
  2.  
  3. import com.hwf.auto.bean.ColumnStruct;
  4. import com.hwf.auto.bean.TableStruct;
  5. import com.hwf.auto.dao.DaoAutoDao;
  6. import com.hwf.auto.dao.GetTablesDao;
  7. import com.hwf.auto.util.ConfigUtil;
  8. import com.hwf.auto.util.DataTypeUtil;
  9. import com.hwf.auto.util.FileUtil;
  10. import com.hwf.auto.util.NameUtil;
  11.  
  12. import java.util.List;
  13.  
  14. /**
  15. * 生成Dao接口的dao层实现类
  16. * @author
  17. *
  18. */
  19. public class DaoAutoDaoImpl implements DaoAutoDao {
  20.  
  21. //从GetTablesDaoImpl中获得装有所有表结构的List
  22. GetTablesDao getTables = new GetTablesDaoImpl();
  23. List<TableStruct> list = getTables.getTablesStruct();
  24.  
  25. //通过表名、字段名称、字段类型创建Dao接口
  26. @Override
  27. public boolean createDao() {
  28. //获得配置文件的参数
  29. //项目路径
  30. String projectPath = ConfigUtil.projectPath;
  31. //是否生成Dao
  32. String daoFalg=ConfigUtil.daoFlag;
  33. //Dao接口的包名
  34. String daoPackage=ConfigUtil.daoPackage;
  35. //Bean实体类的包名
  36. String beanPackage=ConfigUtil.beanPackage;
  37. if("true".equals(daoFalg) ){
  38. //将包名com.xxx.xxx形式,替换成com/xxx/xxx形成
  39. String daoPath=daoPackage.replace(".", "/");
  40. //Dao接口的路径
  41. String path =projectPath+"/src/"+daoPath;
  42. //遍历装有所有表结构的List
  43. for (int i = 0; i < list.size(); i++) {
  44. //文件名
  45. String fileName=NameUtil.fileName(list.get(i).getTableName())+"Dao";
  46. String beanName =NameUtil.fileName(list.get(i).getTableName())+"Bean";
  47. //获得每个表的所有列结构
  48. List<ColumnStruct> columns =list.get(i).getColumns();
  49. //变量名(属性名)
  50. String columnName =NameUtil.columnName(columns.get(0).getColumnName());
  51. //获得数据类型
  52. String type = columns.get(0).getDataType();
  53. //将mysql数据类型转换为java数据类型
  54. String dateType =DataTypeUtil.getType(type);
  55.  
  56. //(Dao接口)文件内容
  57. String packageCon ="package "+daoPackage+";\n\n";
  58. StringBuffer importCon=new StringBuffer();
  59. String className ="public interface "+fileName+"{\n\n";
  60. StringBuffer classCon = new StringBuffer();
  61.  
  62. //生成导包内容
  63. importCon.append("import"+"\t"+beanPackage+"."+beanName+";\n\n");
  64. //有date类型的数据需导包
  65. if("Date".equals(dateType)){
  66. importCon.append("import java.util.Date;\n\n");
  67. }
  68. //有Timestamp类型的数据需导包
  69. if("Timestamp".equals(dateType)){
  70. importCon.append("import java.sql.Timestamp;\n\n");
  71. }
  72. importCon.append("import java.util.List;\n\n");
  73.  
  74. //生成接口方法
  75. classCon.append("\t"+"public int insertRecord("+beanName+" record);//添加一条完整记录\n\n");
  76. classCon.append("\t"+"public int insertSelective("+beanName+" record);//添加指定列的数据\n\n");
  77. classCon.append("\t"+"public int deleteById("+dateType+" "+columnName+");//通过Id(主键)删除一条记录\n\n");
  78. classCon.append("\t"+"public int updateByIdSelective("+beanName+" record);//按Id(主键)修改指定列的值\n\n");
  79. classCon.append("\t"+"public int updateById("+beanName+" record);//按Id(主键)修改指定列的值\n\n");
  80. classCon.append("\t"+"public int countRecord();//计算表中的总记录数\n\n");
  81. classCon.append("\t"+"public int countSelective("+beanName+" record);//根据条件计算记录条数\n\n");
  82. classCon.append("\t"+"public int maxId();//获得表中的最大Id\n\n");
  83. classCon.append("\t"+"public"+"\t"+beanName+"\t"+"selectById("+dateType+"\t"+columnName+");//通过Id(主键)查询一条记录\n\n");
  84. classCon.append("\t"+"public List selectAll();//查询所有记录\n\n");
  85.  
  86. //拼接(Dao接口)文件内容
  87. StringBuffer content=new StringBuffer();
  88. content.append(packageCon);
  89. content.append(importCon.toString());
  90. content.append(className);
  91. content.append(classCon.toString());
  92. content.append("\n}");
  93. FileUtil.createFileAtPath(path+"/", fileName+".java", content.toString());
  94. }
  95. return true;
  96. }
  97. return false;
  98. }
  99. }
  1. package com.hwf.auto.daoImpl;
  2.  
  3. import java.sql.ResultSet;
  4. import java.sql.SQLException;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import com.hwf.auto.bean.ColumnStruct;
  8. import com.hwf.auto.bean.TableStruct;
  9. import com.hwf.auto.dao.GetTablesDao;
  10. import com.hwf.auto.util.DataSourceUtil;
  11.  
  12. /**
  13. * 获取数据表及其结构的dao层实现类
  14. * @author
  15. *
  16. */
  17. public class GetTablesDaoImpl extends DataSourceUtil implements GetTablesDao {
  18.  
  19. //获得数据库的所有表名
  20. @Override
  21. public List getTablesName() {
  22. List tables = new ArrayList();
  23. String sql="show tables";
  24. ResultSet rs=this.query(sql);
  25. try {
  26. while(rs.next()){
  27. //将获得的所有表名装进List
  28. tables.add(rs.getString(1));
  29. }
  30. } catch (SQLException e) {
  31. // TODO Auto-generated catch block
  32. e.printStackTrace();
  33. }
  34. return tables;
  35. }
  36.  
  37. //获得数据表中的字段名称、字段类型
  38. @Override
  39. public List getTablesStruct() {
  40. //获得装有所有表名的List
  41. List tables =this.getTablesName();
  42. String sqls =null;
  43. //装所有的表结构(表名+字段名称+字段类型)
  44. List tablesStruct = new ArrayList();
  45. for (int i = 0; i < tables.size(); i++) {
  46. sqls="show columns from "+tables.get(i).toString();
  47. ResultSet rs=this.query(sqls);
  48. //装所有的列结构(字段名称+字段类型)
  49. List list =new ArrayList();
  50. try {
  51. while(rs.next()){
  52. ColumnStruct cs = new ColumnStruct(rs.getString(1),rs.getString(2));
  53. //找到一列装进List
  54. list.add(cs);
  55. }
  56. } catch (SQLException e) {
  57. // TODO Auto-generated catch block
  58. e.printStackTrace();
  59. }
  60. //遍历完一张表,封装成对象
  61. TableStruct ts = new TableStruct(tables.get(i).toString(),list);
  62. //将对象(一张表)装进集合
  63. tablesStruct.add(ts);
  64. }
  65. return tablesStruct;
  66. }
  67. }
  1. package com.hwf.auto.daoImpl;
  2.  
  3. import java.util.List;
  4. import org.apache.commons.lang3.StringUtils;
  5. import com.hwf.auto.bean.ColumnStruct;
  6. import com.hwf.auto.bean.TableStruct;
  7. import com.hwf.auto.dao.GetTablesDao;
  8. import com.hwf.auto.dao.MapperXmlAutoDao;
  9. import com.hwf.auto.util.ConfigUtil;
  10. import com.hwf.auto.util.DataTypeUtil;
  11. import com.hwf.auto.util.FileUtil;
  12. import com.hwf.auto.util.JdbcTypeUtil;
  13. import com.hwf.auto.util.NameUtil;
  14. import com.hwf.auto.util.ParamTypeUtil;
  15.  
  16. /**
  17. * 生成Mapper.xml的dao层实现类
  18. * @author
  19. *
  20. */
  21. public class MapperXmlAutoDaoImpl implements MapperXmlAutoDao {
  22.  
  23. //从GetTablesDaoImpl中获得装有所有表结构的List
  24. GetTablesDao getTables = new GetTablesDaoImpl();
  25. List<TableStruct> list = getTables.getTablesStruct();
  26.  
  27. //通过表名、字段名称、字段类型创建Mapper.xml
  28. @Override
  29. public boolean createMapperXml() {
  30. //获得配置文件的参数
  31. //项目路径
  32. String projectPath = ConfigUtil.projectPath;
  33. //是否生成Mapper.xml
  34. String mapperXmlFalg=ConfigUtil.mapperXmlFlag;
  35. //Mapper.xml的包名
  36. String mapperXmlPackage=ConfigUtil.mapperXmlPackage;
  37. //Bean实体类的包名
  38. String beanPackage=ConfigUtil.beanPackage;
  39. //Dao接口的包名
  40. String daoPackage=ConfigUtil.daoPackage;
  41. if("true".equals(mapperXmlFalg) ){
  42. //将包名com.xxx.xxx形式,替换成com/xxx/xxx形成
  43. String mapperXmlPath=mapperXmlPackage.replace(".", "/");
  44. //Mapper.xml的路径
  45. String path =projectPath+"/src/"+mapperXmlPath;
  46. //遍历装有所有表结构的List
  47. for (int i = 0; i < list.size(); i++) {
  48. //表名
  49. String tableName =list.get(i).getTableName();
  50.  
  51. //文件名
  52. String fileName=NameUtil.fileName(tableName)+"Mapper";
  53. String beanName =NameUtil.fileName(tableName)+"Bean";
  54. String daoName =NameUtil.fileName(tableName)+"Dao";
  55.  
  56. //获得每个表的所有列结构
  57. List<ColumnStruct> columns =list.get(i).getColumns();
  58.  
  59. //主键名
  60. String beanIdName=NameUtil.columnName(columns.get(0).getColumnName());
  61. String IdName = columns.get(0).getColumnName();
  62. //主键类型
  63. String IdType = DataTypeUtil.getType(columns.get(0).getDataType());
  64. String IdParamType =ParamTypeUtil.getParamType(IdType);
  65. String IdJdbcType = JdbcTypeUtil.getJdbcType(IdType);
  66. if(IdJdbcType=="INT"||"INT".equals(IdJdbcType)){
  67. IdJdbcType="INTEGER";
  68. }
  69.  
  70. //(Mapper.xml)文件内容
  71. StringBuffer headCon = new StringBuffer();
  72. headCon.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
  73. headCon.append("<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n");
  74. headCon.append("<mapper namespace=\""+daoPackage+"."+daoName+"\">\n");
  75.  
  76. StringBuffer resultMapCon = new StringBuffer();
  77. resultMapCon.append("\t"+"<resultMap id=\"BaseResultMap\" type=\""+beanPackage+"."+beanName+"\">\n");
  78.  
  79. StringBuffer baseColCon = new StringBuffer();
  80. baseColCon.append("\t"+"<sql id=\"Base_Column_List\">\n");
  81.  
  82. StringBuffer insertRecordCon = new StringBuffer();
  83. insertRecordCon.append("\t"+"<insert id=\"insertRecord\" parameterType=\""+beanPackage+"."+beanName+"\">\n");
  84. insertRecordCon.append("\t\t"+"insert into "+tableName+"(");
  85.  
  86. StringBuffer insertRecordCons = new StringBuffer();
  87. insertRecordCons.append("\t\t"+"values (");
  88.  
  89. StringBuffer insertSelCon = new StringBuffer();
  90. insertSelCon.append("\t"+"<insert id=\"insertSelective\" parameterType=\""+beanPackage+"."+beanName+"\">\n");
  91. insertSelCon.append("\t\t"+"insert into "+tableName+"\n");
  92. insertSelCon.append("\t\t"+"<trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\" >\n");
  93.  
  94. StringBuffer insertSelCons = new StringBuffer();
  95. StringBuffer delByIdCon = new StringBuffer();
  96. delByIdCon.append("\t"+"<delete id=\"deleteById\" parameterType=\""+IdParamType+"\">\n");
  97. delByIdCon.append("\t\t"+"delete from "+tableName+" where "+IdName+"= #{"+beanIdName+",jdbcType="+IdJdbcType+"}\n");
  98. delByIdCon.append("\t"+"</delete>\n");
  99.  
  100. StringBuffer updateByIdSelCon = new StringBuffer();
  101. updateByIdSelCon.append("\t"+"<update id=\"updateByIdSelective\" parameterType=\""+beanPackage+"."+beanName+"\">\n");
  102. updateByIdSelCon.append("\t\t"+"update "+tableName+"\n"+"\t\t"+"<set>\n");
  103.  
  104. StringBuffer updateByIdCon = new StringBuffer();
  105. updateByIdCon.append("\t"+"<update id=\"updateById\" parameterType=\""+beanPackage+"."+beanName+"\">\n");
  106. updateByIdCon.append("\t\t"+"update "+tableName+" set\n");
  107.  
  108. StringBuffer countRecordCon = new StringBuffer();
  109. countRecordCon.append("\t"+"<select id=\"countRecord\" resultType=\"java.lang.Integer\">\n");
  110. countRecordCon.append("\t\t"+"select count(*) from "+tableName+"\n");
  111. countRecordCon.append("\t"+"</select>\n");
  112.  
  113. StringBuffer countSelCon = new StringBuffer();
  114. countSelCon.append("\t"+"<select id=\"countSelective\" parameterType=\""+beanPackage+"."+beanName+"\" resultType=\"java.lang.Integer\">\n");
  115. countSelCon.append("\t\t"+"select count(*) from "+tableName+" where 1=1\n");
  116.  
  117. StringBuffer maxIdCon = new StringBuffer();
  118. maxIdCon.append("\t"+"<select id=\"maxId\" resultType=\"java.lang.Integer\">\n");
  119. maxIdCon.append("\t\t"+"select max("+IdName+") from "+tableName+"\n");
  120. maxIdCon.append("\t"+"</select>\n");
  121.  
  122. StringBuffer selectByIdCon = new StringBuffer();
  123. selectByIdCon.append("\t"+"<select id=\"selectById\" parameterType=\""+IdParamType+"\" resultMap=\"BaseResultMap\">\n");
  124. selectByIdCon.append("\t\t"+"select\n"+"\t\t"+"<include refid=\"Base_Column_List\"/>\n");
  125. selectByIdCon.append("\t\t"+"from "+tableName+"\n"+"\t\t"+"where "+IdName+"= #{"+beanIdName+",jdbcType="+IdJdbcType+"}\n");
  126. selectByIdCon.append("\t"+"</select>\n");
  127.  
  128. StringBuffer selectAllCon=new StringBuffer();
  129. selectAllCon.append("\t"+"<select id=\"selectAll\" resultMap=\"BaseResultMap\">\n");
  130. selectAllCon.append("\t\t"+"select * from "+tableName+"\n");
  131. selectAllCon.append("\t"+"</select>\n");
  132.  
  133. //遍历List,将字段名称和字段类型、属性名写进文件
  134. for (int j = 0; j <columns.size(); j++) {
  135. //字段名
  136. String columnName =columns.get(j).getColumnName();
  137. //属性(变量)名
  138. String attrName =NameUtil.columnName(columns.get(j).getColumnName());
  139. //字段类型
  140. String type=DataTypeUtil.getType(columns.get(j).getDataType());;
  141. String jdbcType =JdbcTypeUtil.getJdbcType(type);
  142. if(jdbcType=="INT"||"INT".equals(jdbcType)){
  143. jdbcType="INTEGER";
  144. }
  145. if(j==0){
  146. resultMapCon.append("\t\t"+"<id column=\""+columnName+"\" property=\""+attrName+"\" jdbcType=\""+jdbcType+"\"/>\n");
  147. baseColCon.append("\t\t"+columnName);
  148. insertRecordCon.append(columnName);
  149. insertRecordCons.append("#{"+attrName+",jdbcType="+jdbcType+"}");
  150. }else{
  151. resultMapCon.append("\t\t"+"<result column=\""+columnName+"\" property=\""+attrName+"\" jdbcType=\""+jdbcType+"\"/>\n");
  152. baseColCon.append(","+columnName);
  153. insertRecordCon.append(",\n"+"\t\t\t"+columnName);
  154. insertRecordCons.append(",\n"+"\t\t\t"+"#{"+attrName+",jdbcType="+jdbcType+"}");
  155. updateByIdSelCon.append("\t\t\t"+"<if test=\""+attrName+" != null\" >\n"+"\t\t\t\t"+columnName+"="+"#{"+attrName+",jdbcType="+jdbcType+"},\n"+"\t\t\t"+"</if>\n");
  156.  
  157. if(j==columns.size()-1){
  158. updateByIdCon.append("\t\t\t"+columnName+"="+"#{"+attrName+",jdbcType="+jdbcType+"}\n");
  159. }else{
  160. updateByIdCon.append("\t\t\t"+columnName+"="+"#{"+attrName+",jdbcType="+jdbcType+"},\n");
  161. }
  162. }
  163. insertSelCon.append("\t\t\t"+"<if test=\""+attrName+" != null\" >\n"+"\t\t\t\t"+columnName+",\n"+"\t\t\t"+"</if>\n");
  164. insertSelCons.append("\t\t\t"+"<if test=\""+attrName+" != null\" >\n"+"\t\t\t\t"+"#{"+attrName+",jdbcType="+jdbcType+"}"+",\n"+"\t\t\t"+"</if>\n");
  165. countSelCon.append("\t\t"+"<if test=\""+attrName+" != null\" >\n"+"\t\t\t"+"and "+columnName+"="+"#{"+attrName+",jdbcType="+jdbcType+"}\n"+"\t\t"+"</if>\n");
  166.  
  167. }
  168. resultMapCon.append("\t"+"</resultMap>\n");
  169. baseColCon.append("\n\t"+"</sql>\n");
  170. insertRecordCon.append(")\n");
  171. insertRecordCons.append(")\n"+" "+"</insert>\n");
  172. insertSelCon.append("\t\t"+"</trim>\n");
  173. insertSelCon.append("\t\t"+"<trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n");
  174. insertSelCons.append("\t\t"+"</trim>\n");
  175. insertSelCons.append("\t"+"</insert>\n");
  176. updateByIdSelCon.append("\t\t"+"</set>\n"+"\t\t"+"where "+IdName+"= #{"+beanIdName+",jdbcType="+IdJdbcType+"}\n"+"\t"+"</update>\n");
  177. updateByIdCon.append("\t\t"+"where "+IdName+"= #{"+beanIdName+",jdbcType="+IdJdbcType+"}\n"+"\t"+"</update>\n");
  178. countSelCon.append("\t"+"</select>\n");
  179.  
  180. //拼接(Mapper.xml)文件内容
  181. StringBuffer content=new StringBuffer();
  182. content.append(headCon);
  183. content.append(resultMapCon);
  184. content.append(baseColCon);
  185. content.append(insertRecordCon);
  186. content.append(insertRecordCons);
  187. content.append(insertSelCon);
  188. content.append(insertSelCons);
  189. content.append(delByIdCon);
  190. content.append(updateByIdSelCon);
  191. content.append(updateByIdCon);
  192. content.append(countRecordCon);
  193. content.append(countSelCon);
  194. content.append(maxIdCon);
  195. content.append(selectByIdCon);
  196. content.append(selectAllCon);
  197. content.append("</mapper>");
  198.  
  199. FileUtil.createFileAtPath(path+"/", fileName+".xml", content.toString());
  200. }
  201. return true;
  202. }
  203. return false;
  204. }
  205.  
  206. }
  1. package com.hwf.auto.daoImpl;
  2.  
  3. import java.util.List;
  4. import com.hwf.auto.bean.ColumnStruct;
  5. import com.hwf.auto.bean.TableStruct;
  6. import com.hwf.auto.dao.GetTablesDao;
  7. import com.hwf.auto.dao.ServiceAutoDao;
  8. import com.hwf.auto.util.ConfigUtil;
  9. import com.hwf.auto.util.DataTypeUtil;
  10. import com.hwf.auto.util.FileUtil;
  11. import com.hwf.auto.util.NameUtil;
  12.  
  13. /**
  14. * 生成Service接口的dao层实现类
  15. * @author
  16. *
  17. */
  18. public class ServiceAutoDaoImpl implements ServiceAutoDao {
  19.  
  20. //从GetTablesDaoImpl中获得装有所有表结构的List
  21. GetTablesDao getTables = new GetTablesDaoImpl();
  22. List<TableStruct> list = getTables.getTablesStruct();
  23.  
  24. //通过表名、字段名称、字段类型创建Service接口
  25. @Override
  26. public boolean createService() {
  27. //获得配置文件的参数
  28. //项目路径
  29. String projectPath = ConfigUtil.projectPath;
  30. //是否生成Service
  31. String serviceFalg=ConfigUtil.serviceFlag;
  32. //Service接口的包名
  33. String servicePackage=ConfigUtil.servicePackage;
  34. //Bean实体类的包名
  35. String beanPackage=ConfigUtil.beanPackage;
  36. if("true".equals(serviceFalg) ){
  37. //将包名com.xxx.xxx形式,替换成com/xxx/xxx形成
  38. String servicePath=servicePackage.replace(".", "/");
  39. //Service接口的路径
  40. String path =projectPath+"/src/"+servicePath;
  41. //遍历装有所有表结构的List
  42. for (int i = 0; i < list.size(); i++) {
  43. //文件名
  44. String fileName=NameUtil.fileName(list.get(i).getTableName())+"Service";
  45. String beanName =NameUtil.fileName(list.get(i).getTableName())+"Bean";
  46. //获得每个表的所有列结构
  47. List<ColumnStruct> columns =list.get(i).getColumns();
  48. //主键变量名(属性名)
  49. String columnName =NameUtil.columnName(columns.get(0).getColumnName());
  50. //获得主键数据类型
  51. String type = columns.get(0).getDataType();
  52. //将mysql数据类型转换为java数据类型
  53. String dateType =DataTypeUtil.getType(type);
  54.  
  55. //(Service接口)文件内容
  56. String packageCon ="package "+servicePackage+";\n\n";
  57. StringBuffer importCon=new StringBuffer();
  58. String className ="public interface "+fileName+"{\n\n";
  59. StringBuffer classCon = new StringBuffer();
  60.  
  61. //生成导包内容
  62. importCon.append("import"+" "+beanPackage+"."+beanName+";\n\n");
  63. //有date类型的数据需导包
  64. if("Date".equals(dateType)){
  65. importCon.append("import java.util.Date;\n\n");
  66. }
  67. //有Timestamp类型的数据需导包
  68. if("Timestamp".equals(dateType)){
  69. importCon.append("import java.sql.Timestamp;\n\n");
  70. }
  71. importCon.append("import java.util.List;\n\n");
  72.  
  73. //生成接口方法
  74. classCon.append("\t"+"public int insertRecord("+beanName+" record);//添加一条完整记录\n\n");
  75. classCon.append("\t"+"public int insertSelective("+beanName+" record);//添加指定列的数据\n\n");
  76. classCon.append("\t"+"public int deleteById("+dateType+" "+columnName+");//通过Id(主键)删除一条记录\n\n");
  77. classCon.append("\t"+"public int updateByIdSelective("+beanName+" record);//按Id(主键)修改指定列的值\n\n");
  78. classCon.append("\t"+"public int updateById("+beanName+" record);//按Id(主键)修改指定列的值\n\n");
  79. classCon.append("\t"+"public int countRecord();//计算表中的总记录数\n\n");
  80. classCon.append("\t"+"public int countSelective("+beanName+" record);//根据条件计算记录条数\n\n");
  81. classCon.append("\t"+"public int maxId();//获得表中的最大Id\n\n");
  82. classCon.append("\t"+"public"+"\t"+beanName+"\t"+"selectById("+dateType+"\t"+columnName+");//通过Id(主键)查询一条记录\n\n");
  83. classCon.append("\t"+"public List selectAll();//查询所有记录\n\n");
  84.  
  85. //拼接(Service接口)文件内容
  86. StringBuffer content=new StringBuffer();
  87. content.append(packageCon);
  88. content.append(importCon.toString());
  89. content.append(className);
  90. content.append(classCon.toString());
  91. content.append("\n}");
  92. FileUtil.createFileAtPath(path+"/", fileName+".java", content.toString());
  93. }
  94. return true;
  95. }
  96. return false;
  97. }
  98. }
  1. package com.hwf.auto.daoImpl;
  2.  
  3. import java.util.List;
  4.  
  5. import com.hwf.auto.bean.ColumnStruct;
  6. import com.hwf.auto.bean.TableStruct;
  7. import com.hwf.auto.dao.GetTablesDao;
  8. import com.hwf.auto.dao.ServiceImplAutoDao;
  9. import com.hwf.auto.util.ConfigUtil;
  10. import com.hwf.auto.util.DataTypeUtil;
  11. import com.hwf.auto.util.FileUtil;
  12. import com.hwf.auto.util.NameUtil;
  13.  
  14. /**
  15. * 生成ServiceImpl实现类的dao层实现类
  16. * @author
  17. */
  18. public class ServiceImplAutoDaoImpl implements ServiceImplAutoDao {
  19.  
  20. //从GetTablesDaoImpl中获得装有所有表结构的List
  21. GetTablesDao getTables = new GetTablesDaoImpl();
  22. List<TableStruct> list = getTables.getTablesStruct();
  23.  
  24. //通过表名、字段名称、字段类型创建ServiceImpl实现类
  25. @Override
  26. public boolean createServiceImpl() {
  27. //获得配置文件的参数
  28. //项目路径
  29. String projectPath = ConfigUtil.projectPath;
  30. //是否生成Service
  31. String serviceImplFalg=ConfigUtil.serviceImplFlag;
  32. //Service接口的包名
  33. String serviceImplPackage=ConfigUtil.serviceImplPackage;
  34. //Bean实体类的包名
  35. String beanPackage=ConfigUtil.beanPackage;
  36. //Service接口的包名
  37. String servicePackage=ConfigUtil.servicePackage;
  38. //Dao接口的包名
  39. String daoPackage=ConfigUtil.daoPackage;
  40. if("true".equals(serviceImplFalg) ){
  41. //将包名com.xxx.xxx形式,替换成com/xxx/xxx形成
  42. String serviceImplPath=serviceImplPackage.replace(".", "/");
  43. //Service接口的路径
  44. String path =projectPath+"/src/"+serviceImplPath;
  45. //遍历装有所有表结构的List
  46. for (int i = 0; i < list.size(); i++) {
  47. //文件名
  48. String fileName=NameUtil.fileName(list.get(i).getTableName())+"ServiceImpl";
  49. String serviceName=NameUtil.fileName(list.get(i).getTableName())+"Service";
  50. String beanName =NameUtil.fileName(list.get(i).getTableName())+"Bean";
  51. String daoName=NameUtil.fileName(list.get(i).getTableName())+"Dao";
  52. //获得每个表的所有列结构
  53. List<ColumnStruct> columns =list.get(i).getColumns();
  54. //主键变量名(属性名)
  55. String columnName =NameUtil.columnName(columns.get(0).getColumnName());
  56. //获得主键数据类型
  57. String type = columns.get(0).getDataType();
  58. //将mysql数据类型转换为java数据类型
  59. String dateType =DataTypeUtil.getType(type);
  60.  
  61. //(ServiceImpl实现类)文件内容
  62. String packageCon ="package "+serviceImplPackage+";\n\n";
  63. StringBuffer importCon=new StringBuffer();
  64. String className ="public class "+fileName+"\timplements "+serviceName+"{\n\n";
  65. StringBuffer classCon = new StringBuffer();
  66.  
  67. //生成导包内容
  68. importCon.append("import "+servicePackage+"."+serviceName+";\n\n");
  69. importCon.append("import"+" "+beanPackage+"."+beanName+";\n\n");
  70. importCon.append("import"+" "+daoPackage+"."+daoName+";\n\n");
  71. //有date类型的数据需导包
  72. if("Date".equals(dateType)){
  73. importCon.append("import java.util.Date;\n\n");
  74. }
  75. //有Timestamp类型的数据需导包
  76. if("Timestamp".equals(dateType)){
  77. importCon.append("import java.sql.Timestamp;\n\n");
  78. }
  79. importCon.append("import java.util.List;\n\n");
  80.  
  81. //生成Dao属性
  82. classCon.append("\tprivate "+daoName+"\t"+ daoName+";\n\n");
  83. classCon.append("\tpublic "+daoName+" get"+ daoName+"(){\n\t\treturn\t"+daoName+";\n\t}\n\n");
  84. classCon.append("\tpublic "+daoName+" set"+ daoName+"("+daoName+" "+daoName+"){\n\t\treturn this."+daoName+"="+daoName+";\n\t}\n\n");
  85.  
  86. //生成实现方法
  87. classCon.append("\t//添加一条完整记录\n"+"\tpublic int insertRecord("+beanName+" record){\n\t\treturn\t"+daoName+".insertRecord(record);\n\t}\n\n");
  88. classCon.append("\t//添加指定列的数据\n"+"\tpublic int insertSelective("+beanName+" record){\n\t\treturn\t"+daoName+".insertSelective(record);\n\t}\n\n");
  89. classCon.append("\t//通过Id(主键)删除一条记录\n"+"\tpublic int deleteById("+dateType+" "+columnName+"){\n\t\treturn\t"+daoName+".deleteById("+columnName+");\n\t}\n\n");
  90. classCon.append("\t//按Id(主键)修改指定列的值\n"+"\tpublic int updateByIdSelective("+beanName+" record){\n\t\treturn\t"+daoName+".updateByIdSelective(record);\n\t}\n\n");
  91. classCon.append("\t//按Id(主键)修改指定列的值\n"+"\tpublic int updateById("+beanName+" record){\n\t\treturn\t"+daoName+".updateById(record);\n\t}\n\n");
  92. classCon.append("\t//计算表中的总记录数\n"+"\tpublic int countRecord(){\n\t\treturn\t"+daoName+".countRecord();\n\t}\n\n");
  93. classCon.append("\t//根据条件计算记录条数\n"+"\tpublic int countSelective("+beanName+" record){\n\t\treturn\t"+daoName+".countSelective(record);\n\t}\n\n");
  94. classCon.append("\t//获得表中的最大Id\n"+"\tpublic int maxId(){\n\t\treturn\t"+daoName+".maxId();\n\t}\n\n");
  95. classCon.append("\t//通过Id(主键)查询一条记录\n"+"\tpublic"+"\t"+beanName+"\t"+"selectById("+dateType+"\t"+columnName+"){\n\t\treturn\t"+daoName+".selectById("+columnName+");\n\t}\n\n");
  96. classCon.append("\t//查询所有记录\n"+"\tpublic List selectAll(){\n\t\treturn\t"+daoName+".selectAll();\n\t}\n\n");
  97.  
  98. //拼接(ServiceImpl实现类)文件内容
  99. StringBuffer content=new StringBuffer();
  100. content.append(packageCon);
  101. content.append(importCon.toString());
  102. content.append(className);
  103. content.append(classCon.toString());
  104. content.append("\n}");
  105. FileUtil.createFileAtPath(path+"/", fileName+".java", content.toString());
  106. }
  107. return true;
  108. }
  109. return false;
  110. }
  111.  
  112. }

4、com.hwf.auto.util包

  1. package com.hwf.auto.util;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.util.Properties;
  6.  
  7. /**
  8. * 获得properties配置文件的参数工具类
  9. * @author
  10. *
  11. */
  12. public class ConfigUtil {
  13.  
  14. //项目路径的参数
  15. public static String projectPath;
  16. //生成Bean实体类的参数
  17. public static String beanFlag;
  18. public static String beanPackage;
  19. //生成Dao接口的参数
  20. public static String daoFlag;
  21. public static String daoPackage;
  22. //生成Service接口的参数
  23. public static String serviceFlag;
  24. public static String servicePackage;
  25. //生成Mapper.xml的参数
  26. public static String mapperXmlFlag;
  27. public static String mapperXmlPackage;
  28. //生成ServiceImpl实现类的参数
  29. public static String serviceImplFlag;
  30. public static String serviceImplPackage;
  31. //获取配置文件参数并加载驱动
  32. static{
  33. try {
  34. //得到配置文件的流信息
  35. InputStream in = DataSourceUtil.class.getClassLoader().getResourceAsStream("config.properties");
  36. //加载properties文件的工具类
  37. Properties pro = new Properties();
  38. //工具类去解析配置文件的流信息
  39. pro.load(in);
  40. //将文件得到的信息,赋值到全局变量
  41. projectPath = pro.getProperty("projectPath");
  42. beanFlag =pro.getProperty("beanFlag");
  43. beanPackage = pro.getProperty("beanPackage");
  44. daoFlag =pro.getProperty("daoFlag");
  45. daoPackage = pro.getProperty("daoPackage");
  46. serviceFlag=pro.getProperty("serviceFlag");
  47. servicePackage=pro.getProperty("servicePackage");
  48. mapperXmlFlag =pro.getProperty("mapperXmlFlag");
  49. mapperXmlPackage = pro.getProperty("mapperXmlPackage");
  50. serviceImplFlag=pro.getProperty("serviceImplFlag");
  51. serviceImplPackage=pro.getProperty("serviceImplPackage");
  52. } catch (IOException e) {
  53. // TODO Auto-generated catch block
  54. e.printStackTrace();
  55. }
  56. }
  57. }
  1. package com.hwf.auto.util;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.sql.*;
  6. import java.util.Properties;
  7. import javax.activation.DataSource;
  8. /**
  9. * 获得数据源工具类
  10. * @author
  11. *
  12. */
  13. public class DataSourceUtil {
  14.  
  15. //链接数据库的参数
  16. private static String driver;
  17. private static String url;
  18. private static String userName;
  19. private static String userPs;
  20. //操作数据库的对象
  21. private Connection con;
  22. private Statement sta;
  23. private ResultSet rs;
  24.  
  25. //获取配置文件参数并加载驱动
  26. static{
  27. try {
  28. //得到配置文件的流信息
  29. InputStream in = DataSourceUtil.class.getClassLoader().getResourceAsStream("config.properties");
  30. //加载properties文件的工具类
  31. Properties pro = new Properties();
  32. //工具类去解析配置文件的流信息
  33. pro.load(in);
  34. //将文件得到的信息,赋值到全局变量
  35. driver = pro.getProperty("jdbc.driverClass");
  36. url = pro.getProperty("jdbc.url");
  37. userName = pro.getProperty("jdbc.username");
  38. userPs = pro.getProperty("jdbc.password");
  39. //加载驱动
  40. Class.forName(driver);
  41.  
  42. } catch (IOException e) {
  43. e.printStackTrace();
  44. } catch (ClassNotFoundException e) {
  45. e.printStackTrace();
  46. }
  47. }
  48.  
  49. /**
  50. * 获得链接
  51. */
  52. private void getConnection(){
  53. try {
  54. con=DriverManager.getConnection(url,userName,userPs);
  55. } catch (SQLException e) {
  56. // TODO Auto-generated catch block
  57. e.printStackTrace();
  58. }
  59. }
  60.  
  61. /**
  62. * 创建一个状态通道
  63. */
  64. private void createStatement(){
  65. //获得链接的方法
  66. this.getConnection();
  67. try {
  68. sta =con.createStatement();
  69. } catch (SQLException e) {
  70. // TODO Auto-generated catch block
  71. e.printStackTrace();
  72. }
  73. }
  74.  
  75. /**
  76. * 基于状态通道的 查询方法
  77. * @param sql
  78. * @return
  79. */
  80. public ResultSet query(String sql){
  81. this.createStatement();
  82. try {
  83. rs = sta.executeQuery(sql);
  84. } catch (SQLException e) {
  85. // TODO Auto-generated catch block
  86. e.printStackTrace();
  87. }
  88. return rs;
  89. }
  90.  
  91. /**
  92. * 关闭资源方法
  93. */
  94. public void closeRes(){
  95. if(rs !=null){
  96. try {
  97. rs.close();
  98. } catch (SQLException e) {
  99. // TODO Auto-generated catch block
  100. e.printStackTrace();
  101. }
  102. }
  103. if(sta != null){
  104. try {
  105. sta.close();
  106. } catch (SQLException e) {
  107. // TODO Auto-generated catch block
  108. e.printStackTrace();
  109. }
  110. }
  111. if(con != null){
  112. try {
  113. con.close();
  114. } catch (SQLException e) {
  115. // TODO Auto-generated catch block
  116. e.printStackTrace();
  117. }
  118. }
  119. }
  120. }
  1. package com.hwf.auto.util;
  2.  
  3. import java.util.Date;
  4. import org.apache.commons.lang3.StringUtils;
  5.  
  6. /**
  7. * mysql数据类型处理工具类
  8. * @author
  9. *
  10. */
  11. public class DataTypeUtil {
  12.  
  13. public static String getType(String dataType){
  14. String type="";
  15. if("tinyint".equals(StringUtils.substringBefore(dataType, "("))){
  16. type="Byte";
  17. }
  18. if("smallint".equals(StringUtils.substringBefore(dataType, "("))){
  19. type="Short";
  20. }
  21. if("mediumint".equals(StringUtils.substringBefore(dataType, "("))){
  22. type="Integer";
  23. }
  24. if("int".equals(StringUtils.substringBefore(dataType, "("))){
  25. type="Integer";
  26. }
  27. if("integer".equals(StringUtils.substringBefore(dataType, "("))){
  28. type="Integer";
  29. }
  30. if("bigint".equals(StringUtils.substringBefore(dataType, "("))){
  31. type="Long";
  32. }
  33. if("bit".equals(StringUtils.substringBefore(dataType, "("))){
  34. type="Boolean";
  35. }
  36. if("double".equals(StringUtils.substringBefore(dataType, "("))){
  37. type="Double";
  38. }
  39. if("float".equals(StringUtils.substringBefore(dataType, "("))){
  40. type="Float";
  41. }
  42. if("decimal".equals(StringUtils.substringBefore(dataType, "("))){
  43. type="Long";
  44. }
  45. if("char".equals(StringUtils.substringBefore(dataType, "("))){
  46. type="String";
  47. }
  48. if("varchar".equals(StringUtils.substringBefore(dataType, "("))){
  49. type="String";
  50. }
  51. if("date".equals(StringUtils.substringBefore(dataType, "("))){
  52. type="Date";
  53. }
  54. if("time".equals(StringUtils.substringBefore(dataType, "("))){
  55. type="Date";
  56. }
  57. if("year".equals(StringUtils.substringBefore(dataType, "("))){
  58. type="Date";
  59. }
  60. if("timestamp".equals(StringUtils.substringBefore(dataType, "("))){
  61. type="Timestamp";
  62. }
  63. if("datetime".equals(StringUtils.substringBefore(dataType, "("))){
  64. type="Timestamp";
  65. }
  66. if("tinytext".equals(StringUtils.substringBefore(dataType, "("))){
  67. type="String";
  68. }
  69. if("enum".equals(StringUtils.substringBefore(dataType, "("))){
  70. type="String";
  71. }
  72. if("set".equals(StringUtils.substringBefore(dataType, "("))){
  73. type="String";
  74. }
  75. if("text".equals(StringUtils.substringBefore(dataType, "("))){
  76. type="String";
  77. }
  78. if("mediumtext".equals(StringUtils.substringBefore(dataType, "("))){
  79. type="String";
  80. }
  81. if("longtext".equals(StringUtils.substringBefore(dataType, "("))){
  82. type="String";
  83. }
  84. return type;
  85. }
  86.  
  87. }
  1. package com.hwf.auto.util;
  2.  
  3. import java.io.*;
  4.  
  5. /**
  6. * 文件读写操作工具类
  7. * @author
  8. *
  9. */
  10. public class FileUtil {
  11. /**
  12. *创建目录
  13. * @param dirName 目录的路径
  14. */
  15. public static boolean createDir(String dirName){
  16. File file=new File(dirName);
  17. if(!file.exists()){
  18. if(file.mkdirs()){
  19. return true;
  20. }
  21. }
  22. return false;
  23. }
  24.  
  25. /**
  26. * 将内容写进文件
  27. * @param filepath
  28. * @param content
  29. * @return
  30. */
  31. public static boolean writeFileContent(String filepath,String content){
  32. Boolean isok = false;
  33. File file =new File(filepath);
  34. if(file.exists()){
  35. try {
  36. //以写入的方式打开文件
  37. FileWriter fw = new FileWriter(filepath);
  38. //文件内容写入
  39. BufferedWriter bw = new BufferedWriter(fw);
  40. bw.write(content);//向文件里面写入内容
  41. bw.close();
  42. fw.close();
  43. isok=true;
  44. } catch (IOException e) {
  45. e.printStackTrace();
  46. }
  47. }
  48. return isok;
  49. }
  50.  
  51. /**
  52. *创建带内容的文件
  53. * @param fileName 文件名
  54. */
  55. public static boolean createFile(String fileName,String content){
  56. File file=new File(fileName);
  57. if(!file.exists()){
  58. try {
  59. //创建文件并写入内容
  60. file.createNewFile();
  61. writeFileContent(fileName,content);
  62. return true;
  63. } catch (IOException e) {
  64. e.printStackTrace();
  65. }
  66. }
  67. return false;
  68. }
  69.  
  70. /**
  71. * 指定路径下创建带内容的文件
  72. * @param path 路径
  73. * @param fileName 文件名
  74. */
  75. public static boolean createFileAtPath(String path,String fileName,String content){
  76. //路径不存在先创建
  77. if(createDir(path)==true){
  78. StringBuffer bf =new StringBuffer(path);
  79. bf.append(fileName);
  80. File file = new File(bf.toString());
  81. if(!file.exists()){
  82. try {
  83. //创建文件并写入内容
  84. file.createNewFile();
  85. writeFileContent(bf.toString(),content);
  86. return true;
  87. } catch (IOException e) {
  88. e.printStackTrace();
  89. }
  90. }
  91. }else{//路径存在直接创建文件并写入内容
  92. return createFile(path+"/"+fileName,content);
  93. }
  94. return false;
  95. }
  96.  
  97. /**
  98. * 创建临时文件
  99. * @param fileName 文件名
  100. * @return
  101. */
  102. public static File createTempFile(String fileName){
  103. //boolean isok = false;
  104. File file = new File("temp"+fileName);
  105. if(!file.exists()){
  106. try {
  107. file.createNewFile();
  108. //当你退出的时候,就把我这个临时文件删除掉
  109. file.deleteOnExit();
  110. //isok=true;
  111. } catch (Exception e) {
  112. e.printStackTrace();
  113. }
  114. }
  115. return file;
  116. }
  117.  
  118. /**
  119. * 删除文件
  120. * @param fileName 文件名
  121. */
  122. public static boolean deleteFile(String fileName){
  123. try {
  124. //直接创建一个文件的操作对象
  125. File file = new File(fileName);
  126. if(file.exists()){
  127. if(file.delete()){
  128. return true;
  129. }
  130. }
  131. } catch (Exception e) {
  132. // TODO: handle exception
  133. }
  134. return false;
  135. }
  136. }
  1. package com.hwf.auto.util;
  2.  
  3. /**
  4. * mybatis的JdbcType处理工具类
  5. * @author
  6. *
  7. */
  8. public class JdbcTypeUtil {
  9.  
  10. public static String getJdbcType(String dataType){
  11. String type="";
  12. if("String".equals(dataType)){
  13. type="VARCHAR";
  14. }
  15. if("BigDecimal".equals(dataType)){
  16. type="NUMERIC";
  17. }
  18. if("boolean".equals(dataType)){
  19. type="BOOLEAN";
  20. }
  21. if("byte".equals(dataType)){
  22. type="TINYINT";
  23. }
  24. if("short".equals(dataType)){
  25. type="SMALLINT";
  26. }
  27. if("int".equals(dataType)){
  28. type="INTEGER";
  29. }
  30. if("Integer".equals(dataType)){
  31. type="INTEGER";
  32. }
  33. if("long".equals(dataType)){
  34. type="BIGINT";
  35. }
  36. if("float".equals(dataType)){
  37. type="DOUBLE";
  38. }
  39. if("double".equals(dataType)){
  40. type="DOUBLE";
  41. }
  42. if("Date".equals(dataType)){
  43. type="DATE";
  44. }
  45. if("Time".equals(dataType)){
  46. type="TIME";
  47. }
  48. if("Timestamp".equals(dataType)){
  49. type="TIMESTAMP";
  50. }
  51. return type;
  52. }
  53. }
  1. package com.hwf.auto.util;
  2.  
  3. /**
  4. * 名字处理工具类(文件名、变量名等)
  5. * @author
  6. *
  7. */
  8. public class NameUtil {
  9.  
  10. /**
  11. * 处理文件名
  12. * @param tableName 数据表表名
  13. * @return
  14. */
  15. public static String fileName(String tableName){
  16. String fileName="";
  17. //获得表名
  18. //去掉表名的下划线
  19. String[] tablesName =tableName.split("_");
  20. for (int j = 0; j < tablesName.length; j++) {
  21. //将每个单词的首字母变成大写
  22. tablesName[j]=tablesName[j].substring(0,1).toUpperCase()+tablesName[j].substring(1);
  23. fileName +=tablesName[j].replace("Tb", "");
  24. }
  25. return fileName;
  26. }
  27.  
  28. /**
  29. * 处理变量名(属性名)
  30. * @param columnName 字段名称
  31. * @return
  32. */
  33. public static String columnName(String columnName){
  34. //将字段名称user_name格式变成userName格式
  35. String colName = "";
  36. //根据下划线将名字分为数组
  37. String[] columnsName = columnName.split("_");
  38. //遍历数组,将除第一个单词外的单词的首字母大写
  39. for (int h = 0; h < columnsName.length; h++) {
  40. for (int k = 1; k < columnsName.length; k++) {
  41. columnsName[k]=columnsName[k].substring(0,1).toUpperCase()+columnsName[k].substring(1);
  42. }
  43. //拼接字符串以获得属性名(字段名称)
  44. colName +=columnsName[h];
  45. }
  46. return colName;
  47. }
  48. }
  1. package com.hwf.auto.util;
  2.  
  3. /**
  4. * mybatis的parameterType处理工具类
  5. * @author
  6. *
  7. */
  8. public class ParamTypeUtil {
  9.  
  10. public static String getParamType(String dataType){
  11. String type="";
  12. if("String".equals(dataType)){
  13. type="java.lang.String";
  14. }
  15. if("BigDecimal".equals(dataType)){
  16. type="java.math.BigDecimal";
  17. }
  18. if("boolean".equals(dataType)){
  19. type="java.lang.Boolean";
  20. }
  21. if("byte".equals(dataType)){
  22. type="java.lang.Byte";
  23. }
  24. if("short".equals(dataType)){
  25. type="java.lang.Short";
  26. }
  27. if("int".equals(dataType)){
  28. type="java.lang.Integer";
  29. }
  30. if("Integer".equals(dataType)){
  31. type="java.lang.Integer";
  32. }
  33. if("long".equals(dataType)){
  34. type="java.lang.Long";
  35. }
  36. if("float".equals(dataType)){
  37. type="java.lang.Double";
  38. }
  39. if("double".equals(dataType)){
  40. type="java.lang.Double";
  41. }
  42. if("Date".equals(dataType)){
  43. type="java.util.Date";
  44. }
  45. if("Time".equals(dataType)){
  46. type="java.sql.Time";
  47. }
  48. if("Timestamp".equals(dataType)){
  49. type="java.sql.Timestamp";
  50. }
  51. if("List".equals(dataType)){
  52. type="java.util.List";
  53. }
  54. if("Map".equals(dataType)){
  55. type="java.util.Map";
  56. }
  57. return type;
  58. }
  59. }

5、pom.xml导入依赖

  1. <dependency>
  2. <groupId>org.apache.commons</groupId>
  3. <artifactId>commons-lang3</artifactId>
  4. <version>3.3.2</version>
  5. </dependency>
  6.  
  7. <!-- 导入Mysql数据库链接jar包 -->
  8. <dependency>
  9. <groupId>mysql</groupId>
  10. <artifactId>mysql-connector-java</artifactId>
  11. <version>5.1.37</version>
  12. </dependency>

6、生成文件类

  1. package com.hwf.auto.main;
  2.  
  3. import com.hwf.auto.dao.*;
  4. import com.hwf.auto.daoImpl.BeanAutoDaoImpl;
  5. import com.hwf.auto.daoImpl.DaoAutoDaoImpl;
  6. import com.hwf.auto.daoImpl.MapperXmlAutoDaoImpl;
  7. import com.hwf.auto.daoImpl.ServiceAutoDaoImpl;
  8. import com.hwf.auto.daoImpl.ServiceImplAutoDaoImpl;
  9.  
  10. public class MainRunner {
  11.  
  12. public void generateCode(){
  13. //1.生成Bean实体类
  14. BeanAutoDao beanAuto = new BeanAutoDaoImpl();
  15. if(beanAuto.createBean()){
  16. System.out.println("所有Bean实体类生成成功");
  17. }else{
  18. System.out.println("所有Bean实体类生成失败");
  19. }
  20. //2.生成Dao接口
  21. DaoAutoDao daoAuto = new DaoAutoDaoImpl();
  22. if(daoAuto.createDao()){
  23. System.out.println("所有Dao接口生成成功");
  24. }else{
  25. System.out.println("所有Dao接口生成失败");
  26. }
  27. //3.生成Mapper.xml
  28. MapperXmlAutoDao mapperXmlAuto=new MapperXmlAutoDaoImpl();
  29. if(mapperXmlAuto.createMapperXml()){
  30. System.out.println("所有Mapper.xml生成成功");
  31. }else{
  32. System.out.println("所有Mapper.xml生成失败");
  33. }
  34. //4.生成Service接口
  35. ServiceAutoDao serviceAuto = new ServiceAutoDaoImpl();
  36. if(serviceAuto.createService()){
  37. System.out.println("所有Service接口生成成功");
  38. }else{
  39. System.out.println("所有Service接口生成失败");
  40. }
  41. //5.生成ServiceImpl实现类
  42. ServiceImplAutoDao serviceImplAuto = new ServiceImplAutoDaoImpl();
  43. if(serviceImplAuto.createServiceImpl()){
  44. System.out.println("所有ServiceImpl实现类生成成功");
  45. }else{
  46. System.out.println("所有ServiceImpl实现类生成失败");
  47. }
  48. }
  49.  
  50. /**
  51. * @param args
  52. */
  53. public static void main(String[] args) {
  54. // TODO Auto-generated method stub
  55.  
  56. MainRunner mr=new MainRunner();
  57. mr.generateCode();
  58. }
  59. }

mybatis自动生成service、dao、mapper的更多相关文章

  1. MyBatis 使用Generator自动生成Model , Dao, mapper

    最近   我新建了一 个maven 项目,使用的是spring + springmvc + mybatis框架. 听说Mybatis可以自动生成model和mapper以及dao层,我就从网上查了查资 ...

  2. 使用MyBatis Generator自动生成实体、mapper和dao层

    原文链接 通过MyBatis Generator可以自动生成实体.mapper和dao层,记录一下怎么用的. 主要步骤: 关于mybatis从数据库反向生成实体.DAO.mapper: 参考文章:ht ...

  3. mybatis自动生成model、dao及对应的mapper.xml文件

    背景: 日常开发中,如果新建表,手动敲写model.dao和对应的mapper.xml文件,费时费力且容易出错, 所以采用mybatis自动生成model.dao及对应的mapper.xml文件.代码 ...

  4. 使用mybatis-generator插件结合tk.mybatis自动生成mapper二三事

    本篇文章将介绍使用spring boot框架,引入mybatis-generator插件,结合tk.mybatis自动生成Mapper和Entity的一整套流程,其中包括最重要的踩坑与填坑.     ...

  5. Mybatis的逆向工程,自动生成代码(Mapper,xml,bean)

    步骤: 1. 新建一个Maven项目: 然后导入maven依赖: <dependencies> <dependency> <groupId>org.mybatis& ...

  6. 使用mybatis-generator插件结合tk.mybatis自动生成mapper

    本篇文章将介绍使用spring boot框架,引入mybatis-generator插件,结合tk.mybatis自动生成Mapper和Entity的一整套流程,其中包括最重要的踩坑与填坑.     ...

  7. SpringBoot--Easycode、mybatisX插件生成entity,controller,service,dao,mapper IDEA版 项目提效神器

    一.介绍 Easycode是idea的一个插件,可以直接对数据的表生成entity,controller,service,dao,mapper,无需任何编码,简单而强大. MybatisX 是一款基于 ...

  8. (二十二)SpringBoot之使用mybatis generator自动生成bean、mapper、mapper xml

    一.下载mybatis generator插件 二.生成generatorConfig.xml new一个generatorConfig.xml 三.修改generatorConfig.xml 里面的 ...

  9. 【MyBatis】MyBatis自动生成代码查询之爬坑记

    前言 项目使用SSM框架搭建Web后台服务,前台后使用restful api,后台使用MyBatisGenerator自动生成代码,在前台使用关键字进行查询时,遇到了一些很宝贵的坑,现记录如下.为展示 ...

随机推荐

  1. Brup Suite 渗透测试笔记(七)

    继续接上次笔记: 1.Burp Intruder的payload类型的子模块(Character blocks)使用一种给出的输入字符,根据指定的设置产生指定大小的字符块,表现形式为生成指定长度的字符 ...

  2. 20165314 2016-2017-2 《Java程序设计》第3周学习总结

    20165314 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 类体包含成员变量和域变量 局部变量只在方法内有效 对象的创建以及对象对自己变量和方法通过用. ...

  3. linux 压缩和解压缩

    压缩 tar -cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg tar -czf jpg.tar.gz *.jpg   //将目录里所有jpg文件打包成jpg.ta ...

  4. C/C++中二进制与文本方式打开文件的区别

    二进制与文本文件主要有两个大的区别: 1.换行符的区别: Windows平台下  对于Windows文本文件,它们使用回车和换行来表示换行符:如果以“文本”方式打开文件,当读取文件的时候,系统会将所有 ...

  5. 51 NOd 2006 飞行员配对(匈牙利算法二分匹配)

    题目来源: 网络流24题 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏  关注 第二次世界大战时期,英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一 ...

  6. java Map按Key排序

    public static void main(String[] args) { Map<String, String> map = new TreeMap<String, Stri ...

  7. epoll函数

    函数epoll 1. 函数epoll_creat: 该函数生成一个epoll专用的文件描述符 int epoll_creae(int size); 分析: size:epoll上能关注的最大描述符数 ...

  8. es6 新增数据类型Symbol

    es6在string number boolean null undefined object之外又新增了一种Symbol类型. Symbol意思是符号,有一个特性—每次创建一个Symbol值都是不一 ...

  9. Nodejs通过账号密码连接MongoDB数据库

    转自https://blog.csdn.net/szu_lzz/article/details/77435804#commentBox 1.创建管理员 首先开启Mongo服务,然后切换admin数据库 ...

  10. 如何查找物理cpu,cpu核心和逻辑cpu的数量

    环境 Red Hat Enterprise Linux 4 Red Hat Enterprise Linux 5 Red Hat Enterprise Linux 6 Red Hat Enterpri ...