简单强大的HqlHelper
初始化
// 初始化一个新的HqlHelper,fromClazz = Admin.class
HqlHelper helper = HqlHelper.queryFrom(Admin.class);
// 重新初始化helper,fromClazz = Right.class
helper.resetQueryFrom(Right.class);
使用
第一步:初始化HqlHelper helper
第二步:将helper作为参数,调用HqlHelperService、XXXXService相关方法进行操作数据库
具体用法参见:com.dodo.common.framework.service.HqlHelperService 代码注释
具体用法参见:com.dodo.common.framework.service.BaseService 代码注释
第三步:读取返回结果
示例:配置HqlHelper并操作数据库
测试源码:/dodo/src/test/java/com/dodo/testing/tests/hqltest/HqlHelperTest.java
@Autowired
private HqlHelperService helperService;
@Test
public void testHql() {
// 一个基本的查询例子 - 查询单个
// 查询id=1160799039167057920 的城市名称以及归属的省份名称
HqlHelper helper = HqlHelper.queryFrom(City.class);
helper.fetch("name")
.join(HqlHelper.currTable, "province", "p").fetchOther("p", "name", "provinceName")
.eq("id", "1160799039167057920");
Record oneCity = helperService.getRecord(helper);
System.err.println("oneCity=" + oneCity);
// 一个基本的查询例子 - 查询列表
// 查询所有城市名称以及归属的省份名称,返回2条记录
helper.resetQueryFrom(City.class).fetch("name")
.join(HqlHelper.currTable, "province", "p").fetchOther("p", "name", "provinceName")
.setFirstResult(0).setMaxResults(2);
Records cityList = helperService.getRecords(helper, false);
System.err.println("cityList=" + cityList);
// 一个基本的更新例子
// 将id=1160799039167057920 的城市名称更新为`新名称`
// 并且,将sortSeq字段加1
helper.resetQueryFrom(City.class)
.update("name", "新名称")
.updateHqlSegment("sortSeq", "sortSeq + 1")
.eq("id", "1160799039167057920");
int updateRow = helperService.update(helper);
System.err.println("updateRow =" + updateRow);
// 一个基本的删除例子
//将name以「测试」开头的城市都删除掉
helper.resetQueryFrom(City.class)
.like("name", "测试", MatchType.START);
int deleteRow = helperService.delete(helper);
System.err.println("deleteRow =" + deleteRow);
// 一个基本的分组查询例子
// 查询每个省份下的城市数量和最大的区号,返回城市数量 between 2 and 5 的数据
helper.resetQueryFrom(City.class)
.join(HqlHelper.currTable, "province", "p")
.groupByOther("p", "name", "provinceName")
.count("id", "cityCount").having_between(2L, 5L)
.max("areaCode", "maxAreaCode");
Records provinceCityCount = helperService.getRecordsGroup(helper);
System.err.println("provinceCityCount =" + provinceCityCount);
}
//执行结果:
oneCity=Record [rawData={name=新名称, provinceName=福建}]
cityList=Records [rawData=[
{name=新名称, provinceName=福建},
{name=莆田市, provinceName=福建}]]
updateRow =1
deleteRow =0
provinceCityCount =Records [rawData=[
{maxAreaCode=0955, provinceName=宁夏, cityCount=5},
{maxAreaCode=0898, provinceName=海南, cityCount=3}]]
彩蛋
上述示例中的 province
name
areaCode
等字段名可以使用模型静态字段类
来引用,如果都这样做了,那么好处显而易见:以后删除或者修改实体类的字段,重新生成代码后,引用的该字段的代码将报错,逐一修改即可,效率非常高。如:
// 一个基本的查询例子 - 查询列表
// 查询所有城市名称以及归属的省份名称,返回2条记录
helper.resetQueryFrom(City.class)
.fetch(CityFields.name)
.join(HqlHelper.currTable, CityFields.province, "p")
.fetchOther("p", ProvinceFields.name, "provinceName")
.setFirstResult(0).setMaxResults(2);
Records cityList = helperService.getRecords(helper, false);
System.err.println("cityList=" + cityList);
开始学习
当前内容版权归 DodoFramework 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 DodoFramework .