1.为什么使用?

主要还是为了代码中获取到值,然后带入SQL语句中拼接查询

2.怎么使用?

1)bean继承了BaseEntity类,该类中有

    /**
* 自定义SQL(SQL标识,SQL内容)
*/
protected Map<String, String> sqlMap;
@JsonIgnore
@XmlTransient
public Map<String, String> getSqlMap() {
if (sqlMap == null){
sqlMap = Maps.newHashMap();
}
return sqlMap;
}
public void setSqlMap(Map<String, String> sqlMap) {
this.sqlMap = sqlMap;
}

2)XML中如何写?

<select id="findList" resultType="ZlfbBean">
SELECT * FROM (
SELECT <include refid="ZlfbBeanColumns"/>
FROM ZL_HCZZ i <include refid="ZlfbBeanJoins"/>
<where>
AND i.del_flag = #{DEL_FLAG_NORMAL}
${sqlMap.dsf} //此处加入service中的限制条件
<if test="zlbh != null and zlbh != ''">
AND i.ZLBH = #{zlbh}
</if>
<if test="createBy != null and createBy.id != null and createBy.id != ''">
AND i.CREATE_BY = #{createBy.id}
</if>
<if test="office != null and office.id != null and office.id != ''">
AND i.OFFICE_ID = #{office.id}
</if>
</where>
ORDER BY i.CREATE_DATE DESC,i.UPDATE_DATE DESC
) t
<where>
AND t.del_flag = #{DEL_FLAG_NORMAL}
<if test="beginInDate != null and beginInDate != ''">
AND t.CREATE_DATE <![CDATA[ >= #{beginInDate} ]]>
</if>
<if test="endInDate != null and endInDate != ''">
AND t.CREATE_DATE <![CDATA[ <= #{endInDate} ]]>
</if>
</where>
</select>

3)service中:

public Page<ZlfbBean> findzlfb(Page<ZlfbBean> page,ZlfbBean bean){
// 生成数据权限过滤条件(dsf为dataScopeFilter的简写,在xml中使用 ${sqlMap.dsf}调用权限SQL)
User user = UserUtils.getUser();
String dsf = dataScopeFilter( user, "l", "k");//返回的是如AND (k.id='user.getId()')
if((bean.getCreateBy()==null || bean.getCreateBy().getId().equals("")) && (bean.getOffice()==null || bean.getOffice().getId().equals(""))){
dsf = dsf+" OR i.zlbh IN( "
+" SELECT DISTINCT t1.zlbh FROM ZL_HCZZ t1 join ZL_HCZZSP t2 on t1.zlbh=t2.zlbh where t2.CREATE_BY = "+user.getId()
+" ) "
+" OR i.zlbh IN( "
+" SELECT DISTINCT t1.zlbh FROM ZL_HCZZ t1 join ZL_HCZZQS t2 on t1.zlbh=t2.zlbh where t2.CREATE_BY = "+user.getId()+" OR ((SELECT COUNT(1) FROM SYS_USER WHERE id="+user.getId()+" and qsqx='01' and office_id='"+user.getOffice().getId()+"') > 0 ) AND t2.QS_DW = '"+user.getOffice().getId()+"' "
+" ) "
+" OR i.zlbh IN( "
+" SELECT DISTINCT t1.zlbh FROM ZL_HCZZ t1 join ZL_HCZZFK t2 on t1.zlbh=t2.zlbh where t2.CREATE_BY = "+user.getId()
+" ) ";
}
bean.getSqlMap().put("dsf", dsf);给sqlmap集合中添加值,即添加一个dsf字符串的值为dsf
// 设置分页参数
bean.setPage(page);
// 执行分页查询
page.setList(zlfbDao.findList(bean));
return page;
}

关于拼接SQL语句sqlMap的使用方法的更多相关文章

  1. ASP.NET实现列表页连接查询 拼接sql语句 绑定grivdView

    ASP.NET实现列表页连接查询 拼接sql语句 如图效果: 基本需求:1.当页面第一次加载的时候默认查询一个月时间(或者说是登陆者所属权限的所有数据)的数据绑定到gridView 2.添加查询条件时 ...

  2. java动态拼接sql语句并且执行时给sql语句的参数赋值

    问题 在这里举一个例子,比如我要做一个多条件模糊查询,用户输入的时候有可能输入一个条件,也有可能输入两个条件,这时执行查询的sql语句就不确定了,但可以用动态拼接sql语句来解决这个问题. 解决方法 ...

  3. StringBuilder 拼接sql语句比较快

    StringBuilder 拼接sql语句比较快StringBuilder strBuilder = new StringBuilder();strSql += "insert into t ...

  4. 查询拼接SQL语句,多条件模糊查询

    多条件查询,使用StringBuilder拼接SQL语句,效果如下: 当点击按钮时代码如下: private void button1_Click(object sender, EventArgs e ...

  5. SQL语句中生成UUID方法

    SQL语句中生成UUID方法为UUID() 生成带横线UUID: select UUID()                         形如:abaffaca-fd55-11e5-b3d0-d2 ...

  6. C#的自动拼接Sql语句Insert方法及思路

    思路: 1.想想插入语句,大概是这样的一个框架:INSERT INTO 表名 (数据库列名) values (值) 2.这里要3个变量是不固定的,分别是:表名.数据库列名.值: a.表名我们这里很容易 ...

  7. 使用表达式避免拼接SQL语句

    在SQL语句编写过程中,无论在存储过程中还是在程序中,有时为了使语句兼容全部情况与某字段的特殊情况,不得不拼接SQL字串 如下表 商品ID 类别ID 1 1 2 1 3 2 4 3 5 3 如果我们要 ...

  8. java反射获取注解并拼接sql语句

    先建两个注解 分别为 Table 和 Column package com.hk.test; import java.lang.annotation.ElementType; import java. ...

  9. 动态拼接SQL语句

    1.参考官方文档 ? if:字符判断 ? choose (when, otherwise):分支选择 ? trim (where, set):字符串截取:其中where标签封装查询条件,set标签封装 ...

随机推荐

  1. Codeforces Beta Round #46 (Div. 2)

    Codeforces Beta Round #46 (Div. 2) http://codeforces.com/contest/49 A #include<bits/stdc++.h> ...

  2. stm32DMA

    源和目标地址必须按数据传输宽度对齐 支持循环的缓冲器管理 可编程的数据传输数目:最大为65536 每一个通道都有一组寄存器 DMA_CPARx.DMA_CMARx是没有差别的,它们都可以存放外设的地址 ...

  3. 明明白白你的Linux服务器——日志篇

    日志对于安全来说,非常重要,它记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹.日志主要的功能有:审计和监测.他还可以实时的监测系统状态,监测和追踪 ...

  4. f5 Syslog管理

    1.本地log保存7天.可输出至syslog服务器      local traffic 对应ltm

  5. Incorrect Invoice Ref.

    IF_EX_ACC_DOCUMENT~CHANGE LOOP AT c_accit ASSIGNING <wa_accit> WHERE rebzg eq 'V'. <wa_acci ...

  6. Linux下more命令C语言实现实践 (Unix-Linux编程实践教程)

    1. more第一版 实现基础功能,显示每一页固定24行文本,“q Enter”退出, “Enter” 下一行, “space Enter”下一页. #include<stdio.h> # ...

  7. Task.WaitAll代替WaitHandle.WaitAll

    Task.Waitall阻塞了当前线程直到全完.whenall开启个新监控线程去判读括号里的所有线程执行情况并立即返回,等都完成了就退出监控线程并返回监控数据. task.Result会等待异步方法返 ...

  8. .net中使用XPath语言在xml中判断是否存在节点值的方法

    book.xml<?xml version="1.0" encoding="utf-8" ?> <bookstore>  <boo ...

  9. PHP 根据两点的坐标计算之间的距离

    define('PI',3.1415926535898); define('EARTH_RADIUS',6378.137); //计算范围,可以做搜索用户 function GetRange($lat ...

  10. vs2015未能计算子级

    数据源 属性里边值  设置出现问题