mybatis 动态操作Sql语句

动态SQL:
动态语句分别适用于什么场合;
实例展示
主要包括:foreach/ where if/ trim if(分组和where查询)/ set if/ choose-when(switch)/ include
【1】如何进行大批量用户的添加:foreach 实现动态添加;
public int batchSaveUserBean(@Param(" users")List<userBean>users);
<insert id="batchSaveUserBean" parameterType="java.util.List" useGeneratedKeys="true">
<!-- insert into table (column1,column2,……)values (),(),()…… -->
insert into t_user(user_name,sex,address) values
<foreach collection="users" item="user" separator=",">
(#{user.name},${user.sex},#{user.address})
</foreach>
</insert >
separator: 以什么符号结尾;

1、 多参数的对象userbean查询:Map做为参数,则无需再使用其他的参数,因为MAP是可以放多个参数的;
* @param map
public List<UserBean> queryUserListByMap(@Param("map")Map map);
<!-- MAP中取值方式依旧是采用#或者$,但是我们在取值的时候,是通过key取value -->
<select id="queryUserListByMap" resultMap=" userMap">
select user_name,address from t_user where user_name like CONCAT(#{ map.name},'%') and sex = ${ map.sex}
</select>


2、在mybatis可以使用 include与sql的组合,来完成重复代码的引用;适用于where、orderby
include里面直接调用sql里面的代码过来;
<select id="countUserToPagerByMap" resultType="int">
select count(id) from t_user
< include refid="commonSql"></include>
</select>

<sql id="commonSql">
<!-- where标签会 直接忽略紧随其后的and或者or -->
< where>
<!-- 如果传递的参数是Map,那么test里面的表达式,只能取键来进行比较,不能直接使用#或者$ -->
<if test=" map.name != null">
and user_name like CONCAT(#{map.name},'%')
</if>
<if test="map.sex != null">
and sex = ${map.sex}
</if>
</where>
</sql>

4、if 多条件筛选的时候使用:因此在这种多条件筛选的时候可以直接加and
public int updateUserBean(@Param("user")UserBean user, @Param("id")Long id);
<update id="updateUserBean">
update t_user
<set> //当user.name不为空的时候user_name = #{user.name};
<if test="user.name != null">
user_name = #{user.name},
</if>
<if test="user.sex != null">
sex = #{user.sex},
</if>
<if test="user.address != null">
address = #{user.address},
</if>
</set>
<where>id = ${id}</where>
</update>

5、<trim><if></if></trim>
<trim prefix="WHERE" prefixOverrides="AND |OR " suffix="order by" suffixOverrides="AND |OR " >
<select id="queryUserListByObject" resultType="UserBean">
select user_name as name,address as address from t_user
< trim prefix="where" prefixOverrides="and|or" suffix="order by" suffixOverrides="and|or"> //以where开始,以order by 结尾;
<if test="user.name != null">
and user_name like CONCAT(#{user.name},'%') and sex = ${user.sex}
</if>
</ trim>
id desc;
</select>

6、<choose><when></when></choose> 类似于Swift()
7、修改的时候用<set>,当修改的输入框的时候判断输入的框体有信息的才修改设置
案例4已经使用;
8、在查询大于某天,小于某天的时候,会使用到< >符号,这个和标签很相似,这就需要使用到静态块, <![CDATA[ < ]]> 静态块的语句在解析的时候,会当做字符串来解析,不会当做标签来解析。<![CDATA[ and age>5 and age <10 ]]>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值