在上一篇里,我们已经取到了我们在生成sql语句中所需要的信息,这一篇里我们开始根据class来生成我们需要的sql。在这之前我们先确认几件事情
我们主要解决的是增删该查的问题,所以我们先写如何生成一个新增的sql。
我么先观察一下sql一般来说都有什么构成。现在先放一个例子出来:
通过观察上面的sql,可以发现其中有一些共性:
接下来,就可以按照每种类型的sql来创建sql了。
一下所有的对象都是这个User.java
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
@Table(name = "user")
public class User {
@Column(name = "name")
private String name;
@Id
@Column(name = "id")
private int id;
@Column(name = "age")
private int age;
@Column(name = "mark")
private String mark;
@Column(name = "create_date")
private Date createDate;
@Column(name = "status")
private int status;
// getter setter toString
}
主要用来操作字符串
import java.util.Collection;
import java.util.Iterator;
/**
* @author hjx
*/
public class StringUtils {
public static final String SPACE = " ";
public static final String BLANK = "";
public static final String COMMA = ", ";
/**
* 重复字符串
*
* @param str
* @param number
* @return
*/
public static String[] repeat(String str, int number) {
Assert.notNull(str);
String[] strings = new String[number];
for (int i = 0; i < number; i++) {
strings[i] = str;
}
return strings;
}
/**
* 组合字符串
*
* @param strings
* @return
*/
public static String append(final Object... strings) {
StringBuilder builder = new StringBuilder();
for (Object s1 : strings) {
if (s1 == null) {
continue;
}
builder.append(s1.toString());
}
return builder.toString();
}
/**
* 组合字符串
*
* @param collection
* @param separator
* @return
*/
public static String join(Collection collection, String separator) {
StringBuffer var2 = new StringBuffer();
for (Iterator var3 = collection.iterator(); var3.hasNext(); var2.append((String) var3.next())) {
if (var2.length() != 0) {
var2.append(separator);
}
}
return var2.toString();
}
}
用来从对象中取值的,使用反射。
/**
* 取值
*
* @param target 要从哪一个对象中取值
* @param field 要取这个对象的那个属性的值
* @return
*/
public static Object getValue(Object target, Field field) {
//忽略掉private
field.setAccessible(true);
try {
return field.get(target);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
用来给对象设置值的,还是反射。
/**
* 设置值
*
* @param target 要从哪一个对象中取值
* @param field 要取这个对象的那个属性的值
* @param value 要设置的值
* @return
*/
public static boolean setValue(Object target, Field field, Object value) {
field.setAccessible(true);
try {
field.set(target, value);
return true;
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return false;
}
下面就可以开始创建各种sql了~~~