根据数据源自动生成bean,一个简单的Java代码生成工具永利集团304com:

一个简单的Java代码生成工具—根据数据源自动生成bean、dao、mapper.xml、service、serviceImpl,

目录结构

永利集团304com 1

 

核心思想

通过properties文件获取数据源—>获取数据表的字段名称、字段类型等—>生成相应的bean实体类(po、model)、dao接口(基本的增删改查)、mapper.xml(mybatis映射文件)、service、serviceImpl。

代码示例

properties配置文件

## 数据库连接参数
jdbc.driverClass = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/oa_system
jdbc.username = root
jdbc.password = 123456

##项目路径
projectPath = G:/project/SSMDemo

##是否生成Bean实体类
beanFlag=true

## 生成Bean实体类的包名
beanPackage=com.hwf.bean

##是否生成Dao接口
daoFlag=true

##生成Dao接口的包名
daoPackage=com.hwf.dao

##是否生成Mapper.xml
mapperXmlFlag=true

##生成Mapper.xml的包名
mapperXmlPackage=com.hwf.daoImpl

##是否生成Service接口
serviceFlag=true

##生成Service接口的包名
servicePackage=com.hwf.service

##是否生成ServiceImpl实现类
serviceImplFlag=true

##生成ServiceImpl实现类的包名
serviceImplPackage=com.hwf.serviceImpl

 

bean实体类

永利集团304com 2

1.数据表的表结构

package com.hwf.auto.bean;

import java.util.List;

/**
* 数据表的表结构
* @author 
*
*/
public class TableStruct {

private String tableName;//表名
private List Columns;//所有的列
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public List getColumns() {
return Columns;
}
public void setColumns(List columns) {
Columns = columns;
}
public TableStruct(String tableName, List columns) {
super();
this.tableName = tableName;
Columns = columns;
}
public TableStruct() {
super();
}
@Override
public String toString() {
return “TableStruct [tableName=” + tableName + “, Columns=” + Columns

  • “]”;
    }
    }

 

2.数据表的列结构

package com.hwf.auto.bean;

/**
* 数据表的列结构
* @author 
*
*/
public class ColumnStruct {

private String columnName;//字段名称
private String dataType;//字段类型
public String getColumnName() {
return columnName;
}
public void setColumnName(String columnName) {
this.columnName = columnName;
}
public String getDataType() {
return dataType;
}
public void setDataType(String dataType) {
this.dataType = dataType;
}
public ColumnStruct(String columnName, String dataType) {
super();
this.columnName = columnName;
this.dataType = dataType;
}
public ColumnStruct() {
super();
}
@Override
public String toString() {
return “ColumnStruct [columnName=” + columnName + “, dataType=”

  • dataType + “]”;
    }
    }

 

 

dao层接口方法及实现类

永利集团304com 3

 

永利集团304com 4

1.获取数据表及其结构

1>接口方法

package com.hwf.auto.dao;

import java.util.List;

/**
* 获取数据表及其结构的dao层接口
* @author 
*
*/
public interface GetTablesDao {

//获得数据库的所有表名
public List getTablesName();

//获得数据表中的字段名称、字段类型
public List getTablesStruct();
}

2>接口实现类

package com.hwf.auto.daoImpl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.hwf.auto.bean.ColumnStruct;
import com.hwf.auto.bean.TableStruct;
import com.hwf.auto.dao.GetTablesDao;
import com.hwf.auto.util.DataSourceUtil;

