发表于: 2017-12-25 22:39:51
1 636
今日完成的事情:
今天开始写接口,发现老大的代码生成的接口好多可以用。然后就剩下来一些动态查询的接口没有实现。
今天的日报就说一下动态查询语句吧:
老大的框架中已经把代码生成的绝大部分工作都做了,我们需要做的已经很简单了。
首先是SQLUtil,这个的作用是拼接sql语句:
这个类有两个方法:
public static String convert2Sql(Map<String, Object> conditions, Integer start, Integer limit) {
StringBuffer sqlBuffer = new StringBuffer();
这个方法是转换成sql语句,下面一个不知道什么作用:
需要传入三个参数,map类型的条件,以及用于分页查询的start和limit。
庆东师兄我对于start和limit的理解有误吗?有误的话给个正确的解释,我虚心求学。
源码比较简单,我在这里就不一一的列出来解释了,相信大家做完任务,基本上都能看的懂。
然后是:
public interface BaseDaoService {
List<Long> getIdsByDynamicCondition(Class var1, Map<String, Object> var2, Integer var3, Integer var4) throws ServiceException, ServiceDaoException;
Object getObjectByDynamicCondition(Class var1, Map<String, Object> var2, Integer var3, Integer var4) throws ServiceException, ServiceDaoException;
BaseDaoService接口,这个接口里面有两个根据动态条件获取id的list和获得单个对象的方法。
第一个获取id List的方法中的关键地方:
BaseDaoService接口有一个实现类是:BaseDaoServieImpl:
这个类里面有这两个方法的具体实现:
sql = SQLUtil.convert2Sql(conditions, start, limit);
Object o = this.dao.excuteSimpleSql(sql, clz);
ArrayList ids;
if (!(o instanceof List)) {
log.info(sql + " result is not list " + o + " instance " + o.getClass());
ids = new ArrayList();
BigInteger id = (BigInteger)o;
ids.add(id.longValue());
return ids;
首先根据条件map转换成sql语句,然后根据sql语句和一个类,解析sql语句得到一个对象,然后把这个对象转换成id List。
整个过程其实挺复杂,但是经过老大封装之后,我们需要做的事情就见打了很多。
虽然了解了具体的过程,但是需要熟练使用还要多加练习。
然后自己写了一个动态查询的工具类:
public static Map<String, Object> getArticleList(String name, Long createBy, Long startAt, Long endAt,
Integer status, Integer type) {
Map<String, Object> params = new HashMap();
if (StringUtil.isNotEmpty(name)) {
params.put("name & like", "'%" + name + "%'");
}
if (DataUtils.isNotNullOrEmpty(createBy)) {
params.put("create_by", createBy);
}
if (DataUtils.isNotNullOrEmpty(startAt)) {
params.put("create_at & >=", startAt);
}
if (DataUtils.isNotNullOrEmpty(endAt)) {
params.put("create_at & <= ", endAt);
}
if (DataUtils.isNotNullOrEmpty(status)) {
params.put("status ", status);
}
if (DataUtils.isNotNullOrEmpty(type)) {
params.put("article_type ", type);
}
params.put("@order", " create_at desc ");
params.put("@query", " id ");
params.put("@table", " article ");
log.info("getArticleList sql is " + SQLUtil.convert2Sql(params, 0, 0));
return params;
根据条件进行动态的拼接sql语句。
测试结果:
select id from article where 1 = 1 and create_by = 1 and name like'%1%' and status = 1 and create_at >=1 and article_type = 1 and create_at <= 1 order by create_at desc limit 0 , 0
然后有一个问题请教庆东师兄:
能具体的说一下dataUtil和stringUtils里面的判空的区别吗?我实验了一下没有发现什么有大的不同,请问一下具体的不同体现在哪里?怎么用才符合规范?
明日计划的事情:
继续写接口。
遇到的问题:
今天精神有些恍惚,而且下午两个前端在我旁边产生了一些分歧,造成今天效率比较地低下,以后一定要专心,和同伴协商问题一定要准确,明白的表达自己的意思。
收获:
动态查询自己算是摸到了一点门道,下面就要多加练习,熟练使用。
任务开始时间:2017/12/15
预计完成时间:2017/12/28
延期:无
禅道:http://taskNaNteng.com/zentao/project-story-494.html
评论