动态sql练习
1.Mybatis if 标签
Mybatis 动态SQL里的if标签,其关键代码如下:
<select id="listProduct" resultType="Product">
select * from product_
<if test="name!=null">
where name like concat('%',#{name},'%')
</if>
</select>
其作用是:如果没有传参数name,那么就查询所有,如果有name参数,那么就进行模糊查询。
这样只需要定义一条sql语句即可应付多种情况了,在测试的时候,也只需要调用这么一条sql语句listProduct 即可。
Product.xml
TestMybatis.java
运行结果:
2.Mybatis where标签。
where 标签的用途:如果要进行多条件判断,那么可以通过<where>标签来解决,其关键代码如下:
<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 > #{price}
</if>
</where>
</select>
<where>标签会进行自动判断
如果任何条件都不成立,那么就在sql语句里就不会出现where关键字
如果有任何条件成立,会自动去掉多出来的 and 或者 or。
set标签
与where标签类似的,在update语句里也会碰到多个字段相关的问题。 在这种情况下,就可以使用set标签,其关键代码如下:
<set>
<if test="name != null">name=#{name},</if>
<if test="price != null">price=#{price}</if>
</set>
trim标签
trim 用来定制想要的功能
比如where标签就可以用
<trim prefix="WHERE" prefixOverrides="AND |OR ">
...
</trim>
来替换。
3.Mybatis choose标签
Mybatis里面没有else标签,但是可以使用when otherwise标签来达到这样的效果。
<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>
其作用是: 提供了任何条件,就进行条件查询,否则就使用id>1这个条件。
修改Product.xml
修改TestMybatis.java
查询结果如下:
查询结果起到了id>1的效果。
4.Mybatis foreach 标签
foreach标签通常用于in 这样的语法里,其关键代码如下:
SELECT * FROM product_
WHERE ID in
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
利用foreach标签,查询出id等于1,3,5的数据出来。
Product.xml
TestMybatis.java
查询结果如下:
Mybatis 分页
首先,先将数据库数据表Category_中的数据清除,然后新增100条数据
结果如下:
然后,修改Category.xml代码,新增limit
最后,通过注解方式进行测试,结果如下:
Mybatis PageHelper
因为是第三方插件,首先导入两个jar包,pagehelper-5.1.0-beta2.jar,jsqlparser-1.0.jar。
然后,配置插件,在mybatis-config.xml中,添加15-19行的代码,表示开启PageHelper插件
修改Category.xml,24-26行的limit注释掉,因为分页相关工作,会由PageHelper去做掉,不需要自己去写了。
进行分页查询,
结果如下: