发表于: 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类型的条件,以及用于分页查询的startlimit

庆东师兄我对于startlimit的理解有误吗?有误的话给个正确的解释,我虚心求学。

源码比较简单,我在这里就不一一的列出来解释了,相信大家做完任务,基本上都能看的懂。

然后是:
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接口,这个接口里面有两个根据动态条件获取idlist和获得单个对象的方法。

第一个获取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

然后有一个问题请教庆东师兄:
能具体的说一下dataUtilstringUtils里面的判空的区别吗?我实验了一下没有发现什么有大的不同,请问一下具体的不同体现在哪里?怎么用才符合规范?

明日计划的事情:

继续写接口。

遇到的问题:

今天精神有些恍惚,而且下午两个前端在我旁边产生了一些分歧,造成今天效率比较地低下,以后一定要专心,和同伴协商问题一定要准确,明白的表达自己的意思。

收获:

动态查询自己算是摸到了一点门道,下面就要多加练习,熟练使用。

任务开始时间:2017/12/15

预计完成时间:2017/12/28

延期:无

禅道:http://taskNaNteng.com/zentao/project-story-494.html


返回列表 返回列表
评论

    分享到