|
开始准备生成sql 在上一篇里,我们已经取到了我们在生成sql语句中所需要的信息,这一篇里我们开始根据class来生成我们需要的sql。在这之前我们先确认几件事情 分析sql我们主要解决的是增删该查的问题,所以我们先写如何生成一个新增的sql。 我么先观察一下sql一般来说都有什么构成。现在先放一个例子出来: insert INSERT INTO user (name, id, create_date, age, mark, status)VALUES (?, ?, ?, ?, ?, ?);delete DELETEFROM userWHERE id = ? update UPDATE userSET name = ?, id = ?, create_date = ?, age = ?, status = ?WHERE id = ? select SELECT name, id, create_date, age, mark, statusFROM userWHERE id = ?
通过观察上面的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 = 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了~~~ 生成sql:insert思路新增的sql还是比较好实现的,我们需要的大致就是: - 构建一个对象 User。
- 调用新增的方法,将User作为参数传入方法。
- 通过上一篇的解析结果,拿到所有的字段名称,与要保存的值。生成sql。
- 通过JdbcTemplate执行sql,插入数据库。
结束啦,剩下的下一篇写~~
|
|