maven
<dependency>
<groupId>javax
</groupId>
<artifactId>javaee-api
</artifactId>
<version>7.0
</version>
</dependency>
<dependency>
<groupId>mysql
</groupId>
<artifactId>mysql-connector-java
</artifactId>
<version>5.1.46
</version>
</dependency>
ColumnAttribute 类
public class ColumnAttribute {
private String columnName;
private String columType;
private int length;
private int scale;
private int isNullable;
private boolean isPK;
private String attributeName;
private String attributeType;
private String comment;
public String
getColumnName() {
return columnName;
}
public void setColumnName(String columnName) {
this.columnName = columnName;
}
public String
getColumType() {
return columType;
}
public void setColumType(String columType) {
this.columType = columType;
}
public int isNullable() {
return isNullable;
}
public void setNullable(
int isNullable) {
this.isNullable = isNullable;
}
public int getLength() {
return length;
}
public void setLength(
int length) {
this.length = length;
}
public int getScale() {
return scale;
}
public void setScale(
int scale) {
this.scale = scale;
}
public String
getAttributeName() {
return attributeName;
}
public void setAttributeName(String attributeName) {
this.attributeName = attributeName;
}
public String
getAttributeType() {
return attributeType;
}
public void setAttributeType(String attributeType) {
this.attributeType = attributeType;
}
public int getIsNullable() {
return isNullable;
}
public void setIsNullable(
int isNullable) {
this.isNullable = isNullable;
}
public boolean isPK() {
return isPK;
}
public void setPK(
boolean isPK) {
this.isPK = isPK;
}
public String
getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
}
ColumnMapAttribute 类
public class ColumnMapAttribute {
/**
* @param s1 数据库里的表名
* @return 去掉下划线并且第一个字母开始大写
*/
public static String
getBONameFormTable(String s1){
String tableName=
"";
String [] args=s1.split(
"_");
for(
int i=
0;i<args.length;i++){
String name=args[i];
if(name!=
null && !
"".equals(name)){
tableName=tableName+getStringFristUp(name);
}
}
return tableName;
}
/**
* @param s1 数据库里的字段
* @return 去掉下划线并且第二个字母开始大写
*/
public static String
getAttibutreNameFormColumn(String s1){
String columnName=
"";
String [] args=s1.split(
"_");
for(
int i=
0;i<args.length;i++){
String name=args[i];
if(name!=
null && !
"".equals(name)){
if(i==
0){
columnName=name.toLowerCase();
}
else{
columnName=columnName+getStringFristUp(name);
}
}
}
return columnName;
}
/**
* 字符串首字母转大写,其他小写
* @param s
* @return
*/
private static String
getStringFristUp(String s){
String result=
"";
if(s!=
null && !
"".equals(s)){
char[] chr=s.toCharArray();
for(
int i=
0;i<chr.length;i++) {
if(i==
0 && chr[i]>
96){
chr[i]-=
32;
}
if(i>
0 && chr[i]<
96){
chr[i]+=
32;
}
result=result+chr[i];
}
}
return result;
}
/**
* 字符串首字母转大写,其他不变
* @param s
* @return
*/
public static String
getFristUp(String s){
String result=
"";
if(s!=
null && !
"".equals(s)){
char[] chr=s.toCharArray();
for(
int i=
0;i<chr.length;i++) {
if(i==
0 && chr[i]>
96){
chr[i]-=
32;
}
result=result+chr[i];
}
}
return result;
}
/**
*
* @param columnType oracle字段类型
* @param size 长度
* @param scan 小数点后面位数 主要判断number类型
* @return
*/
public static String
getAttributeType(String columnType,
int size,
int scan){
String attributeType=
"";
if(
"VARCHAR2".equalsIgnoreCase(columnType)){
attributeType=
"String";
}
else if(
"CHAR".equalsIgnoreCase(columnType)){
attributeType=
"String";
}
else if(
"NUMBER".equals(columnType)){
if(scan>
0){
attributeType=
"double";
}
else{
if(size<=
8){
attributeType=
"int";
}
else{
attributeType=
"int";
}
}
}
else if(
"DATE".equals(columnType)){
attributeType=
"Date";
}
else if(
"BIGINT".equalsIgnoreCase(columnType)){
attributeType=
"Long";
}
else if(
"INTEGER".equalsIgnoreCase(columnType)){
attributeType=
"Integer";
}
else if(
"TINYINT".equalsIgnoreCase(columnType)){
attributeType=
"Integer";
}
else if(
"INT".equalsIgnoreCase(columnType)){
attributeType=
"Integer";
}
else if(
"varchar".equalsIgnoreCase(columnType)){
attributeType=
"String";
}
else if(
"timestamp".equalsIgnoreCase(columnType)){
attributeType=
"Date";
}
else if(
"decimal".equalsIgnoreCase(columnType)){
attributeType=
"Double";
}
else if(
"datetime".equalsIgnoreCase(columnType)){
attributeType=
"Date";
}
else if(
"boolean".equalsIgnoreCase(columnType)){
attributeType=
"Boolean";
}
else if(
"double".equalsIgnoreCase(columnType)){
attributeType=
"Double";
}
return attributeType;
}
public static void main(String args[]){
String s=
"DsFFDSFDFdsad";
String s2=getStringFristUp(s);
System.out.println(s2);
}
}
TableEntity 类
import java.util.List;
/**
* 表的映射实体
* @author Administrator
*
*/
public class TableEntity {
private String tableName;
private String boName;
private String primaryKeyName;
private String primaryIdName;
private List columnAttributes;
private List importClassList;
private String comment;
public TableEntity() {
super();
}
public String
getBoName() {
return boName;
}
public void setBoName(String boName) {
this.boName = boName;
}
public List
getColumnAttributes() {
return columnAttributes;
}
public void setColumnAttributes(List columnAttributes) {
this.columnAttributes = columnAttributes;
}
public List
getImportClassList() {
return importClassList;
}
public void setImportClassList(List importClassList) {
this.importClassList = importClassList;
}
public String
getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String
getPrimaryIdName() {
return primaryIdName;
}
public void setPrimaryIdName(String primaryIdName) {
this.primaryIdName = primaryIdName;
}
public String
getPrimaryKeyName() {
return primaryKeyName;
}
public void setPrimaryKeyName(String primaryKeyName) {
this.primaryKeyName = primaryKeyName;
}
public String
getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
}
TableToEntityMysql 类
import java.io.*;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* mysql自动生成
*/
public class TableToEntityMysql{
/** 数据库连接URL*/
private final static String DB_URL =
"jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8";
/** 数据库连接驱动*/
private final static String DB_DRIVER =
"com.mysql.jdbc.Driver";
/** 数据库用户名*/
private final static String DB_USERNAME =
"root";
/** 数据库密码*/
private final static String DB_PASSWORD =
"123456";
/** 生成java实体类存放目录*/
private final static String FILEDIR =
"D:\\beans_sharding_jdbc";
/**
* 生成bean前需修改的值
*/
/**数据库名称**/
public static String db_name=
"test";
/**要生成bean的表名**/
public static String table_name=
"user";
/**生成的bean类package值**/
public static String java_package_path=
"com.zhao.entity";
/**功能:主调方法
* @param args
* @author zhaoy
* @date 2017年11月2日
*/
public static void main(String[] args) {
String[] tableArr={
"user",
};
exportBeansBatch(tableArr);
}
/**
* <p class="detail">
* 功能:数据库表批量生成bean
* </p>
* @author zhaoy
* @date 2017年11月2日
* @param tableNameArr 数据库表名字符串数组
*/
public static void exportBeansBatch(String tableNameArr[]){
for(
int i=
0; tableNameArr!=
null && i<tableNameArr.length; i++){
try{
exportJava(tableNameArr[i],java_package_path);
}
catch(Exception e){
System.out.println(
"第"+i+
"个Bean生成失败,表名:"+tableNameArr[i]);
e.printStackTrace();
}
}
try {
Runtime.getRuntime().exec(
"explorer "+FILEDIR);
}
catch (IOException e) {
e.printStackTrace();
}
}
/**
* <p class="detail">
* 功能:根据表名称单个生成bean实体类
* </p>
* @author zhaoy
* @date 2017年11月2日
* @param tableName 数据库表名
* @param packageName 生成的bean类顶部包路径(package后面部分)
*/
public static void exportJava(String tableName,String packageName){
System.out.println(tableName+
"表对应的bean正在生成...");
TableEntity entity=getTableEntity(tableName);
String boName=entity.getBoName();
List columnAttributes=entity.getColumnAttributes();
StringBuffer buffer =
new StringBuffer();
String filePath=FILEDIR+
"//"+boName+
".java";
try {
if(packageName==
null ||
"".equals(packageName)){
buffer.append(
"\n");
}
else{
buffer.append(
"package "+packageName+
";\n");
}
buffer.append(
"import javax.persistence.Column;\n");
buffer.append(
"import static javax.persistence.GenerationType.IDENTITY;\n");
buffer.append(
"import javax.persistence.Entity;\n");
buffer.append(
"import javax.persistence.GeneratedValue;\n");
buffer.append(
"import javax.persistence.Id;\n");
buffer.append(
"import javax.persistence.Table;\n");
buffer.append(
"import java.util.Date;\n");
buffer.append(
"\n@Entity\n");
buffer.append(
"@Table(name =\" "+tableName+
"\")\n");
buffer.append(
" public class "+boName+
" implements java.io.Serializable{\n");
writeBOMessage(buffer,entity);
writeSetGet(buffer,columnAttributes);
buffer.append(
"}\n");
File beanDir=
new File(FILEDIR);
if(!beanDir.isDirectory()){
beanDir.mkdir();
}
File beanFile=
new File(filePath);
if(!beanFile.exists()){
beanFile.createNewFile();
}
OutputStreamWriter out =
new OutputStreamWriter(
new FileOutputStream(filePath),
"UTF-8");
out.write(buffer.toString());
out.flush();
out.close();
System.out.println(tableName+
"表对应的bean生成成功:"+filePath);
}
catch (IOException e) {
e.printStackTrace();
}
}
/**
* 功能:获取数据库所有表名
* @param tableName
* @return
* @author zhaoy
* @date 2017年11月2日
*/
public static TableEntity
getTableEntity(String tableName){
TableEntity entity=
new TableEntity();
List columnAttributes=
new ArrayList();
PreparedStatement pstm=
null;
Connection con=
null;
ResultSetMetaData rsm=
null;
String sql=
"SELECT * FROM "+tableName+
" limit 0,1";
try {
con=getConnection();
DatabaseMetaData dbMeta = con.getMetaData();
ResultSet pkRSet=dbMeta.getPrimaryKeys(
null,
null,tableName);
String primaryKey=
"";
while(pkRSet.next()){
primaryKey=pkRSet.getString(
4);
break;
}
entity.setPrimaryKeyName(primaryKey);
entity.setPrimaryIdName(ColumnMapAttribute.getAttibutreNameFormColumn(primaryKey));
pstm = con.prepareStatement(sql);
pstm.executeQuery();
rsm=pstm.getMetaData();
for(
int i=
1;i<=rsm.getColumnCount();i++){
ColumnAttribute columnAttribute=
new ColumnAttribute();
String columnName=rsm.getColumnName(i);
columnAttribute.setColumnName(columnName);
if(columnName.equals(primaryKey)){
columnAttribute.setPK(
true);
}
else{
columnAttribute.setPK(
false);
}
String columnType=rsm.getColumnTypeName(i);
if(
"CLOB".equals(columnType)){
continue;
}
columnAttribute.setColumType(columnType);
int columnSize=rsm.getPrecision(i);
columnAttribute.setLength(columnSize);
int scale=rsm.getScale(i);
columnAttribute.setScale(scale);
int isNullable=rsm.isNullable(i);
columnAttribute.setNullable(isNullable);
columnAttribute.setAttributeName(ColumnMapAttribute.getAttibutreNameFormColumn(columnName));
columnAttribute.setAttributeType(ColumnMapAttribute.getAttributeType(columnType,columnSize,scale));
String coments=getColumnComments(con,tableName,columnName);
columnAttribute.setComment(coments);
columnAttributes.add(columnAttribute);
}
entity.setBoName(ColumnMapAttribute.getBONameFormTable(tableName));
entity.setColumnAttributes(columnAttributes);
}
catch (SQLException e) {
e.printStackTrace();
}
finally{
}
return entity;
}
/**
* 功能:获得字段说明
* @param con
* @param tableName
* @param columnName
* @return
* @throws SQLException
* @author zhaoy
* @throws Exception
* @date 2017年11月2日
*/
private static String
getColumnComments(Connection con, String tableName, String columnName)
throws SQLException {
String sql=
"SELECT t.`TABLE_NAME`,t.`COLUMN_NAME`,t.`COLUMN_COMMENT` FROM information_schema.columns t WHERE t.`TABLE_SCHEMA`='"+db_name+
"' AND t.table_name='"+tableName+
"' and t.`COLUMN_NAME`='"+columnName+
"' ORDER BY t.table_schema,t.table_name";
PreparedStatement pstm=con.prepareStatement(sql);
ResultSet rt = pstm.executeQuery();
String colDesc=
"";
if(rt.next()){
colDesc=rt.getString(
3);
}
return colDesc;
}
/**
* 功能:创建文件夹并返回写入此文件的FileWriter对象
* @param name
* @return
* @author zhaoy
* @date 2017年11月2日
*/
private static FileWriter
createFile(String name){
File dir=
new File(FILEDIR);
if(!dir.exists()){
dir.mkdirs();
}
String fileName=FILEDIR+
"//"+name+
".java";
System.out.println(fileName);
File file=
new File(fileName);
FileWriter writer=
null;
try {
if(!file.exists()){
file.createNewFile();
}
writer=
new FileWriter(file);
}
catch (IOException e) {
e.printStackTrace();
}
return writer;
}
/**
* 功能:写入字段定义及构造函数-默认无参数,全部参数2个
* @param writer
* @param entity
* @throws IOException
* @author zhaoy
* @date 2017年11月2日
*/
private static void writeBOMessage(StringBuffer writer,TableEntity entity)
throws IOException{
String boName=entity.getBoName();
String paimaryIdName=entity.getPrimaryIdName();
String parimaryIdType=
"";
List columnAttributes=entity.getColumnAttributes();
for(
int i=
0;columnAttributes!=
null && i<columnAttributes.size();i++){
writer.append(
"\n");
ColumnAttribute columnAttribute=(ColumnAttribute)columnAttributes.get(i);
if(paimaryIdName!=
null && paimaryIdName.equals(columnAttribute.getAttributeName())){
parimaryIdType=columnAttribute.getAttributeType();
}
writer.append(
" /** "+columnAttribute.getComment()+
" */\n");
writer.append(
" private "+columnAttribute.getAttributeType()+
" "+columnAttribute.getAttributeName()+
";\n");
}
writer.append(
"\n");
writer.append(
" public "+boName+
" (){\n");
writer.append(
" super(); \n }\n");
if(paimaryIdName!=
null && !paimaryIdName.equals(
"")){
writer.append(
" public "+boName+
"("+parimaryIdType+
" "+paimaryIdName+
"){\n");
writer.append(
" this."+paimaryIdName+
"="+paimaryIdName+
";\n");
writer.append(
" }\n");
}
}
/**
* 功能:bo类set和get方法的生成,包括各个属性
* @param writer
* @param columnAttributes
* @throws IOException
* @author zhaoy
* @date 2017年11月2日
*/
private static void writeSetGet(StringBuffer writer,List columnAttributes)
throws IOException{
for(
int i=
0;i<columnAttributes.size();i++){
writer.append(
"\n");
ColumnAttribute columnAttribute=(ColumnAttribute)columnAttributes.get(i);
String attributeName=columnAttribute.getAttributeName();
String attributeNameUP=ColumnMapAttribute.getFristUp(attributeName);
String attributeType=columnAttribute.getAttributeType();
if(((ColumnAttribute)columnAttributes.get(i)).isPK()){
writer.append(
"\t @Id\n");
writer.append(
"\t @GeneratedValue(strategy = IDENTITY)\n");
writer.append(
"\t @Column(name = \"id\", unique = true, nullable = false)\n");
}
else{
writer.append(
"\t @Column(name =\""+((ColumnAttribute)columnAttributes.get(i)).getColumnName()+
"\")\n");
}
writer.append(
" public "+attributeType+
" get"+attributeNameUP+
"(){\n");
writer.append(
" return this."+attributeName+
";\n");
writer.append(
" }");
writer.append(
"\n");
writer.append(
" public void set"+attributeNameUP+
"("+attributeType+
" "+attributeName+
"){\n");
writer.append(
" this."+attributeName+
"="+attributeName+
";\n");
writer.append(
" }");
writer.append(
"\n");
}
}
/**
* 功能:关闭数据库链接
* @param stmt
* @param rt
* @param dbConn
* @author zhaoy
* @date 2017年11月2日
*/
public static void closeConn(Statement stmt,ResultSet rt,Connection dbConn){
try {
if(stmt!=
null && stmt.isClosed()){
stmt.close();
}
if(rt!=
null && rt.isClosed()){
rt.close();
}
if(dbConn!=
null && dbConn.isClosed()){
dbConn.close();
}
}
catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 功能:获得数据库链接
* @return
* @author zhaoy
* @date 2017年11月2日
*/
public static Connection
getConnection(){
Connection conn =
null;
try{
Class.forName(DB_DRIVER);
conn = DriverManager.getConnection(DB_URL,DB_USERNAME,DB_PASSWORD);
}
catch(Exception ex){
ex.printStackTrace();
}
return conn;
}
}