精华内容
下载资源
问答
  • mybatis:sql传参

    2021-04-24 13:33:52
    mybatis:sql传参 导航 回到mybatis导航页 目录结构 单个参数 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...

    mybatis:sql传参

    导航

    回到mybatis导航页

    目录结构

    目录结构

    单个参数

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="goods">
        <select id="selectById"
                parameterType="integer"
                resultType="com.torey.mybatis.entity.TGoodsEntity">
       SELECT * FROM t_goods where goods_id=#{id}
        </select>
    </mapper>
    
    @Test
        public void testSelectById() throws Exception {
            SqlSession sqlSession = null;
            try {
                sqlSession = MyBatisUtils.openSession();
                TGoodsEntity objects = sqlSession.selectOne("goods.selectById",748);
                System.out.println(objects);
            } catch (Exception ex) {
                throw ex;
            } finally {
                MyBatisUtils.closeSession(sqlSession);
            }
        }
    
    

    多个参数

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="goods">
        <select id="selectByMap"
                parameterType="java.util.Map"
                resultType="com.torey.mybatis.entity.TGoodsEntity">
       SELECT * FROM t_goods
       where   current_Price between #{min} and #{max}
       order by current_Price
       limit 0,#{limit}
        </select>
    </mapper>
    
    @Test
    public void selectByMap() throws Exception {
        SqlSession sqlSession = null;
        try {
            sqlSession = MyBatisUtils.openSession();
            Map<String,Object> objectMap=new HashMap<String, Object>();
            objectMap.put("min",10);
            objectMap.put("max",50);
            objectMap.put("limit",3);
            List<TGoodsEntity> objects =
                    sqlSession.selectList("goods.selectByMap",objectMap);
            for (TGoodsEntity object : objects) {
                System.out.println(object.toString());
            }
        } catch (Exception ex) {
            throw ex;
        } finally {
            MyBatisUtils.closeSession(sqlSession);
        }
    }
    

    导航,上一页,下一页

    4MyBatis数据查询

    9MyBatis预防SQL注入攻击

    支持我-微信扫一扫-加入微信公众号

    Aseven公众号

    赞赏作者

    赞赏作者
    展开全文
  • Quick B的SQL传参建模功能提供基于SQL的数据加工处理能力,减轻了IT支撑人员的工作量。在即席查询SQL中,我们用物理字段:显示别名来表示参数的占位符,配置完占位符后,就可以在查询控件中进行参数绑定。在QuickBI...

    Quick B的SQL传参建模功能提供基于SQL的数据加工处理能力,减轻了IT支撑人员的工作量。在即席查询SQL中,我们用物理字段:显示别名来表示参数的占位符,配置完占位符后,就可以在查询控件中进行参数绑定。在QuickBI的SQL传参建模中,本质透传的是逻辑条件,执行过程中会将物理字段:显示别名来表示参数的占位符,配置完占位符后,就可以在查询控件中进行参数绑定。在QuickBI的SQL传参建模中,本质透传的是逻辑条件,执行过程中会将“{物理字段:显示别名}”替换为“物理字段 > 查询值 ” 或 “物理字段 = 查询值 ” 或 “物理字段 in (查询值A、查询值B、查询值C) ” 或 “物理字段>= 查询值A and物理字段<= 查询值B”。下面我们来看看,哪些场景会用到Quick B的SQL传参建模功能吧!

    场景一:任意时间段内的用户购买行为分析

    1. 场景描述:在零售行业往往需要分析用户的活跃度和客户的忠诚度,那么通过分析任意时间段内用户购买频率是常用的分析思路。
    2. 基于SQL传参如何实现:

    1) SQL建模,这个场景就是典型的二次聚合分析,而且任意时间段,需要作用到子查询中,SQL建模语句如下:
    select
    sum(case when buy_cnt = 1 then 1 else 0 end ) as buy_cut_1,
    sum(case when buy_cnt = 2 then 1 else 0 end ) as buy_cut_2,
    sum(case when buy_cnt >2 and buy_cnt<=5 then 1 else 0 end ) as buy_cut_2_5,
    sum(case when buy_cnt >5 and buy_cnt<=10 then 1 else 0 end ) as buy_cut_5_10,
    sum(case when buy_cnt >10 and buy_cnt<=20 then 1 else 0 end ) as buy_cut_10_20,
    sum(case when buy_cnt >20 then 1 else 0 end ) as buy_cut_up_20
    from
    (SELECT a.customer_name,
    count(a.order_id) as buy_cnt
    from company_sales_record_copy a
    WHERE ${a.report_date : date_test } /定义查询时间参数/
    group by a.customer_name
    ) b
    2) 参数设置,在Quick BI中SQL传参本质上传逻辑条件,SQL传参需要选择为“日期-年月日”,供查询控件中识别数据类型。

    3) 点击“创建数据集”,构建“任意时间多次购买客户数”数据集

    4) 仪表板配置,以交叉表配置为例。选择对应SQL传参建模数据集,拖拽选择需要展现的字段。如下所示:

    5) 查询项绑定配置,选择SQL参数项作为查询条件项,设置查询项与图表组件的关联关系和筛选项展现形式。如下图所示:

    6) 数据验证:点击查询进行数据验证和SQL准确性验证。Quick BI的SQL引擎根据查询条件配置和SQL传参建模进行参数绑定。如下图所示:

    通过以上六步操作,就可以很好的实现SQL传参建模的全流程穿越,以此来支撑多次聚合的复杂分析场景。

    场景二、销售库存类数据分析(SQL建模供参考)

    1.场景描述:在零售行业分析任意时间段的库存和销量数据是比较常用的需求,通过该数据分析甄别某个商品近期销售情况和库存?针对这样的场景,如何构建Quick BI的SQL传参建模?
    1) 数据样例,后台数据具体字段包括(统计日期、省份、城市、期初库存、进货量、出货量、期末库存等):

    2) 需要实现结果说明,基于以上数据,假设需要分析20190801~20190820浙江杭州的销售库存数据,需要给出的结果为:(期初库存取汇总开始时间的期初库存值,期末库存取汇总结束时间的期末库存值,进货朗、出货量采用sum汇总),另外时间为筛选区间。

    3) Quick BI中SQL建模语句如下(供参考):
    SELECT QBI_T_1_.COL_2 AS '省份',

        QBI_T_1_.`COL_3` AS '城市',

    sum( case when QBI_T_1_.COL_1 = start_date then QBI_T_1_.COL_4else 0 end) as '期初库存',
    SUM(QBI_T_1_.COL_5) AS '进货量',
    SUM(QBI_T_1_.COL_6) AS '出货量',
    SUM(case when QBI_T_1_.COL_1 = end_date then QBI_T_1_.COL_7 else 0 end ) as '期末库存'
    FROM quickbi_test.QBI_0808_1566542575222 AS QBI_T_1_ /每日库存销量表/
    left join (
    select min(a.COL_1) as start_date,
    max(a.COL_1) as end_date
    FROM quickbi_test.QBI_0808_1566542575222 AS a /每日库存销量表/
    where ${a.COL_1:report_date} /查询项中绑定的SQL传参/

        ) b /*获取待汇总的统计时间*/

    on (

            QBI_T_1_.COL_1 >= start_date

    and QBI_T_1_.COL_1 <= end_date

        )

    group by QBI_T_1_.COL_2,

         QBI_T_1_.`COL_3`
    

    阿里巴巴数据中台团队,致力于输出阿里云数据智能的最佳实践,助力每个企业建设自己的数据中台,进而共同实现新时代下的智能商业!
    阿里巴巴数据中台解决方案,核心产品:
    Dataphin,以阿里巴巴大数据核心方法论OneData为内核驱动,提供一站式数据构建与管理能力;
    Quick BI,集阿里巴巴数据分析经验沉淀,提供一站式数据分析与展现能力;
    Quick Audience,集阿里巴巴消费者洞察及营销经验,提供一站式人群圈选、洞察及营销投放能力,连接阿里巴巴商业,实现用户增长。

    双12来袭!500元淘宝红包、iPhone11等你拿。
    https://www.aliyun.com/1212/2019/home?utm_content=g_1000092611

    原文链接
    本文为云栖社区原创内容,未经允许不得转载。

    展开全文
  • SQL传参Servlet翻页.....................
  • Sparktool是运行Spark SQL的中间件,能够解决Spark SQL传参的难题。刚开始使用Spark时,发现分布式环境下传统的ORM框架无法正常使用,于是诞生了Sqltool;刚开始使用Spark SQL时,发现其不能像JDBC那样传参,于是...

    目录

    一、Sparktool简介

    二、Sparktool的用途

    三、Sparktool使用示例

    四、获取Sparktool


    一、Sparktool简介

    Sparktool是运行Spark SQL的中间件,能够解决Spark SQL传参的难题。刚开始使用Spark时,发现分布式环境下传统的ORM框架无法正常使用,于是诞生了Sqltool;刚开始使用Spark SQL时,发现其不能像JDBC那样传参,于是sqltool的早期版本封装了SQL引擎以及相关的数据加载器。但是,Sqltool是一个通用的动态结构化查询语言(DSQL)解析和执行的框架,并非只能应用于Spark程序中。因此,分离专门应用于Spark程序之上的框架成为必然,Sparktool由此诞生。

    二、Sparktool的用途

    Sparktool的用途是运行动态化的、可传参的Spark SQL。所谓“可传参”即执行Spark SQL时可接收参数,而不是写死的SQL代码;所谓“动态化”即执行Spark SQL时最终执行的SQL可根据传入参数不同而不同(参见Sqltool的DSQL)。这样,Spark SQL传参的难题迎刃而解;同时,对于大多数情况而言,不再需要繁杂的逻辑判断和SQL拼接。

    三、Sparktool使用示例

    Sparktool通过SparkDao向外提供API服务,目前SparkDao只有一种实现即DSQLSparkDao构建,DSQLSparkDao需要指定DSQLFactory。sparkDao可以让Spark SQL迸发魔力:

    // 构建SparkDao
    SparkDao sparkDao = DSQLSparkDao.build(new XMLFileDSQLFactory(basePackages, suffix));
    
    // 如果已经构建了Sqltool的Dao,构建SparkDao时可以重用DSQLFactory
    SparkDao sparkDao = DSQLSparkDao.build(dao.getDSQLFactory());
    
    // 使用SparkDao解析执行DSQL从数据库加载数据集
    Dataset<Row> dataset1 = sparkDao.load(sparkSession, dbOptions, dsql, params);
    
    // 使用SparkDao将带参数DSQL提交给Spark SQL执行
    Dataset<Row> dataset2 = sparkDao.sql(sparkSession, dsql, params);

    四、获取Sparktool

    github开源地址:https://github.com/10MG/sparktool

    maven中央仓库地址:https://mvnrepository.com/artifact/cn.tenmg/sparktool

    展开全文
  • 本篇博客主要内容是:(1)SQL语句需要传参的解决办法;(2)只传一个参数时候parameterType设置成对应的包装类型;(3)传多个参数时候parameterType设置Map接口类型; 目录 1.只传一个参数:以根据id查商品信息...

    本篇博客主要内容是:(1)SQL语句需要传参的解决办法;(2)只传一个参数时候parameterType设置成对应的包装类型;(3)传多个参数时候parameterType设置Map接口类型;

    目录

    1.只传一个参数:以根据id查商品信息为例;

    (1)在goods.xml中新增一个select标签:

    (2)外侧实际调用,演示:

    2.传递多个参数:以查询某个价格范围内的商品信息为例

    (1)在goods.xml中新增一个select标签:

    (2)外侧实际调用,演示:


     SQL查询有时是需要外部传入参数的。


    1.只传一个参数:以根据id查商品信息为例;

    (1)在goods.xml中新增一个select标签:

    goods.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="goods">
        <select id="selectAll" resultType="com.imooc.mybatis.entity.Goods">
            select * from t_goods order by goods_id desc limit 10;
        </select>
    
        <select id="selectById" parameterType="Integer" resultType="com.imooc.mybatis.entity.Goods">
            select * from t_goods where goods_id = #{value}
        </select>
    </mapper>

    说明:

    (1) 只传一个参数的时候,parameterType设置成基础的包装类类型就可以了。

    (2)外侧实际调用,演示:

    package com.imooc.mybatis;
    
    import com.imooc.mybatis.entity.Goods;
    import com.imooc.mybatis.utils.MyBatisUtils;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.io.Reader;
    import java.sql.Connection;
    import java.util.List;
    
    /**
     * JUnit单元测试类
     */
    public class MyBatisTestor {
    
        @Test
        public void testSelectById() throws Exception {
            SqlSession session = null;
            try {
                session = MyBatisUtils.openSession();
                Goods goods = session.selectOne("goods.selectById", 937);
                System.out.println(goods.getTitle());
            } catch (Exception e) {
                throw e;
            }finally {
                MyBatisUtils.closeSession(session);
            }
        }
    }
    

    说明:

    (1)

    (2)

    运行结果:

    但是,单参数有局限性,无法解决复杂的查询。


    2.传递多个参数:以查询某个价格范围内的商品信息为例

    mybatis的只支持设置一个paremeterType;;;如果要传递多个数值,单靠一个基础的数据类型是无法承载的。遇到需要传递多个参数的时候,可以使用mybatis一个变通的办法:parameterType设置成Map接口类型

    (1)在goods.xml中新增一个select标签:

    goods.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="goods">
        <select id="selectAll" resultType="com.imooc.mybatis.entity.Goods">
            select * from t_goods order by goods_id desc limit 10;
        </select>
    
        <select id="selectById" parameterType="Integer" resultType="com.imooc.mybatis.entity.Goods">
            select * from t_goods where goods_id = #{value}
        </select>
    
        <select id="selectByPriceRange" parameterType="java.util.Map" resultType="com.imooc.mybatis.entity.Goods">
            select * from t_goods
            where
                current_price between #{min} and #{max}
                order by current_price
                limit 0,#{limt};
        </select>
    </mapper>

    说明:

    (1)

    (2)外侧实际调用,演示:

    外侧调用,传参:在测试类中编写测试代码

    package com.imooc.mybatis;
    
    import com.imooc.mybatis.entity.Goods;
    import com.imooc.mybatis.utils.MyBatisUtils;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.io.Reader;
    import java.sql.Connection;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * JUnit单元测试类
     */
    public class MyBatisTestor {
    
        @Test
        public void testSelectByPriceRange() throws Exception {
            SqlSession session = null;
            try {
                session = MyBatisUtils.openSession();
                Map parm = new HashMap();
                parm.put("min",100); parm.put("max", 500); parm.put("limt", 10);
                List<Goods> list = session.selectList("selectByPriceRange", parm);
                for (Goods g : list) {
                    System.out.println(g.getTitle());
                }
            } catch (Exception e) {
                throw e;
            }finally {
                MyBatisUtils.closeSession(session);
            }
        }
    }
    

    说明:

    (1)

    运行结果:

    展开全文
  • SQL传参Map

    2020-01-03 16:18:54
    思路:用varchar字符串进行传参,用“,”分割属性,用“;”分割个数,用SQL的临时表封装 代码: declare @mapStr varchar(max) --key,val;key2,val2; 建立临时表: if OBJECT_ID('tempdb..#tempTable') is ...
  • DAO sql 传参

    2020-07-11 11:50:23
    jar包: commons-dbutils---- QueryRunner 和 ResultSetHandler(又含Beanhandler和BeanListHandler) DAO public class DAO { private QueryRunner ... public int update(Connection connection, String sql, Object
  • MyBatis中sql传参

    2020-08-01 16:05:25
    1.当传入单个参数:mybatis不会做特殊处理,我们在sql语句中可以使用如下: #{参数名/任意名}:取出参数值。 2.当传入多个参数:mybatis会做特殊处理。多个参数会被封装成 一个map, key:param1…paramN,或者参数的...
  • sql传参list

    千次阅读 2017-07-15 21:53:51
    同时传进来两个类型的参数,一个List,一个String, 但是在运行中出现的异常 是由于我将文档中list看成一个标识符了,其实应该是ids这个引用。 另外对于fullName这个参数,我居然不知道可以这样写,这次长知识了
  • @Mybatis中使用 #{} 和 ${} 向sql传参时的区别 https://www.cnblogs.com/jy107600/p/7097983.html 带尺寸的图片: 居中的图片: 居中并且带尺寸的图片: 当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。 ...
  • Mybatis动态SQL传参

    千次阅读 2018-10-22 20:00:03
    传入单个String public void selectExample(String param); &amp;lt;!-- Mybatis不做特殊处理,xml中参数名随便写什么Mybatis都可以取到 --&amp;gt; &amp;lt;select id=&...result

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,508
精华内容 10,203
关键字:

sql传参