聊聊mybatis sql的括号问题

目录
  • mybatis sql的括号问题
  • mybatis多层括号(超过三层)解析不了

mybatis sql的括号问题

因为一段sql  要关联 A,B,C三个表,查三个表里的数据

一开始写的是

select * from a,b,c     

结果出来很多重复数据

而三个表是用id关联的

所以改成

select * from a  where id in (select id from a,b,c 关联条件)

然后在mybatis里在写级联查询

把B,C表里的数据以数组的形式查出来

ok了   避免了数据重复一大堆

但是人说,级联查询,缺点:  查询速度慢

如果用exists 查的比较快

mybatis多层括号(超过三层)解析不了

加<![CDATA[ ]]>即可,要么用存视图,应用在局部也可

<select id="selectfirm" resultType="com.esteel.web.entity.CusFirmBean" parameterType="com.esteel.web.beanvo.CusFirmBeanVo">
<![CDATA[ 
select a.*,a.customer_name as customerName from tb_cus_firm a where a.market_key =   #{marketKey} order by customer_key
]]>
</select>
<select id="getEmailCount" parameterType="map" resultMap="account1Map">
 SELECT * FROM TB_CUS_USER WHERE 1=1
  <if test="EMAIL!=null and EMAIL!=''">
  and EMAIL=#{EMAIL} 
  </if>
  <if test="CUS_TRADE_KIND!=null and CUS_TRADE_KIND!=''">
  and CUS_TRADE_KIND =#{CUS_TRADE_KIND}
  </if>
  <if test="CUS_USER_KEY!=null and CUS_USER_KEY!=''">
   and cus_user_key <![CDATA[<>]]> #{CUS_USER_KEY}
  </if> 
