HibernateCRUD基础框架(2)-HQL语句构造器(HqlQueryBuilder,HqlUpdateBuilder)(二)

2014-11-24 07:25:33 · 作者: · 浏览: 2
ilder.toString(); } }


2.Hql更新语句构造器

下面这个是构造更新HQL语句的构造器,待完善。

package cn.fansunion.hibernate.sql.update;

import java.util.HashMap;
import java.util.Map;

import cn.fansunion.hibernate.util.Pair;

/**
 * Hql更新语句构造器。(TODO 待完善)
 *
 * @author LeiWen@FansUnion.cn
 */
public class HqlUpdateBuilder {

    private Map
  
    params;

    private String model;

    public HqlUpdateBuilder() {
        params = new HashMap
   
    (); } public HqlUpdateBuilder(String model) { } public HqlUpdateBuilder(Class
     model) { this.model = model.getSimpleName(); } public HqlUpdateBuilder model(String model) { this.model = model; return this; } public HqlUpdateBuilder model(Class
     model) { this.model = model.getSimpleName(); return this; } public HqlUpdateBuilder param(String key, Object value) { params.put(key, value); return this; } public HqlUpdateBuilder param(Pair... pair) { for (Pair p : pair) { params.put(p.getKey(), p.getValue()); } return this; } public HqlUpdateBuilder param(Map
    
      params) { this.params.putAll(params); return this; } public String toHql() { String hql = "update " + model + " set "; for (Map.Entry
     
       entry : params.entrySet()) { String key = entry.getKey(); hql += key + "=:" + key + " "; } return hql; } }
     
    
   
  


3.原生SQL语句构造器

类似的,有时候,可能不用Hibernate的HQL,而是用原生的SQL。

这个时候,可以编写与HqlQueryBuilder和HqlUpdateBuilder相应的SQL版本。

package cn.fansunion.hibernate.sql;

import cn.fansunion.hibernate.sql.entity.Limit;

/**
 * 原生SQL语句构造器。(TODO 待完善)
 *
 * @author LeiWen@FansUnion.cn
 */
public class SqlQueryBuilder {
    // limit只适用于nativeSQL
    // -----------------------------------
    // *************limit**************
    // -----------------------------------
    private Limit limit;
    
    /**
     * 转换成SQL语句
     */
    
    public String toSql(){
        //TODO
        return null;
    }
}


4.HQL查询构造器使用例子

/**
 * HQL查询构造器使用例子。
 *
 * @author LeiWen@FansUnion.cn
 */
public class HqlQueryBuilderTest extends ConstantBase {

    @Test
    public void test() {
        From from = new From(HqlQueryBuilder.class);
        SearchCondition searchCondition = createSearchCondtion();
        OrderGroup orderGroup = createOrderGroup();
        GroupBy groupBy = createGroupBy();
        HqlQueryBuilder builder = new HqlQueryBuilder(from, searchCondition,
                groupBy, orderGroup);
        // 直接打印,不使用“断言”
        println(builder.toHql());
    }

    private GroupBy createGroupBy() {
        GroupBy groupBy = new GroupBy();
        groupBy.addGroup("name");
        groupBy.addGroup("id");
        return groupBy;
    }

    private OrderGroup createOrderGroup() {
        Order order1 = new Order("id", false);
        Order order2 = new Order("name", "asc");

        OrderGroup orderGroup = new OrderGroup(order1, order2);
        return orderGroup;
    }

    private SearchCondition createSearchCondtion() {
        GroupCondition groupCondition1 = oneGroupCondition();
        GroupCondition groupCondition2 = oneGroupCondition();
        //String groupStr1 = groupCondition1.toString();
        //String groupStr2 = groupCondition2.toString();
        // System.out.println(groupStr1);
        // System.out.println(groupStr2);

        SearchCondition searchCondition = new SearchCondition();
        searchCondition.addGroupCondition(groupCondition1);
        searchCondition.addGroupCondition(groupCondition2, true);
        //String searchStr = searchCondition.toString();
        // System.out.println(searchStr);
        return searchCondition;
    }

    private GroupCondition oneGroupCondition() {
        // =,Integer
        String age = "age";
        Integer ageva lue = 24;
        Condition condition2 = new Conditi