/**
* 获取数据表及其结构的dao层实现类
* @author 
*
*/
public class GetTablesDaoImpl extends DataSourceUtil implements
GetTablesDao {

//获得数据库的所有表名
@Override
public List getTablesName() {
List tables = new ArrayList();
String sql=”show tables”;
ResultSet rs=this.query(sql);
try {
while(rs.next()){
//将获得的所有表名装进List
tables.add(rs.getString(1));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return tables;
}

//获得数据表中的字段名称、字段类型
@Override
public List getTablesStruct() {
//获得装有所有表名的List
List tables =this.getTablesName();
String sqls =null;
//装所有的表结构(表名+字段名称+字段类型)
List tablesStruct = new ArrayList();
for (int i = 0; i < tables.size(); i++) {
sqls=”show columns from “+tables.get(i).toString();
ResultSet rs=this.query(sqls);
//装所有的列结构(字段名称+字段类型)
List list =new ArrayList();
try {
while(rs.next()){
ColumnStruct cs = new ColumnStruct(rs.getString(1),rs.getString(2));
//找到一列装进List
list.add(cs);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//遍历完一张表,封装成对象
TableStruct ts = new TableStruct(tables.get(i).toString(),list);
//将对象(一张表)装进集合
tablesStruct.add(ts);
}
return tablesStruct;
}
}

2.生成Bean实体类

1>接口方法

package com.hwf.auto.dao;

import com.hwf.auto.bean.TableStruct;

/**
* 生成Bean实体类的dao层接口
* @author 
*
*/
public interface BeanAutoDao {

//通过表名、字段名称、字段类型创建Bean实体
public boolean createBean();
}

2>接口实现类

package com.hwf.auto.daoImpl;

import java.util.ArrayList;
import java.util.List;

import com.hwf.auto.bean.ColumnStruct;
import com.hwf.auto.bean.TableStruct;
import com.hwf.auto.dao.BeanAutoDao;
import com.hwf.auto.dao.GetTablesDao;
import com.hwf.auto.util.ConfigUtil;
import com.hwf.auto.util.DataSourceUtil;
import com.hwf.auto.util.DataTypeUtil;
import com.hwf.auto.util.FileUtil;
import com.hwf.auto.util.NameUtil;

/**
* 生成Bean实体类的dao层实现类
* @author 
*
*/
public class BeanAutoDaoImpl implements BeanAutoDao {

//从GetTablesDaoImpl中获得装有所有表结构的List
GetTablesDao getTables = new GetTablesDaoImpl();
List<TableStruct> list = getTables.getTablesStruct();

//通过表名、字段名称、字段类型创建Bean实体
@Override
public boolean createBean() {
//获得配置文件的参数
//项目路径
String projectPath = ConfigUtil.projectPath;
//是否生成实体类
String beanFalg=ConfigUtil.beanFlag;
//Bean实体类的包名
String beanPackage=ConfigUtil.beanPackage;
//判断是否生成实体类
if(“true”.equals(beanFalg) ){
//将包名com.xxx.xxx形式,替换成com/xxx/xxx形成
String beanPath=beanPackage.replace(“.”, “/”);
//Bean实体类的路径
String path =projectPath+”/src/”+beanPath;
//遍历装有所有表结构的List
for (int i = 0; i < list.size(); i++) {
//文件名
String fileName=NameUtil.fileName(list.get(i).getTableName())+”Bean”;
//获得每个表的所有列结构
List<ColumnStruct> columns =list.get(i).getColumns();
//(实体类)文件内容
String packageCon =”package “+beanPackage+”;nn”;
StringBuffer importCon=new StringBuffer();
String className =”public class “+fileName+”{nn”;
StringBuffer classCon =new StringBuffer();
StringBuffer gettersCon = new StringBuffer();
StringBuffer settersCon = new StringBuffer();
StringBuffer noneConstructor =new StringBuffer();
StringBuffer constructor =new StringBuffer();
String constructorParam=””;
StringBuffer constructorCon=new StringBuffer();
//遍历List,将字段名称和字段类型写进文件
for (int j = 0; j < columns.size(); j++) {
//变量名(属性名)
String columnName
=NameUtil.columnName(columns.get(j).getColumnName());
//获得数据类型
String type = columns.get(j).getDataType();
//将mysql数据类型转换为java数据类型
String dateType =DataTypeUtil.getType(type);
//有date类型的数据需导包
if(“Date”.equals(dateType)){
importCon.append(“import java.util.Date;nn”);
}
//有Timestamp类型的数据需导包
if(“Timestamp”.equals(dateType)){
importCon.append(“import java.sql.Timestamp;nn”);
}

//生成属性
classCon.append(“t”+”private”+”t”+dateType+”t”+columnName+”;n”);
//get、set的方法名
String
getSetName=columnName.substring(0,1).toUpperCase()+columnName.substring(1);
//生成get方法
gettersCon.append(“t”+”public”+”t”+dateType+”t”+”get”+getSetName+”(){n”+
“tt”+”return”+”t”+columnName+”;n”+
“t”+”}n”);
//生成set方法
settersCon.append(“t”+”public
void”+”t”+”set”+getSetName+”(“+dateType+” “+columnName+”){n”+
“tt”+”this.”+columnName+” = “+columnName+”;n”+
“t”+”}n”);
//获得有参构造器参数
if(constructorParam==null||””.equals(constructorParam)){
constructorParam=dateType+” “+columnName;
}else{
constructorParam+=”,”+dateType+” “+columnName;
}
//获得有参构造器的内容
constructorCon.append(“tt”+”this.”+columnName+” =
“+columnName+”;n”);
}
//生成无参构造器
noneConstructor.append(“t”+”public”+”t”+fileName+”(){n”+
“tt”+”super();n”+
“t”+”}n”);
//生成有参构造
constructor.append(“t”+”public”+”
“+fileName+”(“+constructorParam+”){n”+
“tt”+”super();n”+constructorCon+
“t”+”}n”);
//拼接(实体类)文件内容
StringBuffer content=new StringBuffer();
content.append(packageCon);
content.append(importCon.toString());
content.append(className);
content.append(classCon.toString());
content.append(gettersCon.toString());
content.append(settersCon.toString());
content.append(noneConstructor.toString());
content.append(constructor.toString());
content.append(“}”);
FileUtil.createFileAtPath(path+”/”, fileName+”.java”,
content.toString());
}
return true;
}
return false;
}

}

3.生成Dao层接口**

1>接口方法

package com.hwf.auto.dao;

/**
* 生成Dao接口的dao层接口
* @author 
*
*/
public interface DaoAutoDao {

//通过表名、字段名称、字段类型创建Dao接口
public boolean createDao();
}

2>接口实现类

package com.hwf.auto.daoImpl;

import java.util.ArrayList;
import java.util.List;

import com.hwf.auto.bean.ColumnStruct;
import com.hwf.auto.bean.TableStruct;
import com.hwf.auto.dao.BeanAutoDao;
import com.hwf.auto.dao.DaoAutoDao;
import com.hwf.auto.dao.GetTablesDao;
import com.hwf.auto.util.ConfigUtil;
import com.hwf.auto.util.DataTypeUtil;
import com.hwf.auto.util.FileUtil;
import com.hwf.auto.util.NameUtil;

/**
* 生成Dao接口的dao层实现类
* @author 
*
*/
public class DaoAutoDaoImpl implements DaoAutoDao {

//从GetTablesDaoImpl中获得装有所有表结构的List
GetTablesDao getTables = new GetTablesDaoImpl();
List<TableStruct> list = getTables.getTablesStruct();

//通过表名、字段名称、字段类型创建Dao接口
@Override
public boolean createDao() {
//获得配置文件的参数
//项目路径
String projectPath = ConfigUtil.projectPath;
//是否生成Dao
String daoFalg=ConfigUtil.daoFlag;
//Dao接口的包名
String daoPackage=ConfigUtil.daoPackage;
//Bean实体类的包名
String beanPackage=ConfigUtil.beanPackage;
if(“true”.equals(daoFalg) ){
//将包名com.xxx.xxx形式,替换成com/xxx/xxx形成
String daoPath=daoPackage.replace(“.”, “/”);
//Dao接口的路径
String path =projectPath+”/src/”+daoPath;
//遍历装有所有表结构的List
for (int i = 0; i < list.size(); i++) {
//文件名
String fileName=NameUtil.fileName(list.get(i).getTableName())+”Dao”;
String beanName =NameUtil.fileName(list.get(i).getTableName())+”Bean”;
//获得每个表的所有列结构
List<ColumnStruct> columns =list.get(i).getColumns();
//变量名(属性名)
String columnName
=NameUtil.columnName(columns.get(0).getColumnName());
//获得数据类型
String type = columns.get(0).getDataType();
//将mysql数据类型转换为java数据类型
String dateType =DataTypeUtil.getType(type);

//(Dao接口)文件内容
String packageCon =”package “+daoPackage+”;nn”;
StringBuffer importCon=new StringBuffer();
String className =”public interface “+fileName+”{nn”;
StringBuffer classCon = new StringBuffer();

//生成导包内容
importCon.append(“import”+”t”+beanPackage+”.”+beanName+”;nn”);
//有date类型的数据需导包
if(“Date”.equals(dateType)){
importCon.append(“import java.util.Date;nn”);
}
//有Timestamp类型的数据需导包
if(“Timestamp”.equals(dateType)){
importCon.append(“import java.sql.Timestamp;nn”);
}
importCon.append(“import java.util.List;nn”);

//生成接口方法
classCon.append(“t”+”public int insertRecord(“+beanName+”
record);//添加一条完整记录nn”);
classCon.append(“t”+”public int insertSelective(“+beanName+”
record);//添加指定列的数据nn”);
classCon.append(“t”+”public int deleteById(“+dateType+”
“+columnName+”);//通过Id(主键)删除一条记录nn”);
classCon.append(“t”+”public int updateByIdSelective(“+beanName+”
record);//按Id(主键)修改指定列的值nn”);
classCon.append(“t”+”public int updateById(“+beanName+”
record);//按Id(主键)修改指定列的值nn”);
classCon.append(“t”+”public int
countRecord();//计算表中的总记录数nn”);
classCon.append(“t”+”public int countSelective(“+beanName+”
record);//根据条件计算记录条数nn”);
classCon.append(“t”+”public int maxId();//获得表中的最大Idnn”);
classCon.append(“t”+”public”+”t”+beanName+”t”+”selectById(“+dateType+”t”+columnName+”);//通过Id(主键)查询一条记录nn”);
classCon.append(“t”+”public List selectAll();//查询所有记录nn”);

//拼接(Dao接口)文件内容
StringBuffer content=new StringBuffer();
content.append(packageCon);
content.append(importCon.toString());
content.append(className);
content.append(classCon.toString());
content.append(“n}”);
FileUtil.createFileAtPath(path+”/”, fileName+”.java”,
content.toString());
}
return true;
}
return false;
}

}

4.生成Mapper.xml

1>接口方法

package com.hwf.auto.dao;

/**
* 生成Mapper.xml的dao层接口
* @author 
*
*/
public interface MapperXmlAutoDao {

//通过表名、字段名称、字段类型创建Mapper.xml
public boolean createMapperXml();
}

2>接口实现类

package com.hwf.auto.daoImpl;

import java.util.List;

import org.apache.commons.lang3.StringUtils;

import com.hwf.auto.bean.ColumnStruct;
import com.hwf.auto.bean.TableStruct;
import com.hwf.auto.dao.GetTablesDao;
import com.hwf.auto.dao.MapperXmlAutoDao;
import com.hwf.auto.util.ConfigUtil;
import com.hwf.auto.util.DataTypeUtil;
import com.hwf.auto.util.FileUtil;
import com.hwf.auto.util.JdbcTypeUtil;
import com.hwf.auto.util.NameUtil;
import com.hwf.auto.util.ParamTypeUtil;

/**
* 生成Mapper.xml的dao层实现类
* @author 
*
*/
public class MapperXmlAutoDaoImpl implements MapperXmlAutoDao {

//从GetTablesDaoImpl中获得装有所有表结构的List
GetTablesDao getTables = new GetTablesDaoImpl();
List<TableStruct> list = getTables.getTablesStruct();

//通过表名、字段名称、字段类型创建Mapper.xml
@Override
public boolean createMapperXml() {
//获得配置文件的参数
//项目路径
String projectPath = ConfigUtil.projectPath;
//是否生成Mapper.xml
String mapperXmlFalg=ConfigUtil.mapperXmlFlag;
//Mapper.xml的包名
String mapperXmlPackage=ConfigUtil.mapperXmlPackage;
//Bean实体类的包名
String beanPackage=ConfigUtil.beanPackage;
//Dao接口的包名
String daoPackage=ConfigUtil.daoPackage;
if(“true”.equals(mapperXmlFalg) ){
//将包名com.xxx.xxx形式,替换成com/xxx/xxx形成
String mapperXmlPath=mapperXmlPackage.replace(“.”, “/”);
//Mapper.xml的路径
String path =projectPath+”/src/”+mapperXmlPath;
//遍历装有所有表结构的List
for (int i = 0; i < list.size(); i++) {
//表名
String tableName =list.get(i).getTableName();

//文件名
String fileName=NameUtil.fileName(tableName)+”Mapper”;
String beanName =NameUtil.fileName(tableName)+”Bean”;
String daoName =NameUtil.fileName(tableName)+”Dao”;

//获得每个表的所有列结构
List<ColumnStruct> columns =list.get(i).getColumns();

//主键名
String beanIdName=NameUtil.columnName(columns.get(0).getColumnName());
String IdName = columns.get(0).getColumnName();
//主键类型
String IdType = DataTypeUtil.getType(columns.get(0).getDataType());
String IdParamType =ParamTypeUtil.getParamType(IdType);
String IdJdbcType = JdbcTypeUtil.getJdbcType(IdType);
if(IdJdbcType==”INT”||”INT”.equals(IdJdbcType)){
IdJdbcType=”INTEGER”;
}

//(Mapper.xml)文件内容
StringBuffer headCon = new StringBuffer();
headCon.append(“<?xml version=”1.0″ encoding=”UTF-8″
?>n”);
headCon.append(“<!DOCTYPE mapper PUBLIC “-//mybatis.org//DTD Mapper
3.0//EN” “”);
headCon.append(“<mapper
namespace=””+daoPackage+”.”+daoName+””>n”);

StringBuffer resultMapCon = new StringBuffer();
resultMapCon.append(“t”+”<resultMap id=”BaseResultMap”
type=””+beanPackage+”.”+beanName+””>n”);

StringBuffer baseColCon = new StringBuffer();
baseColCon.append(“t”+”<sql id=”Base_Column_List”>n”);

StringBuffer insertRecordCon = new StringBuffer();
insertRecordCon.append(“t”+”<insert id=”insertRecord”
parameterType=””+beanPackage+”.”+beanName+””>n”);
insertRecordCon.append(“tt”+”insert into “+tableName+”(“);

StringBuffer insertRecordCons = new StringBuffer();
insertRecordCons.append(“tt”+”values (“);

StringBuffer insertSelCon = new StringBuffer();
insertSelCon.append(“t”+”<insert id=”insertSelective”
parameterType=””+beanPackage+”.”+beanName+””>n”);
insertSelCon.append(“tt”+”insert into “+tableName+”n”);
insertSelCon.append(“tt”+”<trim prefix=”(” suffix=”)”
suffixOverrides=”,” >n”);

StringBuffer insertSelCons = new StringBuffer();
StringBuffer delByIdCon = new StringBuffer();
delByIdCon.append(“t”+”<delete id=”deleteById”
parameterType=””+IdParamType+””>n”);
delByIdCon.append(“tt”+”delete from “+tableName+” where “+IdName+”=
#{“+beanIdName+”,jdbcType=”+IdJdbcType+”}n”);
delByIdCon.append(“t”+”</delete>n”);

StringBuffer updateByIdSelCon = new StringBuffer();
updateByIdSelCon.append(“t”+”<update id=”updateByIdSelective”
parameterType=””+beanPackage+”.”+beanName+””>n”);
updateByIdSelCon.append(“tt”+”update
“+tableName+”n”+”tt”+”<set>n”);

StringBuffer updateByIdCon = new StringBuffer();
updateByIdCon.append(“t”+”<update id=”updateById”
parameterType=””+beanPackage+”.”+beanName+””>n”);
updateByIdCon.append(“tt”+”update “+tableName+” setn”);

StringBuffer countRecordCon = new StringBuffer();
countRecordCon.append(“t”+”<select id=”countRecord”
resultType=”java.lang.Integer”>n”);
countRecordCon.append(“tt”+”select count(*) from
“+tableName+”n”);
countRecordCon.append(“t”+”</select>n”);

StringBuffer countSelCon = new StringBuffer();
countSelCon.append(“t”+”<select id=”countSelective”
parameterType=””+beanPackage+”.”+beanName+””
resultType=”java.lang.Integer”>n”);
countSelCon.append(“tt”+”select count(*) from “+tableName+” where
1=1n”);

StringBuffer maxIdCon = new StringBuffer();
maxIdCon.append(“t”+”<select id=”maxId”
resultType=”java.lang.Integer”>n”);
maxIdCon.append(“tt”+”select max(“+IdName+”) from
“+tableName+”n”);
maxIdCon.append(“t”+”</select>n”);

StringBuffer selectByIdCon = new StringBuffer();
selectByIdCon.append(“t”+”<select id=”selectById”
parameterType=””+IdParamType+””
resultMap=”BaseResultMap”>n”);
selectByIdCon.append(“tt”+”selectn”+”tt”+”<include
refid=”Base_Column_List”/>n”);
selectByIdCon.append(“tt”+”from “+tableName+”n”+”tt”+”where
“+IdName+”= #{“+beanIdName+”,jdbcType=”+IdJdbcType+”}n”);
selectByIdCon.append(“t”+”</select>n”);

StringBuffer selectAllCon=new StringBuffer();
selectAllCon.append(“t”+”<select id=”selectAll”
resultMap=”BaseResultMap”>n”);
selectAllCon.append(“tt”+”select * from “+tableName+”n”);
selectAllCon.append(“t”+”</select>n”);

//遍历List,将字段名称和字段类型、属性名写进文件
for (int j = 0; j <columns.size(); j++) {
//字段名
String columnName =columns.get(j).getColumnName();
//属性(变量)名
String attrName =NameUtil.columnName(columns.get(j).getColumnName());
//字段类型
String type=DataTypeUtil.getType(columns.get(j).getDataType());;
String jdbcType =JdbcTypeUtil.getJdbcType(type);
if(jdbcType==”INT”||”INT”.equals(jdbcType)){
jdbcType=”INTEGER”;
}
if(j==0){
resultMapCon.append(“tt”+”<id column=””+columnName+””
property=””+attrName+”” jdbcType=””+jdbcType+””/>n”);
baseColCon.append(“tt”+columnName);
insertRecordCon.append(columnName);
insertRecordCons.append(“#{“+attrName+”,jdbcType=”+jdbcType+”}”);
}else{
resultMapCon.append(“tt”+”<result column=””+columnName+””
property=””+attrName+”” jdbcType=””+jdbcType+””/>n”);
baseColCon.append(“,”+columnName);
insertRecordCon.append(“,n”+”ttt”+columnName);
insertRecordCons.append(“,n”+”ttt”+”#{“+attrName+”,jdbcType=”+jdbcType+”}”);
updateByIdSelCon.append(“ttt”+”<if test=””+attrName+” !=
null”
>n”+”tttt”+columnName+”=”+”#{“+attrName+”,jdbcType=”+jdbcType+”},n”+”ttt”+”</if>n”);

if(j==columns.size()-1){
updateByIdCon.append(“ttt”+columnName+”=”+”#{“+attrName+”,jdbcType=”+jdbcType+”}n”);
}else{
updateByIdCon.append(“ttt”+columnName+”=”+”#{“+attrName+”,jdbcType=”+jdbcType+”},n”);
}
}
insertSelCon.append(“ttt”+”<if test=””+attrName+” != null”
>n”+”tttt”+columnName+”,n”+”ttt”+”</if>n”);
insertSelCons.append(“ttt”+”<if test=””+attrName+” != null”
>n”+”tttt”+”#{“+attrName+”,jdbcType=”+jdbcType+”}”+”,n”+”ttt”+”</if>n”);
countSelCon.append(“tt”+”<if test=””+attrName+” != null”
>n”+”ttt”+”and
“+columnName+”=”+”#{“+attrName+”,jdbcType=”+jdbcType+”}n”+”tt”+”</if>n”);

}
resultMapCon.append(“t”+”</resultMap>n”);
baseColCon.append(“nt”+”</sql>n”);
insertRecordCon.append(“)n”);
insertRecordCons.append(“)n”+” “+”</insert>n”);
insertSelCon.append(“tt”+”</trim>n”);
insertSelCon.append(“tt”+”<trim prefix=”values (”
suffix=”)” suffixOverrides=”,”>n”);
insertSelCons.append(“tt”+”</trim>n”);
insertSelCons.append(“t”+”</insert>n”);
updateByIdSelCon.append(“tt”+”</set>n”+”tt”+”where
“+IdName+”=
#{“+beanIdName+”,jdbcType=”+IdJdbcType+”}n”+”t”+”</update>n”);
updateByIdCon.append(“tt”+”where “+IdName+”=
#{“+beanIdName+”,jdbcType=”+IdJdbcType+”}n”+”t”+”</update>n”);
countSelCon.append(“t”+”</select>n”);

//拼接(Mapper.xml)文件内容
StringBuffer content=new StringBuffer();
content.append(headCon);
content.append(resultMapCon);
content.append(baseColCon);
content.append(insertRecordCon);
content.append(insertRecordCons);
content.append(insertSelCon);
content.append(insertSelCons);
content.append(delByIdCon);
content.append(updateByIdSelCon);
content.append(updateByIdCon);
content.append(countRecordCon);
content.append(countSelCon);
content.append(maxIdCon);
content.append(selectByIdCon);
content.append(selectAllCon);
content.append(“</mapper>”);

FileUtil.createFileAtPath(path+”/”, fileName+”.xml”,
content.toString());
}
return true;
}
return false;
}

}

5.生成Service接口

1>接口方法

package com.hwf.auto.dao;

/**
* 生成Service接口的dao层接口
* @author 
*
*/
public interface ServiceAutoDao {

//通过表名、字段名称、字段类型创建Service接口
public boolean createService();
}

2>接口实现类

package com.hwf.auto.daoImpl;

import java.util.List;

import com.hwf.auto.bean.ColumnStruct;
import com.hwf.auto.bean.TableStruct;
import com.hwf.auto.dao.GetTablesDao;
import com.hwf.auto.dao.ServiceAutoDao;
import com.hwf.auto.util.ConfigUtil;
import com.hwf.auto.util.DataTypeUtil;
import com.hwf.auto.util.FileUtil;
import com.hwf.auto.util.NameUtil;

/**
* 生成Service接口的dao层实现类
* @author 
*
*/
public class ServiceAutoDaoImpl implements ServiceAutoDao {

//从GetTablesDaoImpl中获得装有所有表结构的List
GetTablesDao getTables = new GetTablesDaoImpl();
List<TableStruct> list = getTables.getTablesStruct();

//通过表名、字段名称、字段类型创建Service接口
@Override
public boolean createService() {
//获得配置文件的参数
//项目路径
String projectPath = ConfigUtil.projectPath;
//是否生成Service
String serviceFalg=ConfigUtil.serviceFlag;
//Service接口的包名
String servicePackage=ConfigUtil.servicePackage;
//Bean实体类的包名
String beanPackage=ConfigUtil.beanPackage;
if(“true”.equals(serviceFalg) ){
//将包名com.xxx.xxx形式,替换成com/xxx/xxx形成
String servicePath=servicePackage.replace(“.”, “/”);
//Service接口的路径
String path =projectPath+”/src/”+servicePath;
//遍历装有所有表结构的List
for (int i = 0; i < list.size(); i++) {
//文件名
String
fileName=NameUtil.fileName(list.get(i).getTableName())+”Service”;
String beanName =NameUtil.fileName(list.get(i).getTableName())+”Bean”;
//获得每个表的所有列结构
List<ColumnStruct> columns =list.get(i).getColumns();
//主键变量名(属性名)
String columnName
=NameUtil.columnName(columns.get(0).getColumnName());
//获得主键数据类型
String type = columns.get(0).getDataType();
//将mysql数据类型转换为java数据类型
String dateType =DataTypeUtil.getType(type);

//(Service接口)文件内容
String packageCon =”package “+servicePackage+”;nn”;
StringBuffer importCon=new StringBuffer();
String className =”public interface “+fileName+”{nn”;
StringBuffer classCon = new StringBuffer();

//生成导包内容
importCon.append(“import”+” “+beanPackage+”.”+beanName+”;nn”);
//有date类型的数据需导包
if(“Date”.equals(dateType)){
importCon.append(“import java.util.Date;nn”);
}
//有Timestamp类型的数据需导包
if(“Timestamp”.equals(dateType)){
importCon.append(“import java.sql.Timestamp;nn”);
}
importCon.append(“import java.util.List;nn”);

//生成接口方法
classCon.append(“t”+”public int insertRecord(“+beanName+”
record);//添加一条完整记录nn”);
classCon.append(“t”+”public int insertSelective(“+beanName+”
record);//添加指定列的数据nn”);
classCon.append(“t”+”public int deleteById(“+dateType+”
“+columnName+”);//通过Id(主键)删除一条记录nn”);
classCon.append(“t”+”public int updateByIdSelective(“+beanName+”
record);//按Id(主键)修改指定列的值nn”);
classCon.append(“t”+”public int updateById(“+beanName+”
record);//按Id(主键)修改指定列的值nn”);
classCon.append(“t”+”public int
countRecord();//计算表中的总记录数nn”);
classCon.append(“t”+”public int countSelective(“+beanName+”
record);//根据条件计算记录条数nn”);
classCon.append(“t”+”public int maxId();//获得表中的最大Idnn”);
classCon.append(“t”+”public”+”t”+beanName+”t”+”selectById(“+dateType+”t”+columnName+”);//通过Id(主键)查询一条记录nn”);
classCon.append(“t”+”public List selectAll();//查询所有记录nn”);

//拼接(Service接口)文件内容
StringBuffer content=new StringBuffer();
content.append(packageCon);
content.append(importCon.toString());
content.append(className);
content.append(classCon.toString());
content.append(“n}”);
FileUtil.createFileAtPath(path+”/”, fileName+”.java”,
content.toString());
}
return true;
}
return false;
}

}

6.生成ServiceImpl实现类

1>接口方法

package com.hwf.auto.dao;

/**
* 生成ServiceImpl实现类的dao层接口
* @author 
*
*/
public interface ServiceImplAutoDao {

//通过表名、字段名称、字段类型创建ServiceImpl实现类
public boolean createServiceImpl();
}

2>接口实现类

package com.hwf.auto.daoImpl;

import java.util.List;

import com.hwf.auto.bean.ColumnStruct;
import com.hwf.auto.bean.TableStruct;
import com.hwf.auto.dao.GetTablesDao;
import com.hwf.auto.dao.ServiceImplAutoDao;
import com.hwf.auto.util.ConfigUtil;
import com.hwf.auto.util.DataTypeUtil;
import com.hwf.auto.util.FileUtil;
import com.hwf.auto.util.NameUtil;

/**
* 生成ServiceImpl实现类的dao层实现类
* @author 
*/
public class ServiceImplAutoDaoImpl implements ServiceImplAutoDao {

//从GetTablesDaoImpl中获得装有所有表结构的List
GetTablesDao getTables = new GetTablesDaoImpl();
List<TableStruct> list = getTables.getTablesStruct();

//通过表名、字段名称、字段类型创建ServiceImpl实现类
@Override
public boolean createServiceImpl() {
//获得配置文件的参数
//项目路径
String projectPath = ConfigUtil.projectPath;
//是否生成Service
String serviceImplFalg=ConfigUtil.serviceImplFlag;
//Service接口的包名
String serviceImplPackage=ConfigUtil.serviceImplPackage;
//Bean实体类的包名
String beanPackage=ConfigUtil.beanPackage;
//Service接口的包名
String servicePackage=ConfigUtil.servicePackage;
//Dao接口的包名
String daoPackage=ConfigUtil.daoPackage;
if(“true”.equals(serviceImplFalg) ){
//将包名com.xxx.xxx形式,替换成com/xxx/xxx形成
String serviceImplPath=serviceImplPackage.replace(“.”, “/”);
//Service接口的路径
String path =projectPath+”/src/”+serviceImplPath;
//遍历装有所有表结构的List
for (int i = 0; i < list.size(); i++) {
//文件名
String
fileName=NameUtil.fileName(list.get(i).getTableName())+”ServiceImpl”;
String
serviceName=NameUtil.fileName(list.get(i).getTableName())+”Service”;
String beanName =NameUtil.fileName(list.get(i).getTableName())+”Bean”;
String daoName=NameUtil.fileName(list.get(i).getTableName())+”Dao”;
//获得每个表的所有列结构
List<ColumnStruct> columns =list.get(i).getColumns();
//主键变量名(属性名)
String columnName
=NameUtil.columnName(columns.get(0).getColumnName());
//获得主键数据类型
String type = columns.get(0).getDataType();
//将mysql数据类型转换为java数据类型
String dateType =DataTypeUtil.getType(type);

//(ServiceImpl实现类)文件内容
String packageCon =”package “+serviceImplPackage+”;nn”;
StringBuffer importCon=new StringBuffer();
String className =”public class “+fileName+”timplements
“+serviceName+”{nn”;
StringBuffer classCon = new StringBuffer();

//生成导包内容
importCon.append(“import “+servicePackage+”.”+serviceName+”;nn”);
importCon.append(“import”+” “+beanPackage+”.”+beanName+”;nn”);
importCon.append(“import”+” “+daoPackage+”.”+daoName+”;nn”);
//有date类型的数据需导包
if(“Date”.equals(dateType)){
importCon.append(“import java.util.Date;nn”);
}
//有Timestamp类型的数据需导包
if(“Timestamp”.equals(dateType)){
importCon.append(“import java.sql.Timestamp;nn”);
}
importCon.append(“import java.util.List;nn”);

//生成Dao属性
classCon.append(“tprivate “+daoName+”t”+ daoName+”;nn”);
classCon.append(“tpublic “+daoName+” get”+
daoName+”(){nttreturnt”+daoName+”;nt}nn”);
classCon.append(“tpublic “+daoName+” set”+ daoName+”(“+daoName+”
“+daoName+”){nttreturn
this.”+daoName+”=”+daoName+”;nt}nn”);

//生成实现方法
classCon.append(“t//添加一条完整记录n”+”tpublic int
insertRecord(“+beanName+”
record){nttreturnt”+daoName+”.insertRecord(record);nt}nn”);
classCon.append(“t//添加指定列的数据n”+”tpublic int
insertSelective(“+beanName+”
record){nttreturnt”+daoName+”.insertSelective(record);nt}nn”);
classCon.append(“t//通过Id(主键)删除一条记录n”+”tpublic int
deleteById(“+dateType+”
“+columnName+”){nttreturnt”+daoName+”.deleteById(“+columnName+”);nt}nn”);
classCon.append(“t//按Id(主键)修改指定列的值n”+”tpublic int
updateByIdSelective(“+beanName+”
record){nttreturnt”+daoName+”.updateByIdSelective(record);nt}nn”);
classCon.append(“t//按Id(主键)修改指定列的值n”+”tpublic int
updateById(“+beanName+”
record){nttreturnt”+daoName+”.updateById(record);nt}nn”);
classCon.append(“t//计算表中的总记录数n”+”tpublic int
countRecord(){nttreturnt”+daoName+”.countRecord();nt}nn”);
classCon.append(“t//根据条件计算记录条数n”+”tpublic int
countSelective(“+beanName+”
record){nttreturnt”+daoName+”.countSelective(record);nt}nn”);
classCon.append(“t//获得表中的最大Idn”+”tpublic int
maxId(){nttreturnt”+daoName+”.maxId();nt}nn”);
classCon.append(“t//通过Id(主键)查询一条记录n”+”tpublic”+”t”+beanName+”t”+”selectById(“+dateType+”t”+columnName+”){nttreturnt”+daoName+”.selectById(“+columnName+”);nt}nn”);
classCon.append(“t//查询所有记录n”+”tpublic List
selectAll(){nttreturnt”+daoName+”.selectAll();nt}nn”);

//拼接(ServiceImpl实现类)文件内容
StringBuffer content=new StringBuffer();
content.append(packageCon);
content.append(importCon.toString());
content.append(className);
content.append(classCon.toString());
content.append(“n}”);
FileUtil.createFileAtPath(path+”/”, fileName+”.java”,
content.toString());
}
return true;
}
return false;
}

}

 

Util工具类

永利集团304com 5

1.ConfigUtil—获得properties配置文件的参数工具类

 

package com.hwf.auto.util;

 

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

 

/**
* 获得properties配置文件的参数工具类
* @author 
*
*/
public class ConfigUtil {

 

//项目路径的参数
public static String projectPath;
//生成Bean实体类的参数
public static String beanFlag;
public static String beanPackage;
//生成Dao接口的参数
public static String daoFlag;
public static String daoPackage;
//生成Service接口的参数
public static String serviceFlag;
public static String servicePackage;
//生成Mapper.xml的参数
public static String mapperXmlFlag;
public static String mapperXmlPackage;
//生成ServiceImpl实现类的参数
public static String serviceImplFlag;
public static String serviceImplPackage;
//获取配置文件参数并加载驱动
static{
try {
//得到配置文件的流信息
InputStream in =
DataSourceUtil.class.getClassLoader().getResourceAsStream(“config.properties”);
//加载properties文件的工具类
Properties pro = new Properties();
//工具类去解析配置文件的流信息
pro.load(in);
//将文件得到的信息,赋值到全局变量
projectPath = pro.getProperty(“projectPath”);
beanFlag =pro.getProperty(“beanFlag”);
beanPackage = pro.getProperty(“beanPackage”);
daoFlag =pro.getProperty(“daoFlag”);
daoPackage = pro.getProperty(“daoPackage”);
serviceFlag=pro.getProperty(“serviceFlag”);
servicePackage=pro.getProperty(“servicePackage”);
mapperXmlFlag =pro.getProperty(“mapperXmlFlag”);
mapperXmlPackage = pro.getProperty(“mapperXmlPackage”);
serviceImplFlag=pro.getProperty(“serviceImplFlag”);
serviceImplPackage=pro.getProperty(“serviceImplPackage”);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

 

2.DataSourceUtil—获得数据源工具类

 

package com.hwf.auto.util;

 

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

 

import javax.activation.DataSource;
/**
* 获得数据源工具类
* @author 
*
*/
public class DataSourceUtil {

 

//链接数据库的参数
private static String driver;
private static String url;
private static String userName;
private static String userPs;
//操作数据库的对象
private Connection con;
private Statement sta;
private ResultSet rs;

//获取配置文件参数并加载驱动
static{
try {
//得到配置文件的流信息
InputStream in =
DataSourceUtil.class.getClassLoader().getResourceAsStream(“config.properties”);
//加载properties文件的工具类
Properties pro = new Properties();
//工具类去解析配置文件的流信息
pro.load(in);
//将文件得到的信息,赋值到全局变量
driver = pro.getProperty(“jdbc.driverClass”);
url = pro.getProperty(“jdbc.url”);
userName = pro.getProperty(“jdbc.username”);
userPs = pro.getProperty(“jdbc.password”);
//加载驱动
Class.forName(driver);

} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

/**
* 获得链接
*/
private void getConnection(){
try {
con=DriverManager.getConnection(url,userName,userPs);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

/**
* 创建一个状态通道
*/
private void createStatement(){
//获得链接的方法
this.getConnection();
try {
sta =con.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

/**
* 基于状态通道的 查询方法
* @param sql
* @return
*/
public ResultSet query(String sql){
this.createStatement();
try {
rs = sta.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
}

/**
* 关闭资源方法
*/
public void closeRes(){
if(rs !=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(sta != null){
try {
sta.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(con != null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

 

3.DataTypeUtil—— mysql数据类型处理工具类

 

package com.hwf.auto.util;

 

import java.util.Date;

 

import org.apache.commons.lang3.StringUtils;

 

/**
* mysql数据类型处理工具类
* @author 
*
*/
public class DataTypeUtil {

public static String getType(String dataType){
String type=””;
if(“tinyint”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”Byte”;
}
if(“smallint”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”Short”;
}
if(“mediumint”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”Integer”;
}
if(“int”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”Integer”;
}
if(“integer”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”Integer”;
}
if(“bigint”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”Long”;
}
if(“bit”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”Boolean”;
}
if(“double”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”Double”;
}
if(“float”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”Float”;
}
if(“decimal”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”Long”;
}
if(“char”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”String”;
}
if(“varchar”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”String”;
}
if(“date”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”Date”;
}
if(“time”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”Date”;
}
if(“year”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”Date”;
}
if(“timestamp”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”Timestamp”;
}
if(“datetime”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”Timestamp”;
}
if(“tinytext”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”String”;
}
if(“enum”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”String”;
}
if(“set”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”String”;
}
if(“text”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”String”;
}
if(“mediumtext”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”String”;
}
if(“longtext”.equals(StringUtils.substringBefore(dataType, “(“))){
type=”String”;
}
return type;
}

}

 

4.FileUtil—文件读写操作工具类

 

package com.hwf.auto.util;

 

import java.io.*;

 

/**
* 文件读写操作工具类
* @author 
*
*/
public class FileUtil {
/**
*创建目录
* @param dirName 目录的路径
*/
public static boolean createDir(String dirName){
File file=new File(dirName);
if(!file.exists()){
if(file.mkdirs()){
return true;
}
}
return false;
}

/**
* 将内容写进文件
* @param filepath
* @param content
* @return
*/
public static boolean writeFileContent(String filepath,String
content){
Boolean isok = false;
File file =new File(filepath);
if(file.exists()){
try {
//以写入的方式打开文件
FileWriter fw = new FileWriter(filepath);
//文件内容写入
BufferedWriter bw = new BufferedWriter(fw);
bw.write(content);//向文件里面写入内容
bw.close();
fw.close();
isok=true;
} catch (IOException e) {
e.printStackTrace();
}
}
return isok;
}

/**
*创建带内容的文件
* @param fileName 文件名
*/
public static boolean createFile(String fileName,String content){
File file=new File(fileName);
if(!file.exists()){
try {
//创建文件并写入内容
file.createNewFile();
writeFileContent(fileName,content);
return true;
} catch (IOException e) {
e.printStackTrace();
}
}
return false;
}

/**
* 指定路径下创建带内容的文件
* @param path 路径
* @param fileName 文件名
*/
public static boolean createFileAtPath(String path,String
fileName,String content){
//路径不存在先创建
if(createDir(path)==true){
StringBuffer bf =new StringBuffer(path);
bf.append(fileName);
File file = new File(bf.toString());
if(!file.exists()){
try {
//创建文件并写入内容
file.createNewFile();
writeFileContent(bf.toString(),content);
return true;
} catch (IOException e) {
e.printStackTrace();
}
}
}else{//路径存在直接创建文件并写入内容
return createFile(path+”/”+fileName,content);
}
return false;
}

/**
* 创建临时文件
* @param fileName 文件名
* @return
*/
public static File createTempFile(String fileName){
//boolean isok = false;
File file = new File(“temp”+fileName);
if(!file.exists()){
try {
file.createNewFile();
//当你退出的时候,就把我这个临时文件删除掉
file.deleteOnExit();
//isok=true;
} catch (Exception e) {
e.printStackTrace();
}
}
return file;
}

/**
* 删除文件
* @param fileName 文件名
*/
public static boolean deleteFile(String fileName){
try {
//直接创建一个文件的操作对象
File file = new File(fileName);
if(file.exists()){
if(file.delete()){
return true;
}
}
} catch (Exception e) {
// TODO: handle exception
}
return false;
}
}

 

5.JdbcTypeUtil—mybatis的JdbcType处理工具类

 

package com.hwf.auto.util;

 

import org.apache.commons.lang3.StringUtils;

 

/**
* mybatis的JdbcType处理工具类
* @author 
*
*/
public class JdbcTypeUtil {

 

public static String getJdbcType(String dataType){
String type=””;
if(“String”.equals(dataType)){
type=”VARCHAR”;
}
if(“BigDecimal”.equals(dataType)){
type=”NUMERIC”;
}
if(“boolean”.equals(dataType)){
type=”BOOLEAN”;
}
if(“byte”.equals(dataType)){
type=”TINYINT”;
}
if(“short”.equals(dataType)){
type=”SMALLINT”;
}
if(“int”.equals(dataType)){
type=”INTEGER”;
}
if(“Integer”.equals(dataType)){
type=”INTEGER”;
}
if(“long”.equals(dataType)){
type=”BIGINT”;
}
if(“float”.equals(dataType)){
type=”DOUBLE”;
}
if(“double”.equals(dataType)){
type=”DOUBLE”;
}
if(“Date”.equals(dataType)){
type=”DATE”;
}
if(“Time”.equals(dataType)){
type=”TIME”;
}
if(“Timestamp”.equals(dataType)){
type=”TIMESTAMP”;
}
return type;
}
}

 

6.NameUtil—名字处理工具类(文件名、变量名等)

 

package com.hwf.auto.util;

 

/**
* 名字处理工具类(文件名、变量名等)
* @author 
*
*/
public class NameUtil {

 

/**
* 处理文件名
* @param tableName 数据表表名
* @return
*/
public static String fileName(String tableName){
String fileName=””;
//获得表名
//去掉表名的下划线
String[] tablesName =tableName.split(“_”);
for (int j = 0; j < tablesName.length; j++) {
//将每个单词的首字母变成大写
tablesName[j]=tablesName[j].substring(0,1).toUpperCase()+tablesName[j].substring(1);
fileName +=tablesName[j].replace(“Tb”, “”);
}
return fileName;
}

/**
* 处理变量名(属性名)
* @param columnName 字段名称
* @return
*/
public static String columnName(String columnName){
//将字段名称user_name格式变成userName格式
String colName = “”;
//根据下划线将名字分为数组
String[] columnsName = columnName.split(“_”);
//遍历数组,将除第一个单词外的单词的首字母大写
for (int h = 0; h < columnsName.length; h++) {
for (int k = 1; k < columnsName.length; k++) {
columnsName[k]=columnsName[k].substring(0,1).toUpperCase()+columnsName[k].substring(1);
}
//拼接字符串以获得属性名(字段名称)
colName +=columnsName[h];
}
return colName;
}
}

 

7.ParamTypeUtil—mybatis的parameterType处理工具类

 

package com.hwf.auto.util;

 

/**
* mybatis的parameterType处理工具类
* @author 
*
*/
public class ParamTypeUtil {

 

public static String getParamType(String dataType){
String type=””;
if(“String”.equals(dataType)){
type=”java.lang.String”;
}
if(“BigDecimal”.equals(dataType)){
type=”java.math.BigDecimal”;
}
if(“boolean”.equals(dataType)){
type=”java.lang.Boolean”;
}
if(“byte”.equals(dataType)){
type=”java.lang.Byte”;
}
if(“short”.equals(dataType)){
type=”java.lang.Short”;
}
if(“int”.equals(dataType)){
type=”java.lang.Integer”;
}
if(“Integer”.equals(dataType)){
type=”java.lang.Integer”;
}
if(“long”.equals(dataType)){
type=”java.lang.Long”;
}
if(“float”.equals(dataType)){
type=”java.lang.Double”;
}
if(“double”.equals(dataType)){
type=”java.lang.Double”;
}
if(“Date”.equals(dataType)){
type=”java.util.Date”;
}
if(“Time”.equals(dataType)){
type=”java.sql.Time”;
}
if(“Timestamp”.equals(dataType)){
type=”java.sql.Timestamp”;
}
if(“List”.equals(dataType)){
type=”java.util.List”;
}
if(“Map”.equals(dataType)){
type=”java.util.Map”;
}
return type;
}
}

 

运行文件

 

package com.hwf.auto.main;

 

import com.hwf.auto.dao.BeanAutoDao;
import com.hwf.auto.dao.DaoAutoDao;
import com.hwf.auto.dao.MapperXmlAutoDao;
import com.hwf.auto.dao.ServiceAutoDao;
import com.hwf.auto.dao.ServiceImplAutoDao;
import com.hwf.auto.daoImpl.BeanAutoDaoImpl;
import com.hwf.auto.daoImpl.DaoAutoDaoImpl;
import com.hwf.auto.daoImpl.MapperXmlAutoDaoImpl;
import com.hwf.auto.daoImpl.ServiceAutoDaoImpl;
import com.hwf.auto.daoImpl.ServiceImplAutoDaoImpl;

 

public class MainRunner {

 

public void generateCode(){
//1.生成Bean实体类
BeanAutoDao beanAuto = new BeanAutoDaoImpl();
if(beanAuto.createBean()){
System.out.println(“所有Bean实体类生成成功”);
}else{
System.out.println(“所有Bean实体类生成失败”);
}
//2.生成Dao接口
DaoAutoDao daoAuto = new DaoAutoDaoImpl();
if(daoAuto.createDao()){
System.out.println(“所有Dao接口生成成功”);
}else{
System.out.println(“所有Dao接口生成失败”);
}
//3.生成Mapper.xml
MapperXmlAutoDao mapperXmlAuto=new MapperXmlAutoDaoImpl();
if(mapperXmlAuto.createMapperXml()){
System.out.println(“所有Mapper.xml生成成功”);
}else{
System.out.println(“所有Mapper.xml生成失败”);
}
//4.生成Service接口
ServiceAutoDao serviceAuto = new ServiceAutoDaoImpl();
if(serviceAuto.createService()){
System.out.println(“所有Service接口生成成功”);
}else{
System.out.println(“所有Service接口生成失败”);
}
//5.生成ServiceImpl实现类
ServiceImplAutoDao serviceImplAuto = new ServiceImplAutoDaoImpl();
if(serviceImplAuto.createServiceImpl()){
System.out.println(“所有ServiceImpl实现类生成成功”);
}else{
System.out.println(“所有ServiceImpl实现类生成失败”);
}
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

 

MainRunner mr=new MainRunner();
mr.generateCode();
}

 

}

 

目录结构 核心思想 通过properties文件获取数据源—…

目录结构

永利集团304com 6

 

核心思想

通过properties文件获取数据源—>获取数据表的字段名称、字段类型等—>生成相应的bean实体类(po、model)、dao接口(基本的增删改查)、mapper.xml(mybatis映射文件)、service、serviceImpl。

代码示例

properties配置文件

## 数据库连接参数
jdbc.driverClass = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/oa_system
jdbc.username = root
jdbc.password = 123456

##项目路径
projectPath = G:/project/SSMDemo

##是否生成Bean实体类
beanFlag=true

## 生成Bean实体类的包名
beanPackage=com.hwf.bean

##是否生成Dao接口
daoFlag=true

##生成Dao接口的包名
daoPackage=com.hwf.dao

##是否生成Mapper.xml
mapperXmlFlag=true

##生成Mapper.xml的包名
mapperXmlPackage=com.hwf.daoImpl

##是否生成Service接口
serviceFlag=true

##生成Service接口的包名
servicePackage=com.hwf.service

##是否生成ServiceImpl实现类
serviceImplFlag=true

##生成ServiceImpl实现类的包名
serviceImplPackage=com.hwf.serviceImpl

 

bean实体类

永利集团304com 7

1.数据表的表结构

package com.hwf.auto.bean;

import java.util.List;

/**
* 数据表的表结构
* @author 
*
*/
public class TableStruct {

private String tableName;//表名
private List Columns;//所有的列
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public List getColumns() {
return Columns;
}
public void setColumns(List columns) {
Columns = columns;
}
public TableStruct(String tableName, List columns) {
super();
this.tableName = tableName;
Columns = columns;
}
public TableStruct() {
super();
}
@Override
public String toString() {
return “TableStruct [tableName=” + tableName + “, Columns=” + Columns

  • “]”;
    }
    }

 

2.数据表的列结构

package com.hwf.auto.bean;

/**
* 数据表的列结构
* @author 
*
*/
public class ColumnStruct {

private String columnName;//字段名称
private String dataType;//字段类型
public String getColumnName() {
return columnName;
}
public void setColumnName(String columnName) {
this.columnName = columnName;
}
public String getDataType() {
return dataType;
}
public void setDataType(String dataType) {
this.dataType = dataType;
}
public ColumnStruct(String columnName, String dataType) {
super();
this.columnName = columnName;
this.dataType = dataType;
}
public ColumnStruct() {
super();
}
@Override
public String toString() {
return “ColumnStruct [columnName=” + columnName + “, dataType=”

  • dataType + “]”;
    }
    }

 

 

dao层接口方法及实现类

永利集团304com 8

 

永利集团304com 9

1.获取数据表及其结构

1>接口方法

package com.hwf.auto.dao;

import java.util.List;

/**
* 获取数据表及其结构的dao层接口
* @author 
*
*/
public interface GetTablesDao {

//获得数据库的所有表名
public List getTablesName();

//获得数据表中的字段名称、字段类型
public List getTablesStruct();
}

2>接口实现类

package com.hwf.auto.daoImpl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.hwf.auto.bean.ColumnStruct;
import com.hwf.auto.bean.TableStruct;
import com.hwf.auto.dao.GetTablesDao;
import com.hwf.auto.util.DataSourceUtil;

/**
* 获取数据表及其结构的dao层实现类
* @author 
*
*/
public class GetTablesDaoImpl extends DataSourceUtil implements
GetTablesDao {

//获得数据库的所有表名
@Override
public List getTablesName() {
List tables = new ArrayList();
String sql=”show tables”;
ResultSet rs=this.query(sql);
try {
while(rs.next()){
//将获得的所有表名装进List
tables.add(rs.getString(1));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return tables;
}

//获得数据表中的字段名称、字段类型
@Override
public List getTablesStruct() {
//获得装有所有表名的List
List tables =this.getTablesName();
String sqls =null;
//装所有的表结构(表名+字段名称+字段类型)
List tablesStruct = new ArrayList();
for (int i = 0; i < tables.size(); i++) {
sqls=”show columns from “+tables.get(i).toString();
ResultSet rs=this.query(sqls);
//装所有的列结构(字段名称+字段类型)
List list =new ArrayList();
try {
while(rs.next()){
ColumnStruct cs = new ColumnStruct(rs.getString(1),rs.getString(2));
//找到一列装进List
list.add(cs);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//遍历完一张表,封装成对象
TableStruct ts = new TableStruct(tables.get(i).toString(),list);
//将对象(一张表)装进集合
tablesStruct.add(ts);
}
return tablesStruct;
}
}

2.生成Bean实体类

1>接口方法

package com.hwf.auto.dao;

import com.hwf.auto.bean.TableStruct;

/**
* 生成Bean实体类的dao层接口
* @author 
*
*/
public interface BeanAutoDao {

//通过表名、字段名称、字段类型创建Bean实体
public boolean createBean();
}

2>接口实现类

package com.hwf.auto.daoImpl;

import java.util.ArrayList;
import java.util.List;

import com.hwf.auto.bean.ColumnStruct;
import com.hwf.auto.bean.TableStruct;
import com.hwf.auto.dao.BeanAutoDao;
import com.hwf.auto.dao.GetTablesDao;
import com.hwf.auto.util.ConfigUtil;
import com.hwf.auto.util.DataSourceUtil;
import com.hwf.auto.util.DataTypeUtil;
import com.hwf.auto.util.FileUtil;
import com.hwf.auto.util.NameUtil;

/**
* 生成Bean实体类的dao层实现类
* @author 
*
*/
public class BeanAutoDaoImpl implements BeanAutoDao {

//从GetTablesDaoImpl中获得装有所有表结构的List
GetTablesDao getTables = new GetTablesDaoImpl();
List<TableStruct> list = getTables.getTablesStruct();

//通过表名、字段名称、字段类型创建Bean实体
@Override
public boolean createBean() {
//获得配置文件的参数
//项目路径
String projectPath = ConfigUtil.projectPath;
//是否生成实体类
String beanFalg=ConfigUtil.beanFlag;
//Bean实体类的包名
String beanPackage=ConfigUtil.beanPackage;
//判断是否生成实体类
if(“true”.equals(beanFalg) ){
//将包名com.xxx.xxx形式,替换成com/xxx/xxx形成
String beanPath=beanPackage.replace(“.”, “/”);
//Bean实体类的路径
String path =projectPath+”/src/”+beanPath;
//遍历装有所有表结构的List
for (int i = 0; i < list.size(); i++) {
//文件名
String fileName=NameUtil.fileName(list.get(i).getTableName())+”Bean”;
//获得每个表的所有列结构
List<ColumnStruct> columns =list.get(i).getColumns();
//(实体类)文件内容
String packageCon =”package “+beanPackage+”;nn”;
StringBuffer importCon=new StringBuffer();
String className =”public class “+fileName+”{nn”;
StringBuffer classCon =new StringBuffer();
StringBuffer gettersCon = new StringBuffer();
StringBuffer settersCon = new StringBuffer();
StringBuffer noneConstructor =new StringBuffer();
StringBuffer constructor =new StringBuffer();
String constructorParam=””;
StringBuffer constructorCon=new StringBuffer();
//遍历List,将字段名称和字段类型写进文件
for (int j = 0; j < columns.size(); j++) {
//变量名(属性名)
String columnName
=NameUtil.columnName(columns.get(j).getColumnName());
//获得数据类型
String type = columns.get(j).getDataType();
//将mysql数据类型转换为java数据类型
String dateType =DataTypeUtil.getType(type);
//有date类型的数据需导包
if(“Date”.equals(dateType)){
importCon.append(“import java.util.Date;nn”);
}
//有Timestamp类型的数据需导包
if(“Timestamp”.equals(dateType)){
importCon.append(“import java.sql.Timestamp;nn”);
}

//生成属性
classCon.append(“t”+”private”+”t”+dateType+”t”+columnName+”;n”);
//get、set的方法名
String
getSetName=columnName.substring(0,1).toUpperCase()+columnName.substring(1);
//生成get方法
gettersCon.append(“t”+”public”+”t”+dateType+”t”+”get”+getSetName+”(){n”+
“tt”+”return”+”t”+columnName+”;n”+
“t”+”}n”);
//生成set方法
settersCon.append(“t”+”public
void”+”t”+”set”+getSetName+”(“+dateType+” “+columnName+”){n”+
“tt”+”this.”+columnName+” = “+columnName+”;n”+
“t”+”}n”);
//获得有参构造器参数
if(constructorParam==null||””.equals(constructorParam)){
constructorParam=dateType+” “+columnName;
}else{
constructorParam+=”,”+dateType+” “+columnName;
}
//获得有参构造器的内容
constructorCon.append(“tt”+”this.”+columnName+” =
“+columnName+”;n”);
}
//生成无参构造器
noneConstructor.append(“t”+”public”+”t”+fileName+”(){n”+
“tt”+”super();n”+
“t”+”}n”);
//生成有参构造
constructor.append(“t”+”public”+”
“+fileName+”(“+constructorParam+”){n”+
“tt”+”super();n”+constructorCon+
“t”+”}n”);
//拼接(实体类)文件内容
StringBuffer content=new StringBuffer();
content.append(packageCon);
content.append(importCon.toString());
content.append(className);
content.append(classCon.toString());
content.append(gettersCon.toString());
content.append(settersCon.toString());
content.append(noneConstructor.toString());
content.append(constructor.toString());
content.append(“}”);
FileUtil.createFileAtPath(path+”/”, fileName+”.java”,
content.toString());
}
return true;
}
return false;
}

}

3.生成Dao层接口**

1>接口方法

package com.hwf.auto.dao;

/**
* 生成Dao接口的dao层接口
* @author 
*
*/
public interface DaoAutoDao {

//通过表名、字段名称、字段类型创建Dao接口
public boolean createDao();
}

2>接口实现类

package com.hwf.auto.daoImpl;

import java.util.ArrayList;
import java.util.List;

import com.hwf.auto.bean.ColumnStruct;
import com.hwf.auto.bean.TableStruct;
import com.hwf.auto.dao.BeanAutoDao;
import com.hwf.auto.dao.DaoAutoDao;
import com.hwf.auto.dao.GetTablesDao;
import com.hwf.auto.util.ConfigUtil;
import com.hwf.auto.util.DataTypeUtil;
import com.hwf.auto.util.FileUtil;
import com.hwf.auto.util.NameUtil;

/**
* 生成Dao接口的dao层实现类
* @author 
*
*/
public class DaoAutoDaoImpl implements DaoAutoDao {

//从GetTablesDaoImpl中获得装有所有表结构的List
GetTablesDao getTables = new GetTablesDaoImpl();
List<TableStruct> list = getTables.getTablesStruct();

//通过表名、字段名称、字段类型创建Dao接口
@Override
public boolean createDao() {
//获得配置文件的参数
//项目路径
String projectPath = ConfigUtil.projectPath;
//是否生成Dao
String daoFalg=ConfigUtil.daoFlag;
//Dao接口的包名
String daoPackage=ConfigUtil.daoPackage;
//Bean实体类的包名
String beanPackage=ConfigUtil.beanPackage;
if(“true”.equals(daoFalg) ){
//将包名com.xxx.xxx形式,替换成com/xxx/xxx形成
String daoPath=daoPackage.replace(“.”, “/”);
//Dao接口的路径
String path =projectPath+”/src/”+daoPath;
//遍历装有所有表结构的List
for (int i = 0; i < list.size(); i++) {
//文件名
String fileName=NameUtil.fileName(list.get(i).getTableName())+”Dao”;
String beanName =NameUtil.fileName(list.get(i).getTableName())+”Bean”;
//获得每个表的所有列结构
List<ColumnStruct> columns =list.get(i).getColumns();
//变量名(属性名)
String columnName
=NameUtil.columnName(columns.get(0).getColumnName());
//获得数据类型
String type = columns.get(0).getDataType();
//将mysql数据类型转换为java数据类型
String dateType =DataTypeUtil.getType(type);

//(Dao接口)文件内容
String packageCon =”package “+daoPackage+”;nn”;
StringBuffer importCon=new StringBuffer();
String className =”public interface “+fileName+”{nn”;
StringBuffer classCon = new StringBuffer();

//生成导包内容
importCon.append(“import”+”t”+beanPackage+”.”+beanName+”;nn”);
//有date类型的数据需导包
if(“Date”.equals(dateType)){
importCon.append(“import java.util.Date;nn”);
}
//有Timestamp类型的数据需导包
if(“Timestamp”.equals(dateType)){
importCon.append(“import java.sql.Timestamp;nn”);
}
importCon.append(“import java.util.List;nn”);

//生成接口方法
classCon.append(“t”+”public int insertRecord(“+beanName+”
record);//添加一条完整记录nn”);
classCon.append(“t”+”public int insertSelective(“+beanName+”
record);//添加指定列的数据nn”);
classCon.append(“t”+”public int deleteById(“+dateType+”
“+columnName+”);//通过Id(主键)删除一条记录nn”);
classCon.append(“t”+”public int updateByIdSelective(“+beanName+”
record);//按Id(主键)修改指定列的值nn”);
classCon.append(“t”+”public int updateById(“+beanName+”
record);//按Id(主键)修改指定列的值nn”);
classCon.append(“t”+”public int
countRecord();//计算表中的总记录数nn”);
classCon.append(“t”+”public int countSelective(“+beanName+”
record);//根据条件计算记录条数nn”);
classCon.append(“t”+”public int maxId();//获得表中的最大Idnn”);
classCon.append(“t”+”public”+”t”+beanName+”t”+”selectById(“+dateType+”t”+columnName+”);//通过Id(主键)查询一条记录nn”);
classCon.append(“t”+”public List selectAll();//查询所有记录nn”);

//拼接(Dao接口)文件内容
StringBuffer content=new StringBuffer();
content.append(packageCon);
content.append(importCon.toString());
content.append(className);
content.append(classCon.toString());
content.append(“n}”);
FileUtil.createFileAtPath(path+”/”, fileName+”.java”,
content.toString());
}
return true;
}
return false;
}

}

4.生成Mapper.xml

1>接口方法

package com.hwf.auto.dao;

/**
* 生成Mapper.xml的dao层接口
* @author 
*
*/
public interface MapperXmlAutoDao {

//通过表名、字段名称、字段类型创建Mapper.xml
public boolean createMapperXml();
}

2>接口实现类

package com.hwf.auto.daoImpl;

import java.util.List;

import org.apache.commons.lang3.StringUtils;

import com.hwf.auto.bean.ColumnStruct;
import com.hwf.auto.bean.TableStruct;
import com.hwf.auto.dao.GetTablesDao;
import com.hwf.auto.dao.MapperXmlAutoDao;
import com.hwf.auto.util.ConfigUtil;
import com.hwf.auto.util.DataTypeUtil;
import com.hwf.auto.util.FileUtil;
import com.hwf.auto.util.JdbcTypeUtil;
import com.hwf.auto.util.NameUtil;
import com.hwf.auto.util.ParamTypeUtil;

/**
* 生成Mapper.xml的dao层实现类
* @author 
*
*/
public class MapperXmlAutoDaoImpl implements MapperXmlAutoDao {

//从GetTablesDaoImpl中获得装有所有表结构的List
GetTablesDao getTables = new GetTablesDaoImpl();
List<TableStruct> list = getTables.getTablesStruct();

//通过表名、字段名称、字段类型创建Mapper.xml
@Override
public boolean createMapperXml() {
//获得配置文件的参数
//项目路径
String projectPath = ConfigUtil.projectPath;
//是否生成Mapper.xml
String mapperXmlFalg=ConfigUtil.mapperXmlFlag;
//Mapper.xml的包名
String mapperXmlPackage=ConfigUtil.mapperXmlPackage;
//Bean实体类的包名
String beanPackage=ConfigUtil.beanPackage;
//Dao接口的包名
String daoPackage=ConfigUtil.daoPackage;
if(“true”.equals(mapperXmlFalg) ){
//将包名com.xxx.xxx形式,替换成com/xxx/xxx形成
String mapperXmlPath=mapperXmlPackage.replace(“.”, “/”);
//Mapper.xml的路径
String path =projectPath+”/src/”+mapperXmlPath;
//遍历装有所有表结构的List
for (int i = 0; i < list.size(); i++) {
//表名
String tableName =list.get(i).getTableName();

//文件名
String fileName=NameUtil.fileName(tableName)+”Mapper”;
String beanName =NameUtil.fileName(tableName)+”Bean”;
String daoName =NameUtil.fileName(tableName)+”Dao”;

//获得每个表的所有列结构
List<ColumnStruct> columns =list.get(i).getColumns();

//主键名
String beanIdName=NameUtil.columnName(columns.get(0).getColumnName());
String IdName = columns.get(0).getColumnName();
//主键类型
String IdType = DataTypeUtil.getType(columns.get(0).getDataType());
String IdParamType =ParamTypeUtil.getParamType(IdType);
String IdJdbcType = JdbcTypeUtil.getJdbcType(IdType);
if(IdJdbcType==”INT”||”INT”.equals(IdJdbcType)){
IdJdbcType=”INTEGER”;
}

//(Mapper.xml)文件内容
StringBuffer headCon = new StringBuffer();
headCon.append(“<?xml version=”1.0″ encoding=”UTF-8″
?>n”);
headCon.append(“<!DOCTYPE mapper PUBLIC “-//mybatis.org//DTD Mapper
3.0//EN” “”);
headCon.append(“<mapper
namespace=””+daoPackage+”.”+daoName+””>n”);

StringBuffer resultMapCon = new StringBuffer();
resultMapCon.append(“t”+”<resultMap id=”BaseResultMap”
type=””+beanPackage+”.”+beanName+””>n”);

StringBuffer baseColCon = new StringBuffer();
baseColCon.append(“t”+”<sql id=”Base_Column_List”>n”);

StringBuffer insertRecordCon = new StringBuffer();
insertRecordCon.append(“t”+”<insert id=”insertRecord”
parameterType=””+beanPackage+”.”+beanName+””>n”);
insertRecordCon.append(“tt”+”insert into “+tableName+”(“);

StringBuffer insertRecordCons = new StringBuffer();
insertRecordCons.append(“tt”+”values (“);

StringBuffer insertSelCon = new StringBuffer();
insertSelCon.append(“t”+”<insert id=”insertSelective”
parameterType=””+beanPackage+”.”+beanName+””>n”);
insertSelCon.append(“tt”+”insert into “+tableName+”n”);
insertSelCon.append(“tt”+”<trim prefix=”(” suffix=”)”
suffixOverrides=”,” >n”);

StringBuffer insertSelCons = new StringBuffer();
StringBuffer delByIdCon = new StringBuffer();
delByIdCon.append(“t”+”<delete id=”deleteById”
parameterType=””+IdParamType+””>n”);
delByIdCon.append(“tt”+”delete from “+tableName+” where “+IdName+”=
#{“+beanIdName+”,jdbcType=”+IdJdbcType+”}n”);
delByIdCon.append(“t”+”</delete>n”);

StringBuffer updateByIdSelCon = new StringBuffer();
updateByIdSelCon.append(“t”+”<update id=”updateByIdSelective”
parameterType=””+beanPackage+”.”+beanName+””>n”);
updateByIdSelCon.append(“tt”+”update
“+tableName+”n”+”tt”+”<set>n”);

StringBuffer updateByIdCon = new StringBuffer();
updateByIdCon.append(“t”+”<update id=”updateById”
parameterType=””+beanPackage+”.”+beanName+””>n”);
updateByIdCon.append(“tt”+”update “+tableName+” setn”);

StringBuffer countRecordCon = new StringBuffer();
countRecordCon.append(“t”+”<select id=”countRecord”
resultType=”java.lang.Integer”>n”);
countRecordCon.append(“tt”+”select count(*) from
“+tableName+”n”);
countRecordCon.append(“t”+”</select>n”);

StringBuffer countSelCon = new StringBuffer();
countSelCon.append(“t”+”<select id=”countSelective”
parameterType=””+beanPackage+”.”+beanName+””
resultType=”java.lang.Integer”>n”);
countSelCon.append(“tt”+”select count(*) from “+tableName+” where
1=1n”);

StringBuffer maxIdCon = new StringBuffer();
maxIdCon.append(“t”+”<select id=”maxId”
resultType=”java.lang.Integer”>n”);
maxIdCon.append(“tt”+”select max(“+IdName+”) from
“+tableName+”n”);
maxIdCon.append(“t”+”</select>n”);

StringBuffer selectByIdCon = new StringBuffer();
selectByIdCon.append(“t”+”<select id=”selectById”
parameterType=””+IdParamType+””
resultMap=”BaseResultMap”>n”);
selectByIdCon.append(“tt”+”selectn”+”tt”+”<include
refid=”Base_Column_List”/>n”);
selectByIdCon.append(“tt”+”from “+tableName+”n”+”tt”+”where
“+IdName+”= #{“+beanIdName+”,jdbcType=”+IdJdbcType+”}n”);
selectByIdCon.append(“t”+”</select>n”);

StringBuffer selectAllCon=new StringBuffer();
selectAllCon.append(“t”+”<select id=”selectAll”
resultMap=”BaseResultMap”>n”);
selectAllCon.append(“tt”+”select * from “+tableName+”n”);
selectAllCon.append(“t”+”</select>n”);

//遍历List,将字段名称和字段类型、属性名写进文件
for (int j = 0; j <columns.size(); j++) {
//字段名
String columnName =columns.get(j).getColumnName();
//属性(变量)名
String attrName =NameUtil.columnName(columns.get(j).getColumnName());
//字段类型
String type=DataTypeUtil.getType(columns.get(j).getDataType());;
String jdbcType =JdbcTypeUtil.getJdbcType(type);
if(jdbcType==”INT”||”INT”.equals(jdbcType)){
jdbcType=”INTEGER”;
}
if(j==0){
resultMapCon.append(“tt”+”<id column=””+columnName+””
property=””+attrName+”” jdbcType=””+jdbcType+””/>n”);
baseColCon.append(“tt”+columnName);
insertRecordCon.append(columnName);
insertRecordCons.append(“#{“+attrName+”,jdbcType=”+jdbcType+”}”);
}else{
resultMapCon.append(“tt”+”<result column=””+columnName+””
property=””+attrName+”” jdbcType=””+jdbcType+””/>n”);
baseColCon.append(“,”+columnName);
insertRecordCon.append(“,n”+”ttt”+columnName);
insertRecordCons.append(“,n”+”ttt”+”#{“+attrName+”,jdbcType=”+jdbcType+”}”);
updateByIdSelCon.append(“ttt”+”<if test=””+attrName+” !=
null”
>n”+”tttt”+columnName+”=”+”#{“+attrName+”,jdbcType=”+jdbcType+”},n”+”ttt”+”</if>n”);

if(j==columns.size()-1){
updateByIdCon.append(“ttt”+columnName+”=”+”#{“+attrName+”,jdbcType=”+jdbcType+”}n”);
}else{
updateByIdCon.append(“ttt”+columnName+”=”+”#{“+attrName+”,jdbcType=”+jdbcType+”},n”);
}
}
insertSelCon.append(“ttt”+”<if test=””+attrName+” != null”
>n”+”tttt”+columnName+”,n”+”ttt”+”</if>n”);
insertSelCons.append(“ttt”+”<if test=””+attrName+” != null”
>n”+”tttt”+”#{“+attrName+”,jdbcType=”+jdbcType+”}”+”,n”+”ttt”+”</if>n”);
countSelCon.append(“tt”+”<if test=””+attrName+” != null”
>n”+”ttt”+”and
“+columnName+”=”+”#{“+attrName+”,jdbcType=”+jdbcType+”}n”+”tt”+”</if>n”);

}
resultMapCon.append(“t”+”</resultMap>n”);
baseColCon.append(“nt”+”</sql>n”);
insertRecordCon.append(“)n”);
insertRecordCons.append(“)n”+” “+”</insert>n”);
insertSelCon.append(“tt”+”</trim>n”);
insertSelCon.append(“tt”+”<trim prefix=”values (”
suffix=”)” suffixOverrides=”,”>n”);
insertSelCons.append(“tt”+”</trim>n”);
insertSelCons.append(“t”+”</insert>n”);
updateByIdSelCon.append(“tt”+”</set>n”+”tt”+”where
“+IdName+”=
#{“+beanIdName+”,jdbcType=”+IdJdbcType+”}n”+”t”+”</update>n”);
updateByIdCon.append(“tt”+”where “+IdName+”=
#{“+beanIdName+”,jdbcType=”+IdJdbcType+”}n”+”t”+”</update>n”);
countSelCon.append(“t”+”</select>n”);

//拼接(Mapper.xml)文件内容
StringBuffer content=new StringBuffer();
content.append(headCon);
content.append(resultMapCon);
content.append(baseColCon);
content.append(insertRecordCon);
content.append(insertRecordCons);
content.append(insertSelCon);
content.append(insertSelCons);
content.append(delByIdCon);
content.append(updateByIdSelCon);
content.append(updateByIdCon);
content.append(countRecordCon);
content.append(countSelCon);
content.append(maxIdCon);
content.append(selectByIdCon);
content.append(selectAllCon);
content.append(“</mapper>”);

FileUtil.createFileAtPath(path+”/”, fileName+”.xml”,
content.toString());
}
return true;
}
return false;
}

}

5.生成Service接口

1>接口方法

package com.hwf.auto.dao;

/**
* 生成Service接口的dao层接口
* @author 
*
*/
public interface ServiceAutoDao {

//通过表名、字段名称、字段类型创建Service接口
public boolean createService();
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注