跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 大家帮看看这种 Java 写 sql 的代码可取吗
未分類
27 10 月 2020

大家帮看看这种 Java 写 sql 的代码可取吗

大家帮看看这种 Java 写 sql 的代码可取吗

資深大佬 : madworks 2

@Override public DataListPage getDataListPageByFirstClass(DataListParams dataListParams, String firstClass, String branchStoreId) {

    String mainStoreId = BusinessUtils.getMainStoreId(branchStoreId);      String listHql = CONSTRUCTOR             + " FROM TCmsLesson cl, TCmsLessonStoreRel r"             + " WHERE cl.firstClass = :firstClass"             + " AND cl.isValid = 1"             + " AND cl.id = r.lessonId"             + " AND r.storeId in (:mainStoreId , :branchStoreId , '0000000')";      String countHql = "SELECT COUNT(cl.id) FROM"             + " TCmsLesson cl, TCmsLessonStoreRel r"             + " WHERE cl.firstClass = :firstClass"             + " AND cl.isValid = 1"             + " AND cl.id = r.lessonId"             + " AND r.storeId in (:mainStoreId , :branchStoreId , '0000000')";      dataListParams.setDateParam("cl.createDate");      return super.getDataListPageByHql(listHql, countHql, dataListParams, firstClass, mainStoreId, branchStoreId); }  private List<T> listDataByHql(String hql, DataListParams dataListParams, Object... values) {  if (StringUtils.isNotEmpty(dataListParams.getBeginTime())    && StringUtils.isNotEmpty(dataListParams.getEndTime())) {   hql = hql + " AND " + dataListParams.getDateParam() + " BETWEEN '" + dataListParams.getBeginTime()     + "' AND '" + dataListParams.getEndTime() + "'";  } else if (StringUtils.isNotEmpty(dataListParams.getBeginTime())) {   hql = hql + " AND " + dataListParams.getDateParam() + " >= '" + dataListParams.getBeginTime() + "'";  } else if (StringUtils.isNotEmpty(dataListParams.getEndTime())) {   hql = hql + " AND " + dataListParams.getDateParam() + " <= '" + dataListParams.getEndTime() + "'";  }   if (StringUtils.isNotEmpty(dataListParams.getOrderBy())) {   hql = hql + " ORDER BY " + dataListParams.getOrderBy();  }   if (dataListParams.isDesc()) {   hql = hql + " DESC";  }   if (dataListParams.getPage() != null) {   return this.listByPage(hql, dataListParams.getPage(), values);  } else {   return dataListParams.getSize() == 0     ? this.listByParamsAndPosition(hql, dataListParams.getStartPosition(), values)     : this.listBySizeAndPosition(hql, dataListParams.getSize(), dataListParams.getStartPosition(),       values);  } } 

大佬有話說 (33)

  • 資深大佬 : Kirsk

    罗里八嗦 直接删掉 类型控制应该在逻辑层 dao 只负责执行

  • 資深大佬 : chendy

    很有毅力
    试试 Criteria ?

  • 資深大佬 : geligaoli

    用字符串拼 sql 的,直接开

  • 資深大佬 : rodrick

    虽然很久不搞 java 你要小项目简单 sql 这么搞搞就算了,正规项目这么搞不说别的,写起来不累么,看的都累

  • 資深大佬 : EscYezi

    以后维护起来很蛋疼

  • 資深大佬 : wilsonWei

    字符串拼接有注入风险吧,看起来也不清晰

  • 資深大佬 : THESDZ

    如果一段代码让人看下去的欲望都没有,还是算了吧….

  • 資深大佬 : THESDZ

    @THESDZ #7 特别复杂的业务除外(防杠)

  • 資深大佬 : Resource

    不可取

  • 資深大佬 : zouzou0208

    这样拼接并且不做保护的话很容易注入的。在 para 里加个 or 1=1 后面就可以加东西了。

  • 主 資深大佬 : madworks

    @THESDZ 框架层面呢,我公司用的一个中台系统 orm 框架里就是 sql 拼接的,数据层次非常多

  • 資深大佬 : zouzou0208

    @madworks 那样一般都有正则或者其他的保护的。

  • 資深大佬 : THESDZ

    @madworks 框架层面的一般是基于反射或者代理等,每一个方法进行封装,查看主体逻辑的时候,配合注释(方法上的 javadoc)看起来并不会难受,而上面的代码,从列名到表名都是手敲的….

  • 資深大佬 : supuwoerc

    作为前端路过,刚学完预编译 sql,这样拼接字符串是不是会出现 sql 注入的问题,而且看着好累啊 =。=

  • 主 資深大佬 : madworks

    ||@THESDZ 这种代码感觉 3,4 年前 hibernate 这样写的很普遍

  • 資深大佬 : THESDZ

    @madworks 是指题目中的代码?hibernate 了解不多,但是据我了解它的目的是让程序员不写 sql,hibernate 应该不会这么写,最起码业务内容和转 sql 是分开考虑的,不会根据逻辑拼接 sql

  • 資深大佬 : fallinlovewith

    见过用 String sql = ” “+ ” “+ “….”;
    也见过 StringBuilder sb = new StringBuilder();
    sb.append(“”)
    .append(“”)
    ……

  • 資深大佬 : fengpan567

    这么拼接不怕 sql 注入?

  • 資深大佬 : buruliu

    hql 。

  • 資深大佬 : doudou1523102

    看的头痛

  • 資深大佬 : joyhub2140

    内部小项目这样子搞没太大问题,商业项目这样子,早晚推倒重做。

  • 資深大佬 : lonelymarried

    我刚学 java,如果复杂的查询不这样写,那么怎么写呢。学习一下。

  • 資深大佬 : la2la

    我们公司的项目部分接口就是这么搞得,看的脑壳疼。但是领导都没说什么,我还能做啥呢

  • 資深大佬 : somefree

    这一看都是上古时期的代码了, 跟我以前的公司代码有的一拼

  • 資深大佬 : fatpower

    这个不是 sql,是 hql 。
    上古时期的代码都这样

  • 資深大佬 : weizhen199

    你们仔细看看,我咋觉得这 sql 参数化了??

  • 主 資深大佬 : madworks

    @weizhen199 什么叫 sql 参数化

  • 資深大佬 : a719031256

    人才。。

  • 資深大佬 : dyeed

    @fatpower 需要维护丝丝诶吃( SSH )的我 o(╥﹏╥)o 了。。。。。。。。。

  • 資深大佬 : aguesuka

    好不好不评价,给几个建议。String hql=前一句加上 // language=HQL (sql jpaql 同理)。参数使用冒号加参数名的格式,然后用 setparammap 或者 setpropsobject 设置参数的值。参数和返回值加上泛型。
    java 的 orm 包括不限于 jpa mybatis springtemplate 都不咋地,在面相对象而且自省能力这么弱的语言里发明一种代替 sql 的 dsl 是不可能的。
    我能想到的最好办法是整合项目设计的时候不考虑 sql,专门招聘一个实习生来写 dao 层。

  • 資深大佬 : meepo3927

    嗯…… 这个换行风格,看着好难受

  • 資深大佬 : akira

    不可取。 现在应该都放弃这种写法了吧。 可维护性不是很好

  • 資深大佬 : jin7

    看着麻烦

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具