https://blog.csdn.net/MinggeQingchun/article/details/110957384
1、查询语句
-
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
-
selec...
-
</select>
2、插入语句
-
<insert id="insert" parameterType="pojo.OrderTable" >
-
insert into ordertable(...)
-
values(...)
-
</insert>
3、删除语句
-
<delete id="deleteByPrimaryKey" parameterType="java.lang.String" >
-
delete from ordertable
-
where order_id = #{orderId,jdbcType=VARCHAR}
-
</delete>
4、修改语句
-
<update id="updateByPrimaryKey" parameterType="pojo.OrderTable" >
-
update ordertable
-
set cid = #{cid,jdbcType=VARCHAR},
-
address = #{address,jdbcType=VARCHAR},
-
create_date = #{createDate,jdbcType=TIMESTAMP},
-
orderitem_id = #{orderitemId,jdbcType=VARCHAR}
-
where order_id = #{orderId,jdbcType=VARCHAR}
-
</update>
需要配置的属性
- id="xxxx" 表示此段SQL执行语句的唯一标识,也是接口的方法名称【必须一致才能找到】
- parameterType="xxxx" 表示SQL语句中需要传入的参数,类型要与对应的接口方法的类型一致
- resultMap="xxx" 定义出参,调用已定义的映射管理器的id的值
- resultType="xxxx" 定义出参,匹配普通Java类型或自定义的pojo 【出参类型若不指定,将为语句类型默认类型,如语句返回值为int】
if标签
用法:
-
<select id="listProduct" resultType="Product">
-
select * from product_
-
<if test="name!=null">
-
where name like concat('%',#{name},'%')
-
</if>
-
</select>
where标签
作用:
标签会进行自动判断:
如果任何条件都不成立,那么就在sql语句里就不会出现where关键字(重点)
如果有任何条件成立,会自动去掉多出来的 and 或者 or。(就不需要我们追加1=1之类的入侵性代码了)
用法:
-
<select id="listProduct" resultType="Product">
-
select * from product_
-
<where>
-
<if test="name!=null">
-
and name like concat('%',#{name},'%')
-
</if>
-
<if test="price!=null and price!=0">
-
and price >
-
</if>
-
</where>
-
</select>
set标签
作用是:
与where标签类似的,在update语句里也会碰到多个字段相关的问题。 在这种情况下,就可以使用set标签。
其效果与where标签类似,有数据的时候才进行设置。
用法:
-
<update id="updateProduct" parameterType="Product" >
-
update product_
-
<set>
-
<if test="name != null">name=#{name},</if>
-
<if test="price != null">price=#{price}</if>
-
</set>
-
where id=#{id}
-
</update>
trim标签
作用是:
trim 用来定制想要的功能,比如where标签就可以用
用法:
-
<select id="listProduct" resultType="Product">
-
select *from product_
-
<trim prefix="WHERE" prefixOverrides="AND |OR ">
-
<if test="name!=null">
-
and name like concat('%',#{name},'%')
-
</if>
-
<if test="price!=null and price!=0">
-
and price > #{price}
-
</if>
-
</trim>
-
</select>
-
-
<update id="updateProduct" parameterType="Product" >
-
update product_
-
<trim prefix="SET" suffixOverrides=",">
-
<if test="name != null">name=#{name},</if>
-
<if test="price != null">price=#{price}</if>
-
</trim>
-
where id=#{id}
-
</update>
- trim 用来定制想要的功能,比如where标签就可以用
-
<trim prefix="WHERE" prefixOverrides="AND |OR ">
-
...
-
</trim>
来替换
set标签就可以用
-
<trim prefix="SET" suffixOverrides=",">
-
...
-
</trim>
来替换
运行set标签中的代码,其效果是一样的。
choose when otherwise 标签
作用是:
有任何任何条件符合,就进行条件查询,
否则就只使用id>1这个条件(即前面的标签都不符合条件)。
也就相当于if···········else
Mybatis里面没有else标签,但是可以使用when otherwise标签来达到这样的效果。
用法:
-
-
-
-
-
<mapper namespace="com.myjava.pojo">
-
<select id="listProduct" resultType="Product">
-
SELECT * FROM product_
-
<where>
-
<choose>
-
<when test="name != null">
-
and name like concat('%',#{name},'%')
-
</when>
-
<when test="price !=null and price != 0">
-
and price > #{price}
-
</when>
-
<otherwise>
-
and id >1
-
</otherwise>
-
</choose>
-
</where>
-
</select>
-
</mapper>
foreach标签
作用是:
foreach标签通常用于in 这样的语法里。
用法(接收一个List集合参数):
-
-
-
-
-
<mapper namespace="com.myjava.pojo">
-
<select id="listProduct" resultType="Product">
-
SELECT * FROM product_
-
WHERE ID in
-
<foreach item="item" index="index" collection="list"
-
open="(" separator="," close=")">
-
#{item}
-
</foreach>
-
</select>
-
</mapper>
bind标签
bind标签就像是再做一次字符串拼接,网上也有说叫绑定,差不多意思,只是方便后续的使用。
用法:
-
-
-
-
-
<mapper namespace="com.myjava.pojo">
-
-
<select id="listProduct" resultType="Product">
-
<bind name="likename" value="'%' + name + '%'" />
-
select * from product_ where name like #{likename}
-
</select>
-
-
</mapper>
sql片段标签
作用是:
通过该标签可定义能复用的sql语句片段,在执行sql语句标签中直接引用即可。
这样既可以提高编码效率,还能有效简化代码,提高可读性。
用法:
-
<!--定义sql片段-->
-
<sql id="orderAndItem">
-
o.order_id,o.cid,o.address,o.create_date,o.orderitem_id,i.orderitem_id,i.product_id,i.count
-
</sql>
-
<select id="findOrderAndItemsByOid" parameterType="java.lang.String" resultMap="BaseResultMap">
-
select
-
<!--引用sql片段-->
-
<include refid="orderAndItem" />
-
from ordertable o
-
join orderitem i on o.orderitem_id = i.orderitem_id
-
where o.order_id = #{orderId}
-