sql 生成java代码_JAVA自定义注解实现SQL语句自动生成DEMO

package com.ucky.annotation.hibernate;

import java.lang.reflect.Field;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

/**

* 生成建表语句

*/

public class SqlUtil {

/*

* 生成创建table语句

* */

public static String create(Class> clazz) {

StringBuilder sb = new StringBuilder();

String tableName = getTableName(clazz);

if (null == tableName || "".equals(tableName)) {

return null;

}

sb.append("CREATE TABLE ").append(tableName).append("(");

Map columnMap = getColumn(clazz);

for (Map.Entry entry : columnMap.entrySet()) {

sb.append(entry.getKey());

sb.append(" ");

sb.append(entry.getValue());

sb.append(",");

}

sb.deleteCharAt(sb.length() - 1);

sb.append(")");

return sb.toString();

}

/*

* 生成插入语句

* */

public static String insert(Class> clazz) {

StringBuilder sb = new StringBuilder();

String tableName = getTableName(clazz);

sb.append("INSERT INTO ").append(tableName).append(" (");

Map columnMap = getColumn(clazz);

for (Map.Entry entry : columnMap.entrySet()) {

sb.append(entry.getKey());

sb.append(",");

}

sb.deleteCharAt(sb.length() - 1);

sb.append(") ").append("VALUES").append("(");

for (int i = 0; i < columnMap.size(); i++) {

sb.append("?").append(",");

}

sb.deleteCharAt(sb.length() - 1);

sb.append(")");

return sb.toString();

}

public static String delete() {

return null;

}

/*

* 获取表名称

* */

public static String getTableName(Class> clazz) {

//判断是否为Table注释类型是方法返回true,否则返回false

if (clazz.isAnnotationPresent(Table.class)) {

//获取注解信息

Table table = clazz.getAnnotation(Table.class);

if(!"".equals(table.name())){

return table.name();

}

}

return null;

}

/*

* 获取字段信息的Map

* */

public static Map getColumn(Class> clazz) {

Map columns = new HashMap();

//通过反射取得所有Field,因为table那里是注解指定的注解,类型,column是对应方法上的所以不能class.isAnnotationPresent直接判断

Field[] fields = clazz.getDeclaredFields();

if (fields != null) {

String columnName, type;

Column column;

for (int i$ = 0; i$ < fields.length; i$++) {

//判断当前field是否为Column注解

if (fields[i$].isAnnotationPresent(Column.class)) {

//获取注解对象

column = fields[i$].getAnnotation(Column.class);

columnName = column.name();

if("".equals(columnName)){

throw new RuntimeException("未找到对应字段名:" + i$);

}

//根据不同类型生成不同的SQL

if (int.class.isAssignableFrom(fields[i$].getType())) {

type = "int";

} else if (String.class.isAssignableFrom(fields[i$].getType())) {

type = "String";

} else if (Date.class.isAssignableFrom(fields[i$].getType())) {

type = "Date";

} else {

throw new RuntimeException("不支持数据类型:" + fields[i$].getType().getSimpleName());

}

type += (column.isNull() ? " " : " NOT NULL");

columns.put(columnName, type);

} else if (fields[i$].isAnnotationPresent(PrimaryKey.class)) {

PrimaryKey primaryKey = fields[i$].getAnnotation(PrimaryKey.class);

//将一个类的成员变量置为private,其实我也不知道啥意思,有知道的指点一下 ,谢谢!

fields[i$].setAccessible(true);

columnName = primaryKey.name();

if("".equals(columnName)){

throw new RuntimeException("未找到对应主键名" );

}

type = "INT PRIMARY KEY AUTO_INCREMENT";

columns.put(columnName, type);

}

}

}

return columns;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值