java数据库生成model_java 根据实体对象生成 增删改的SQL语句 ModelToSQL

package com.xxx.utils;

import java.lang.reflect.Field;

import java.lang.reflect.Modifier;

import java.util.List;

import java.util.Vector;

import org.apache.commons.lang3.reflect.FieldUtils;

public class ModelToSQL {

private Object target;

private String idName;

private Object idValue;

private SqlType currentType;

public enum SqlType {

INSERT, UPDATE, DELETE

}

public ModelToSQL(SqlType sqlType, Object target) {

this.target = target;

switch (sqlType) {

case INSERT:

currentType = SqlType.INSERT;

createInsert();

break;

case UPDATE:

currentType = SqlType.UPDATE;

createUpdate();

break;

case DELETE:

currentType = SqlType.DELETE;

createDelete();

break;

}

}

public ModelToSQL(Class> target) {

String tableName = getTableNameForClass(target);

getFields(target);

StringBuffer sqlBuffer = new StringBuffer();

sqlBuffer.append("DELETE FROM ").append(tableName).append(" WHERE ");

for (Field field : fields) {

if (!Modifier.isStatic(field.getModifiers())) {

ID id = field.getAnnotation(ID.class);

if (null != id) {

sqlBuffer.append(field.getName()).append("=?");

}

}

}

this.sqlBuffer = sqlBuffer.toString();

}

/**

* 创建跟删除

*/

private void createDelete() {

String tableName = getTableName();

getFields(target.getClass());

StringBuffer sqlBuffer = new StringBuffer();

sqlBuffer.append("DELETE FROM ").append(tableName).append(" WHERE ");

for (Field field : fields) {

if (!Modifier.isStatic(field.getModifiers())) {

ID id = field.getAnnotation(ID.class);

if (null != id) {

sqlBuffer.append(field.getName()).append(" = ? ");

param.add(readField(field));

}

}

}

System.err.println("delete:\t"+sqlBuffer.toString());

this.sqlBuffer = sqlBuffer.toString();

}

protected Object readField(Field field) {

try {

return FieldUtils.readField(field, target, true);

} catch (Exception e) {

throw new RuntimeException(currentType.name(), e);

}

}

/**

* 创建更新语句

*/

private void createUpdate() {

String tableName = getTableName();

getFields(target.getClass());

StringBuffer sqlBuffer = new StringBuffer();

sqlBuffer.append("UPDATE ").append(tableName).append(" SET ");

for (Field field : fields) {

if (!Modifier.isStatic(field.getModifiers())) {

ID id = field.getAnnotation(ID.class);

if (id == null) {

sqlBuffer.append(field.getName()).append("=? , ");

param.add(readField(field));

} else {

idName = field.getName();

idValue = readField(field);

}

}

}

sqlBuffer.replace(sqlBuffer.length()-2, sqlBuffer.length()-1, " ");

if (idName == null) {

throw new RuntimeException("not found of " + target.getClass() + "'s ID");

}

sqlBuffer.append(" WHERE ").append(idName).append("=?");

param.add(idValue);

System.err.println("update:\t"+sqlBuffer.toString());

this.sqlBuffer = sqlBuffer.toString();

}

/**

* 根据注解获取表名

*/

private String getTableName() {

String tableName = null;

Class> clazz = target.getClass();

tableName = getTableNameForClass(clazz);

return tableName;

}

private String getTableNameForClass(Class> clazz) {

String tableName;

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

if (null != table) {

tableName = table.name();

if ("".equalsIgnoreCase(tableName)) {

tableName = clazz.getSimpleName();

}

} else {

tableName = clazz.getSimpleName();

}

return tableName;

}

/**

* 创建插入语句

*/

private void createInsert() {

String tableName = getTableName();

getFields(target.getClass());

StringBuffer sqlBuffer = new StringBuffer();

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

for (Field field : fields) {

if (!Modifier.isStatic(field.getModifiers())) {

ID id = field.getAnnotation(ID.class);

if (id == null) {

sqlBuffer.append(field.getName()).append(",");

param.add(readField(field));

}

}

}

int length = sqlBuffer.length();

sqlBuffer.delete(length - 1, length).append(")values(");

int size = param.size();

for (int x = 0; x < size; x++) {

if (x != 0) {

sqlBuffer.append(",");

}

sqlBuffer.append("?");

}

sqlBuffer.append(")");

System.err.println("insert:\t"+sqlBuffer.toString());

this.sqlBuffer = sqlBuffer.toString();

}

private List param = new Vector();

private String sqlBuffer;

public List getParam() {

return param;

}

public String getSqlBuffer() {

return sqlBuffer;

}

public String getIdName() {

return idName;

}

public Object getIdValue() {

return idValue;

}

List fields = new Vector();

protected void getFields(Class> clazz) {

if (Object.class.equals(clazz)) {

return;

}

Field[] fieldArray = clazz.getDeclaredFields();

for (Field file : fieldArray) {

fields.add(file);

}

getFields(clazz.getSuperclass());

}

//创建注解,标识该model的table名

@java.lang.annotation.Target(value = { java.lang.annotation.ElementType.TYPE })

@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)

public @interface Table {

String name() default "";

}

//创建注解,标识该model的id字段

@java.lang.annotation.Target(value = { java.lang.annotation.ElementType.FIELD })

@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)

public @interface ID {

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值