分享懒人的SQL构建方法,简化SQL

本来想继承MODEL的,但是因为用了自动构建baseModel所以用不了,老大给了继承的方法还没时间研究先直接发出来。希望有人能将其强大之。

用法示例:

1、new ModelX().init(new Users()).where("username","666").where("password","e10adc3949ba59abbe56e057f20f883e").findFirst()

返回record

2、new ModelX().init(new Users()).where("password","e10adc3949ba59abbe56e057f20f883e").orderBy("create_time desc").find()

返回List

3、ModelX.buildSelect(new Users())

返回String :

select * from users

4、ModelX.buildSelectWhere(new Users())

返回String :

select * from users where

4 的使用示例:someModel().find(ModelX.buildSelect(someModel()) + " column = ?",getPara("param"))

代码:

com.jfinal.plugin.activerecord.Modelcom.jfinal.plugin.activerecord.TableMappingjava.util.ArrayListjava.util.HashMapjava.util.Listjava.util.MapModelX {
    Model String List =ArrayList()String =List =ArrayList()String ModelX (Model model){
       .= TableMapping.().getTable(model.getClass()).getName().=model}

    ModelX (String paraNameObject paraValue){
        =..add(HashMap(){{
            put()}})}

    ModelX (String paraNameObject paraValueString type){
        =type..add(HashMap(){{
            put()}})}

    ModelX (String orderByStr){
        .=orderByStr}

    String (){
        (.size()>){
            StringBuilder temp=StringBuilder().forEach((paraMap)->{
                ((Map)paraMap).forEach((kv)->{
                    .append(++ + k  + )..add(v)})})+ temp.toString()}{
            }
    }

    List (){
        String sql = + + _bulidWhere() + .find(sql.toArray())}

    Model (){
        String sql = + +  _bulidWhere() + .findFirst(sql.toArray())}

    String  (Model model){
        String tableName = TableMapping.().getTable(model.getClass()).getName()+ tableName}

    String  (Model model){
        String tableName = TableMapping.().getTable(model.getClass()).getName()+ tableName + }





}


评论区

flash866

2018-07-19 09:11

呃 排版乱了。。。

l745230

2018-07-19 09:31

其实我感觉手写sql对于后期维护更方便

杜福忠

2018-07-19 14:29

@l745230 我们的SQL都是先在 Navicat 里面敲好了(自带语法提示), 运行成功之后, 再复制粘贴到JAVA里面或者SQL模版里, 用起来也还行.... 我以前用过 海哥写的 Afinal 里面封装操作数据库的工具还是蛮好的

chcode

2019-09-02 10:59

jooq 可以了解下@杜福忠

JFinal

2019-09-02 11:06

@chcode select("a, b, c").where("x > ?").and(" y = ?").limit(30) 这种用法比下面的用法麻烦多了:
select a, b, c where x > ? and y = ? limit 30

不仅麻烦,而且前者有很多复杂嵌套功能无法支持,要知道 sql 是一门灵活的语言,你要是见过几百行的 sql 的语句就知道 sql 可以有多复杂了

不仅如此,前者拼接 sql 有性能损失。 世界本无事!