</select>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Mybatis中resultMap标签和sql标签的设置方式

    目录 resultMap标签和sql标签的设置 1.项目目录 2.数据库中的表的信息 3.配置文件的信息 4.User类 5.IUserDao接口 6.MybatisTest 7.运行结果 resultMap标签的使用规则 自定义结果映射规则 association联合查询 使用association进行分布查询 collection分步查询 resultMap标签和sql标签的设置 1.项目目录 2.数据库中的表的信息 3.配置文件的信息 1.SqlMapConfig.xml文件 <?xml

  • 关于MyBatis中SqlSessionFactory和SqlSession简解

    目录 [1]SqlSessionFactoryBuilder [2]SqlSessionFactory SqlSessionFactory 接口源码 SqlSessionFactory 有六个方法创建 SqlSession 实例 [3]非线程安全的SqlSession 永远不要在一个被管理域中引用SqlSession 语句执行方法 立即批量更新方法 事务控制方法 本地缓存 使用映射器 映射器注解 映射注解示例 mybatis官网中文文档:https://mybatis.org/mybatis-3

  • Mybatis sqlMapConfig.xml中的mappers标签使用

    目录 sqlMapConfig.xml中的mappers标签 mappers(映射配置) 1.1:通过resource加载单个映射文件 1.2:通过mapper接口加载单个映射文件 1.3:批量加载mapper(推荐使用) sqlmapconfig核心标签说明以及配置 配置项详解 配置示例 sqlMapConfig.xml中的mappers标签 mappers(映射配置) 1.1:通过resource加载单个映射文件 < !– 加载映射文件 –> < mappers> < !

  • mysql+mybatis实现存储过程+事务 + 多并发流水号获取

    数据库存储过程 DROP PROCEDURE IF EXISTS `generate_serial_number_by_date`; CREATE PROCEDURE `generate_serial_number_by_date`( IN param_key varchar(100), IN param_org_id bigint, IN param_period_date_format varchar(20), OUT result bigint, OUT current_datestr v

  • 使用Mybatis-Plus时的SqlSessionFactory问题及处理

    目录 使用Mybatis-Plus时的SqlSessionFactory问题 贴一下这两个类的源码,看一眼就明白了 还有MybatisSqlSessionFactoryBean的 springboot+mybatis-plus报错Property'sqlSessionFactory'or'sqlSessionTemplate'are required 使用Mybatis-Plus时的SqlSessionFactory问题 前些日子工作中出现一个问题,项目中使用了MybatisPlus,然后出现了

  • 利用Java如何获取Mybatis动态生成的sql接口实现

    目录 前言 1.编写xml: SqlGenarate.mapper.xml 2.定义接口 3.实现接口 总结 前言 如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号.利用动态 SQL 这一特性可以彻底摆脱这种痛苦.通常使用动态 SQL 不可能是独立的一部分,MyBatis 当然使用一种强大的动态 SQL 语言来改进这种情形,这种语言可以被用在任意的 SQL 映射语句中. 目的:利

  • 聊聊mybatis sql的括号问题

    目录 mybatis sql的括号问题 mybatis多层括号(超过三层)解析不了 mybatis sql的括号问题 因为一段sql  要关联 A,B,C三个表,查三个表里的数据 一开始写的是 select * from a,b,c      结果出来很多重复数据 而三个表是用id关联的 所以改成 select * from a  where id in (select id from a,b,c 关联条件) 然后在mybatis里在写级联查询 把B,C表里的数据以数组的形式查出来 ok了  

  • 聊聊Mybatis中sql语句不等于的表示

    Mybatis sql语句不等于的表示 如果直接写 select * from user where id <> 217; mybatis就会报语法错误,<>特殊字符需要转义 如下 select * from user where id <> 217; 使用Mybatis的时候,特殊字符需进行转义,如 <> <> & & &apos; ' " " Mybatis 特殊符号(大于,小于,不等于)及常用函数

  • 结合Mybatis聊聊对SQL注入的见解

    目录 Mybatis聊聊对SQL注入的见解 1.sql注入是什么 2.sql注入实例 (1)特殊符号,如 ' 和 .等 (2)sql语句的注入 (3)通过sql语句的in和order by进行注入 3.mybatis框架下如何解决sql注入问题 (1)用#{param}替换所有的${param} (2)对用户输入的数据进行sql注入校验 (3)要对用户的权限进行区分 (4)更高级别的验证 一种常见的Mybatis的SQL注入 一.场景重现 二.代码展示 三.模拟请求&回应结果 四.小结一下 My

  • SpringMVC4+MyBatis+SQL Server2014实现数据库读写分离

    前言 基于mybatis的AbstractRoutingDataSource和Interceptor用拦截器的方式实现读写分离,根据MappedStatement的boundsql,查询sql的select.insert.update.delete,根据起判断使用读写连接串. 开发环境 SpringMVC4.mybatis3 项目结构 读写分离实现 1.pom.xml <dependencies> <dependency> <groupId>junit</grou

  • MyBatis SQL xml处理小于号与大于号正确的格式

    当我们需要通过xml格式处理sql语句时,经常会用到< ,<=,>,>=等符号,但是很容易引起xml格式的错误,这样会导致后台将xml字符串转换为xml文档时报错,从而导致程序错误. 这样的问题在iBatiS中或者自定义的xml处理sql的程序中经常需要我们来处理.其实很简单,我们只需作如下替换即可避免上述的错误: 原符号   <    <=    >    >=     &      '       " 替换符号 < <= &

  • MyBatis sql中test如何判断Boolean

    目录 mybatis sql中test判断Boolean 三种方式 if标签判断boolean类型的写法 例子方法 在入参flag不为空的情况下直接判断 mybatis sql中test判断Boolean 三种方式 <select id="queryAddress" resultType="com.caox.model.Address">         select id, address, remark         from address wh

  • 聊聊Mybatis反射之ObjectWrapper的使用

    目录 获取类属性的类MetaClass ObjectWrapper 总结 获取类属性的类MetaClass MetaClass主要是用于获取类的属性,它的构造方法中通过ReflectorFactory工厂把class封装成Reflector private MetaClass(Class<?> type, ReflectorFactory reflectorFactory) { this.reflectorFactory = reflectorFactory; this.reflector =

  • Mybatis SQL运行流程源码详解

    概述 源码就是能够被用来执行,生成机器能够识别的代码,通过开源源码,可以引用其功能. 重要性 1.mybatis中的sql执行,不仅要知道返回的结果是什么,还需要知道这结果是怎么来的,经过了怎样的处理,只有知道了这样的原理,碰到问题才能更好的知道问题出在那个环节. 2.能更好的扩展应用程序,可以做到代码的复用,减少开发成本和时间. 3.学习其中的设计思想能够在其他应用得已应用. 步骤 源码阅读,可以从测试用例着手,每个源码,多有大师们写的测试用例,咱们可以用大师们写的测试用例进行相关功能的测试,

  • 详细聊聊Mybatis中万能的Map

    目录 万能的Map demo map 实现add user map 实现通过id查询 多个参数可以使用Map进行传参 总结 万能的Map 假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们需要考虑使用Map 简单来说,map你用什么参数就写什么参数,而实体类需要写所有参数. map不需要名称完全对应,通过键的映射取值,实体类必须要求和实体类中属性名字一样 map传递参数,直接在sql中取出key即可 [parameterType="map"] 对象传递参数,直接在sql中取对

  • 详细聊聊关于sql注入的一些零散知识点

    目录 零.本文涉及知识点 一.sqlmap写一句马的过程(-- os-shell) 1.1 简述过程 1.2 一个小问题 二.堆叠注入: 2.1 什么是堆叠注入 2.2 如何判断存在堆叠注入? 2.3 局限性 三.union injection(联合注入) 3.1 原理 3.2 与堆叠注入的区别 四.常见的sql注入绕过姿势 4.1 Waf特性: 4.2 绕waf的核心思路: 4.3 常见的思路 五.Sql注入预编译与常见绕过姿势 5.1 概述 5.2 具体方式 5.2.1 ASC/DESC 5

随机推荐