package com.utils.database;
import java.io.*;
import java.sql.*;
import java.util.*;
/**
*
* @author 聂长安
*
*/
public class CreatEntity {
private static final String driver = "com.mysql.jdbc.Driver";
private static final String url = "jdbc:mysql://127.0.0.1:3306/petshop?useUnicode=true&characterEncoding=UTF-8";
private static final String user = "niechangan";
private static final String pwd = "root";
private static String PACKAGENAME = "com.changan.entity";
private static Connection conn = null;
private CreatEntity(){}
public static Connection getConnection() throws ClassNotFoundException, SQLException{
if(conn == null){
Class.forName(driver);
conn = DriverManager.getConnection(url, user, pwd);
System.out.println("数据库连接已建立");
}
return conn;
}
public static void query(String sql) throws ClassNotFoundException, SQLException{
conn = getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
System.out.println(rs.getString(1));
}
}
public static List<Object> getAllTableName() throws ClassNotFoundException, SQLException{
conn = getConnection();
List<Object> tables = new ArrayList<Object>();
DatabaseMetaData metaData = conn.getMetaData();
String [] types = {"TABLE"};
ResultSet rs = metaData.getTables(null, null, null, types);
while (rs.next()) {
tables.add(rs.getObject("TABLE_NAME"));
}
return tables;
}
public static List<Column> getColumnFromTable(String tableName) throws ClassNotFoundException, SQLException{
conn = getConnection();
ResultSet rs = conn.getMetaData().getColumns(null, "%", tableName, "%");
List<Column> result = new ArrayList<Column>();
while(rs.next()){
Column c = new Column();
c.setName(rs.getString("COLUMN_NAME"));
c.setType(rs.getString("TYPE_NAME"));
c.setAutoincrement(rs.getString("IS_AUTOINCREMENT").equals("YES") ? true : false);
c.setRemark(rs.getString("REMARKS"));
result.add(c);
}
return result;
}
public static void writeFile(String str, String destPath) throws IOException{
FileOutputStream out = null;
out = new FileOutputStream(new File(destPath),true);
out.write(str.getBytes("UTF-8"));
out.close();
}
public static String getColumnTypeRelation(String type){
if (ColumnType.BIGINT.equals(type)) {
return DataType.LONG;
}else if(ColumnType.DOUBLE.equals(type)){
return DataType.DOUBLE;
}else if(ColumnType.DATETIME.equals(type)){
return DataType.DATETIME;
}else if(ColumnType.INT.equals(type)){
return DataType.INTEGER;
}else if(ColumnType.SMALLINT.equals(type)){
return DataType.INTEGER;
}else if(ColumnType.VARCHAR.equals(type)){
return DataType.STRING;
}else if(ColumnType.CHAR.equals(type)){
return DataType.CHAR;
}else if(ColumnType.TIMESTAMP.equals(type)){
return DataType.TIMESTAMP;
}
return null;
}
/**
* 自动将数据库中的实体类映射成Entity
* @param packageName 包名
* @param tableName 表名
* @param useAnnotation 是否启用注解
* @param destPath 目标路径
* @throws ClassNotFoundException
* @throws SQLException
* @throws IOException
*/
public static void createEneityClass(String packageName, String tableName, boolean useAnnotation, String destPath) throws ClassNotFoundException, SQLException, IOException{
List<Column> columns = getColumnFromTable(tableName);
StringBuilder sb = new StringBuilder();
//包名
sb.append("package " + packageName + ";\n\n");
//导包
sb.append("import java.util.Date;\n\n");
/*if (useAnnotation) {
sb.append("import javax.persistence.*;\n\n");
}*/
//创建class
/*if (useAnnotation) {
sb.append("@Entity\n");
sb.append("@Table(name = \"" + tableName.toUpperCase() + "\")\n");
}*/
String formatTblName = formatName(tableName, true);
sb.append("public class " + formatTblName + "{\n");
writeFile(sb.toString(), destPath);
for (Column c : columns) {
String dataType = getColumnTypeRelation(c.getType());
String remark = c.getRemark();
String columnName = c.getName();
String name = formatName(c.getName(), false);
String upperName = formatName(c.getName(), true);
boolean isAutoincrement = c.isAutoincrement();
sb = new StringBuilder();
//remark
// if (remark != null) {
// sb.append("\t/**\n");
// sb.append("\t *" + remark + "\n");
// sb.append("\t */\n");
// }
//注解
/*if(useAnnotation){
//自增
if(isAutoincrement){
sb.append("\t@Id\n");
sb.append("\t@Column(name = \"ID\")\n");
sb.append("\t@GeneratedValue(strategy = GenerationType.AUTO)\n");
}else{
sb.append("\t@Column(name = \"" + columnName + "\")\n");
}
}*/
//
sb.append("\tprivate ");
sb.append(dataType + " ");
sb.append(name + ";\n");
//get、set
sb.append("\tpublic " + dataType + " get" + upperName + "(){\n");
sb.append("\t\treturn " + name + ";\n");
sb.append("\t}\n");
sb.append("\tpublic void set" + upperName + "(" + dataType + " " + name + "){\n");
sb.append("\t\tthis." + name + " = " + name + ";\n");
sb.append("\t}\n");
writeFile(sb.toString(), destPath);
}
writeFile("}", destPath);
}
/**
* 将ColumnName按照驼峰命名法命名
* @param name
* @param firstUpperCase 首字母是否大写
* @return
*/
public static String formatName(String name, Boolean firstUpperCase){
if(name.indexOf("_") != -1){
String [] split = name.split("_");
String result = "";
for(String str : split){
result += str.toLowerCase().substring(0,1).toUpperCase() + str.toLowerCase().substring(1);
}
return firstUpperCase ? result : result.substring(0,1).toLowerCase() + result.substring(1);
}
return firstUpperCase ? name.substring(0,1).toUpperCase() + name.substring(1).toLowerCase() : name.toLowerCase();
}
public static void main(String[] args) {
File file = new File("myDir");
if (file.exists()) {
removedir(file);
}
if (!file.exists()) {
file.mkdir();
}
try {
List<Object> tables = getAllTableName();
for (Object tblName : tables) {
String name = String.valueOf(tblName);
String destPath = file.getAbsolutePath()+"\\" + formatName(name, true) + ".java";
//String destPath = "E:\\JAVA测试\\" + formatName(name, true) + ".java";
createEneityClass(PACKAGENAME, name, true, destPath);
}
} catch (ClassNotFoundException | SQLException | IOException e) {
e.printStackTrace();
}
}
private static void removedir(File file) {
File[] files=file.listFiles();
for(File f:files)
{
if(f.isDirectory())//递归调用
{
removedir(f);
}
else {
f.delete();
}
}
//一层目录下的内容都删除以后,删除掉这个文件夹
file.delete();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
实体映射.zip (29个子文件)
实体映射
.project 388B
src
com
utils
database
Column.java 716B
CreatEntity.java 7KB
ColumnType.java 551B
DataType.java 521B
changan
entity
Grade.java 369B
Txl.java 376B
Result.java 699B
Txl2.java 377B
Subject.java 685B
Student.java 2KB
myDir
Grade.java 369B
Txl.java 376B
Result.java 699B
Txl2.java 377B
Subject.java 685B
Student.java 2KB
.settings
org.eclipse.jdt.core.prefs 598B
.classpath 425B
bin
com
utils
database
DataType.class 576B
Column.class 1KB
CreatEntity.class 8KB
ColumnType.class 557B
changan
entity
Txl2.class 731B
Result.class 1KB
Grade.class 751B
Student.class 2KB
Txl.class 728B
Subject.class 1KB
共 29 条
- 1
资源评论
聂长安
- 粉丝: 162
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功