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. linux 日常实用操作

    [Tab]接在一串指令的第一个字的后面,为[命令补全] [Tab]接在一串命令的第二个字以后时,则为[文件补全] 若安装bash-completion 软件,则在某些指令后面使用[Tab]按键时,可以 ...

  2. javascript根据身份证号判断精确周岁年龄

    前言: 根据身份证号判断精确周岁年龄,可以精确到天,即周岁以生日当天为准,生日当天周岁+1,少一天则不加. 实现方法: <!DOCTYPE html> <html> <h ...

  3. 【go语言实现服务器接收http请求以及出现泄漏时的解决方案】

    一.关于基础的程序的实现 刚开始的时候程序是这样实现的: // Hello package main import ( "database/sql" "fmt" ...

  4. 【git】gitignore

    gitignore git专门有个文件用来管理那些不被纳入版本库的文件,这个文件是 [.gitignore],所有不被包含的都能放进去,但这个是有前提的. 前提 前提是文件如果没被git客户端trac ...

  5. Flexible variants in STVARV

    DATA: lv_time TYPE TVARV_VAL, lv_tvarvc(25) . CONSTANTS lv_prefix(25) VALUE 'ZZXXS_'. CONCATENATE lv ...

  6. AngularJS——第9章 模块加载

    第9章 模块加载 AngularJS模块可以在被加载和执行之前对其自身进行配置.我们可以在应用的加载阶段配置不同的逻辑. [AngularJS执行流程] 启动阶段(startup) 开始 --> ...

  7. 小程序 picker 多列选择器 数据动态获取

    需求是将各校区对应各班级的数据 以两列选择器的方式展示出来,并且可以在选择完成之后记录选结果参数. 校区数据 和 班级数据 分别是两个接口,以 校区 teach_area_id 字段关联 其各班级数据 ...

  8. vue2.0一安装的插件详解

    babel-runtime 对ES语法转义 fastclick  移动端300ms兼容 babel-polyfill 兼容Ie浏览器 //babel-polyfill引用 推荐采用webpack入口文 ...

  9. Jmeter常用脚本开发之JDBC请求

    简单说明:JDBC请求就是使用Jmeter连接数据库,执行sql语句,并返回对应的响应结果 步骤: 1.引入使用的数据库的驱动jar包,使用不同的数据库,我们需要引入不同的jar包.本文使用的MySQ ...

  10. js的回调函数详解

    本文主要介绍了个人对于javascript中回调函数的理解和使用方法及示例,需要的朋友可以参考下   现在做native App  和Web App是主流,也就是说现在各种基于浏览器的web app框 ...