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