java自动生成sql_java利用反射进行简单的自动sql生成

对于一些初学者,写sql语句也许是一件麻烦的事情,今天我们做一个小工具,可以自动生成一些简单的sql语句.

首先我们要获取一个模型的类名,方法如下:

public static String getModelName(Object obj) {

String objAllName = obj.getClass().getName();

String objName = "";

if (objAllName.contains(".")) {

objName = objAllName.substring(objAllName.lastIndexOf('.') + 1);

return objName;

}

return objAllName;

}

我们需要记录每个模型所拥有的字段,以及每个字段的类型,我们创建两个对象parameterNames,parameterType如下

public static Map> parameterNames = new HashMap>();

public static Map> parameterType = new HashMap>();

接下来我们根据模型来获取类属性名和属性类型,代码如下:

public static void registerModel(Object obj) {

String objName = getModelName(obj);

if (parameterNames.containsKey(objName)) {

System.out.println("the model " + objName + " already register");

return;

}

Field[] fields = obj.getClass().getDeclaredFields();

List paraList = new ArrayList();

HashMap typeMap = new HashMap();

for (Field field : fields) {

paraList.add(field.getName());

String typeName = field.getType().getName();

if (typeName.contains(".")) {

typeName = typeName.substring(typeName.lastIndexOf('.') + 1);

}

typeMap.put(field.getName(), typeName);

}

parameterNames.put(objName, paraList);

parameterType.put(objName, typeMap);

}

有了上面的这些信息我们就可以组装sql语句了,例如是我简单的select语句

public static String getSimpleSelectSql(String tableName) {

String sql = "select ";

List parameters = parameterNames.get(tableName);

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

if (i == parameters.size() - 1) {

sql += parameters.get(i) + " ";

} else {

sql += parameters.get(i) + ", ";

}

}

return sql + "from " + tableName;

}

生成简单的insert语句

public static String getInsertSql(String tableName) {

long l1 = System.currentTimeMillis();

String sql = "insert into " + tableName + "(";

List paramList = ORMUtil.parameterNames.get(tableName);

String cs = "";

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

if (paramList.get(i) == "id") {

continue;

}

if (i == paramList.size() - 1) {

sql += paramList.get(i) + " ";

cs += "? ";

} else {

sql += paramList.get(i) + ", ";

cs += "?, ";

}

}

long l2 = System.currentTimeMillis();

System.out.println("insert sql-->" + (l2 - l1));

return sql + ") values(" + cs + ")";

}

parameterType是属性类型,当我们需要从数据库中读取数据的时候我们会使用到它!

欢迎加入java技术分享群: 215072056

获取更多java技术请关注异常帮助网

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值