mybatis常用

目录

1、模糊查询的四种方式

2、参数为空的几种判断

3、trim前后缀prefix,suffix,prefixOverrides,suffixOverrides

4、select count (1)和select count(*):计算一共有多少符合条件的行  DISTINCT 去重

5、select t.*与select *

6、if test 后跟String字符串


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"'>
		

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值