目录
3、trim前后缀prefix,suffix,prefixOverrides,suffixOverrides
4、select count (1)和select count(*):计算一共有多少符合条件的行 DISTINCT 去重
1、模糊查询的四种方式
--1、硬解
<if test="username != null and username != ''">
and userName like "%"#{username,jdbcType=VARCHAR}"%"
</if>
<if test="params.tel != null and params.tel != '' ">
and tel like '%${params.tel}%'
</if>
--2、concat
<if test="username != null and username != ''">
and userName like concat('%', #{username,jdbcType=VARCHAR},'%')
</if>
--3、使用标签首先在<select>标签下放标签
<bind name="patternUserName" value="'%' + _parameter.getUsername() + '%'" />
--其次看<if>语句
<if test="username != null and username != ''">
and userName like #{patternUserName}
</if>
2、参数为空的几种判断
--String
<if test="tenantCode != null and tenantCode != ''">
and tenant_code = #{tenantCode}
</if>
--boolean
<if test="enable != null">
AND enable = #{enable}
</if>
--list
<if test="acctCodes != null and acctCodes.size>0 ">
and ac.acct_code in
<foreach collection="acctCodes" separator="," item="acctCode" open="(" close=")">
#{acctCode}
</foreach>
</if>
3、trim前后缀prefix,suffix,prefixOverrides,suffixOverrides
SELECT
id, name,interface_url, status,a_desc
FROM customizetest
<trim prefix="where" prefixOverrides="and" >
and status = '***'
<if test="name != null and name !=''">
<if test="custCode != null and custCode != ''">
and name like concat('%', #{name}, '%')
</if>
<if test="id != null and id != ''">
and id = #{ciType}
</if>
</trim>
--也可以直接<where></where>
prefix:在trim标签内sql语句加上前缀。如:prefix:"where",增加trim标签内的前缀where
suffix:在trim标签内sql语句加上后缀。
prefixOverrides:指定去除多余的前缀内容,如:prefixOverrides=“and”,去除trim内多余的前缀"and"。
suffixOverrides:指定去除多余的后缀内容,如:suffixOverrides=",",去除trim内多余的后缀","。
4、select count (1)和select count(*):计算一共有多少符合条件的行 DISTINCT 去重
SELECT count(1) from(
SELECT DISTINCT c.cust
FROM ...................
count (1)并不表示第一个字段,而是表示一个固定值。类似于dao中的字段,这个字段就是固定值1,count(1),就是计算一共有多少个1。count(2),也可以,得到的值完全一样,count('字')也是可以的,返回的值完全是一样的。就是计数。
count(*),执行时会把星号翻译成字段的具体名字,多了一个翻译的动作,结果一样,比固定值的方式效率稍微低一些。
select count(*)和select count(1)的区别:
一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的,假如表没有主键(Primary key), 那么count(1)比count(*)快,如果有主键的话,那主键作为count的条件时候count(主键)最快,如果你的表只有一个字段的话那count(*)就是最快的。
count(*) 跟 count(1) 的结果一样,都包括对NULL的统计,而count(column) 是不包括NULL的统计。
5、select t.*与select *
select t.* 是选出t表的所有信息
select * 是选出 关键字from后面的所有表的信息
如果from 后面只有一个表,那么两者无区别。
SELECT
T.*,id
FROM tablename as t
<!-- from tablename b 一样的 as可省-->
当from后面只有一个表名时,select t.*,id 能用, select *,id为什么不能用?提示“未找到要求的FROM关键字”。
答:select *,id的时候,会把rowid当作表的一个字段来用,而在select t.*,id的时候没有作为所查表的字段。
比如select t.* from tablename t,那么t就是你查的那张表table的别名,后面写的时候,table可以用t代替,简单点,这里的t.*就是查询table表的所有列名,*就是全部的意思
6、if test 后跟String字符串
//方法一:双引号外围,内部+toString
<if test="isPrivFilter != null and isPrivFilter != 'F'.toString()">
//方法二:外部单引号
<if test='isPrivFilter != null and isPrivFilter != "F"'>