Java写一个工具类生成mysql insert 语句
时间: 2023-11-22 16:53:27 浏览: 40
可以参考以下的Java代码:
```java
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public class MysqlInsertGenerator<T> {
private Class<T> clazz;
public MysqlInsertGenerator(Class<T> clazz) {
this.clazz = clazz;
}
public String generateInsertStatement(T object, String tableName) throws IllegalAccessException {
StringBuilder sb = new StringBuilder();
sb.append("INSERT INTO ").append(tableName).append(" (");
List<Field> fields = getFields();
for (int i = 0; i < fields.size(); i++) {
sb.append(fields.get(i).getName());
if (i != fields.size() - 1) {
sb.append(", ");
}
}
sb.append(") VALUES (");
for (int i = 0; i < fields.size(); i++) {
Field field = fields.get(i);
field.setAccessible(true);
Object value = field.get(object);
if (value == null) {
sb.append("NULL");
} else if (value instanceof String) {
sb.append("'").append(value).append("'");
} else {
sb.append(value);
}
if (i != fields.size() - 1) {
sb.append(", ");
}
}
sb.append(");");
return sb.toString();
}
private List<Field> getFields() {
List<Field> fields = new ArrayList<>();
Class<?> current = clazz;
while (current != null) {
for (Field field : current.getDeclaredFields()) {
fields.add(field);
}
current = current.getSuperclass();
}
return fields;
}
}
```
使用方法:
```java
public static void main(String[] args) throws IllegalAccessException {
User user = new User();
user.setId(1);
user.setUsername("john");
user.setPassword("123456");
user.setAge(20);
MysqlInsertGenerator<User> generator = new MysqlInsertGenerator<>(User.class);
String sql = generator.generateInsertStatement(user, "user");
System.out.println(sql);
}
```
其中,`User` 是一个实体类,对应了数据库中的 `user` 表。该工具类可以将一个实体类转换为对应的 MySQL 插入语句。
需要注意的是,该工具类只适用于简单的实体类,如果实体类中存在复杂类型(如 List、Map 等),则需要进行特殊处理。同时,该工具类也没有考虑 SQL 注入等安全问题,使用时需要注意。