Magic-API数据库查询操作

1.简单查询

通过函数调用拼装简单的查询逻辑

var res = db.table("test_idms").column("age").where().eq("id", id).selectOne();

2.SQL自由查询

通过SQL自由拼装,连接

2.1 参数

* 参数表示:#{} ${}

* ${} 变量替换 有sql注入的风险

* #{} 变量注入 可以避免SQL注入风险

* 具体区别如下:

var sql = """select *from test_idms awhere id='${id}'"""log.info("sql={}",sql)res = db.select(sql)/////////////////////////////////////////sql = """select *from test_idms awhere id=#{id}"""log.info("sql={}",sql)res = db.select(sql)

2.2 动态SQL参数

表达式:?{condition,expression}

* ?{id,and a.id=#{id} }

* 解释:id表示变量,判断这个变量是否有值,也可以写一个判断表达式,true 逗号后面的语句会生效

* and a.id=#{id} 是一个SQL段,a.id表示表的字段 #{id} 表示变量

* ?{,} 这个操作符可以嵌套,功能很强大

sql = """select *from test_idms awhere 1=1?{id,and a.id=#{id} }log.info("sql={}",sql)res = db.select(sql)

2.3 Mybatis语法

* 2.3.1 基础语法

* 通过 Mybatis 语法能实现更复杂的条件拼接

* 实现2.2 相同的效果

sql = """select *from test_idms awhere 1=1    and a.id = #{id}"""

* 2.3.2 复杂条件

* 条件中存在嵌套循环

* 根据search_text 搜索内容 拼装搜索语句

* 空格代表or

* +代表and

var txtlist = []if(!search_text){    search_text = ""}var mainArr = search_text?.split(" ")if(mainArr?.isArray()){        mainArr.each(item=>{        //log.info("item={}",item)        var subArr = item.split("+")        var tmap = {            maintxt: item,            subtxt: subArr        }        txtlist.push(tmap)    })    //log.info("txtlist={}",txtlist)}if(!tags){    tags = null}var tagsArr = tags?.split(",")log.info("tagsArr={}",tagsArr)sql = """select CCCfrom XXX    a.del_flag = 0    and a.template_flag = 0    ?{id, and a.id = #{id}}    ?{plan_type, and a.plan_type=#{plan_type}}    ?{publish_status, and a.publish_status=#{publish_status}}                        (a.title like concat('%', #{subitem} ,'%')            or a.summary like concat('%',#{subitem},'%')            or JSON_SEARCH(CONVERT(b.tags,JSON),'all',concat('%',#{subitem},'%')))                            JSON_SEARCH(CONVERT(b.tags,JSON),'all',#{item})    """res = db.select(sql)

注意:搜索问题

*由于前端的搜索输入框是每次输入都会调用接口请求;如果调用输入跟不上输入速度就会造成返回结果与输入的参数结果不一致

*

* 解决方法:就是在返回结果的同时把 搜索的参数也返回给前端,让前端判断是否一致,取正确的一次请求

return {    data:res,    search_text:search_text}

3 总结

* 查询方式

* 查询函数:

* 1.通用查询,返回List>

* select()

* 2.特殊情况下才能使用;返回一个Int数字

* selectInt()

* 3.返回一行数据

* selectOne()

* 4.返回一列数据

* selectValue()

* 5.通用分页查询

* page()

查询支持复杂组合,SQL动态拼装,条件动态组合等,非常灵活。


展开阅读全文

页面更新:2024-04-29

标签:组合   嵌套   表达式   变量   语句   语法   函数   条件   参数   操作   动态

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top