java实现从实体到SQL语句的转换(二)

2014-11-24 09:17:18 · 作者: · 浏览: 0
前面写过一篇生成insert语句的博客,今天把CRUD的都完善了一下,需要的上次写的获取实体信息的类,这里就不贴出来了【点击打开查看】
下面是完整的代码:
package tan.code.utils;  
  
import java.util.List;  
import java.util.Map;  
  
/**  
 * 简单的SQL语句拼装类 ;要求数据库表名及列命和实体保持一致;  
 *   
 * @author Mr_Tank_  
 *   
 * @param   
 */  
public class SQLStringHelper {  
  
    private EntityHelper entityHelper = new EntityHelper();  
  
    /**  
     * 根据传入的实体生成Insert SQL 句  
     *   
     * @param entity  
     * @return 拼接好的sql语句  
     */  
    @SuppressWarnings("unchecked")  
    public String createInsert(T entity) {  
        String sql = "Insert into ";  
        String column = ""; // 列  
        String c_values = ""; // 列值  
        List> list = entityHelper.getFiledsInfo(entity);  
        sql += list.get(0).get("obj_name").toString() + " ";  
        for (int i = 0; i < list.size(); i++) {  
  
            //  定id在   自 生成-20130807  
  
            if (String.valueOf(list.get(i).get("f_name")).equals("id")) {  
                i++;  
            } else if (list.get(i).get("f_value") != null) {  
                column += list.get(i).get("f_name") + ",";  
                c_values += "'" + list.get(i).get("f_value") + "',";  
            }  
  
        }  
        sql += "(" + column.substring(0, column.length() - 1) + ") values ("  
                + c_values.substring(0, c_values.length() - 1) + ");";  
  
        return sql;  
  
    }  
  
    /**  
     * 拼 Delete SQL 句  
     *   
     * @param entity  
     * @param id  
     *            实体id  
     * @return  
     */  
    @SuppressWarnings("unchecked")  
    public String createDelete(T entity, int id) {  
        String sql = "delete from ";  
        List> list = entityHelper.getFiledsInfo(entity);  
        sql += list.get(0).get("obj_name").toString() + " where id=" + id + ";";  
        return sql;  
    }  
  
    /**  
     * 查找  
     *   
     * @param entity  
     * @return  
     */  
    @SuppressWarnings("unchecked")  
    public String createSelect(T entity) {  
        String sql = "select * from ";  
        String column = ""; // 列  
        List> list = entityHelper.getFiledsInfo(entity);  
        sql += list.get(0).get("obj_name").toString() + " where ";  
        for (int i = 0; i < list.size(); i++) {  
  
            //  定id在   自 生成-20130807  
  
            // id  不能 0 始  
            // 如果知道id直接根据id生成sql语句就可以了  
            if (String.valueOf(list.get(i).get("f_name")).equals("id")  
                    && !String.valueOf(list.get(i).get("f_value")).equals("0")) {  
                sql += "id=" + list.get(i).get("f_value");  
                return sql;  
            } else if (list.get(i).get("f_value") != null) {  
  
                column += list.get(i).get("f_name") + " like %"  
                        + list.get(i).get("f_value") + "% or ";  
            }  
        }  
        return sql += column.substring(0, column.length() - 4) + ";";  
  
    }  
  
    /**  
     * 根据id更新实体数据  
     *   
     * @param entity  
     * @param id  
     *            实体id  
     * @return 拼装好的 Update SQL语句  
     */  
    @SuppressWarnings("unchecked")  
    public String createUpdate(T entity, int id) {  
        String sql = "update ";  
        String column = ""; // 列  
        List> list = entityHelper.getFiledsInfo(entity);  
        sql += list.get(0).get("obj_name").toString() + " set ";  
        for (int i = 0; i < list.size(); i++) {  
  
            // id不能修改  
            if (String.valueOf(list.get(i).get("f_name")).equals("id")) {  
                i++;  
            } else if (list.get(i).get("f_value") != null) {  
                column += list.get(i).get("f_name") + "='"  
                        + list.get(i).get("f_value")+"',";  
            }  
  
        }  
        return sql +=column.substring(0, column.length()-1) + " where id='" + id+"'";  
  
    }  
}  

测试【其中可以使用任意实体类替代测试代码里面的的Tutor类】:
@Test  
public void test() {  
    // fail("Not yet implemented");  
    Tutor tutor = new Tutor();  
    tutor.setId(3);  
    //tutor.setTitle("寻找一 初三物理 期家教");  
    tutor.setProvince("广西壮族自治区");  
    tutor.setCity("桂林");  
    tutor.setRegion("朝阳区");  
    //tutor.setPatriarch("王先生");  
    tutor.setPhone("139772109981");  
    tutor.setGrade("初三");  
    tutor.setSubject("物理");  
    tutor.setPay(50);  
      
    SQLStringHelper sqlStringHelper = new SQLStringHelper();  
    System.out.println(sqlStringHelper.createInsert(tutor));  
    System.out.println(sqlStringHelper.createDelete(tutor, 1));  
    System.out.println(sqlStringHelper.createSelect(tutor));  
    System.out.println(sqlStringHelper.createUpdate(tutor, 2));  
}  

测试结果:
Insert into Tutor (subject,grade,pay,phone,browse,province,city,region,wb_num) values ('物理','初三','50.0','139772109981','0','广西壮族自治区','桂林','朝阳区','0');  
delete from Tutor where id=1;  
select * from Tutor where id=3  
update Tutor set subject='物理',grade='初三',pay='50.0',phone='139772109981',browse='0',province='广西壮族自治区',city='桂林',region='朝阳区',wb_num='0' where id='2'  

以上只是本人的一些尝试,如有不足之处,请指出。