mybatis逆向工程编写动态sql
时间: 2023-11-28 14:38:46 浏览: 104
MyBatis逆向工程可以自动生成Java Bean和Mapper XML文件,但是生成的Mapper XML文件中的SQL语句是静态的,不能满足所有的需求。因此,我们需要手动编写动态SQL来满足复杂的查询需求。
MyBatis提供了强大的动态SQL功能,可以根据不同的条件生成不同的SQL语句。以下是动态SQL的几种常用方式:
1. if语句
if语句可以根据条件生成不同的SQL语句,如下所示:
```
<select id="selectByCondition" parameterType="Map" resultType="User">
select * from user
<where>
<if test="name != null and name != ''">
and name like concat('%', #{name}, '%')
</if>
<if test="age != null">
and age = #{age}
</if>
</where>
</select>
```
上面的例子中,如果查询条件中有name属性,则生成类似于“and name like '%xxx%'”这样的SQL语句,如果有age属性,则生成类似于“and age = xxx”这样的SQL语句。
2. choose、when、otherwise语句
choose、when、otherwise语句可以根据不同的条件生成不同的SQL语句,如下所示:
```
<select id="selectByCondition" parameterType="Map" resultType="User">
select * from user
<where>
<choose>
<when test="name != null and name != ''">
and name like concat('%', #{name}, '%')
</when>
<when test="age != null">
and age = #{age}
</when>
<otherwise>
and id < 10
</otherwise>
</choose>
</where>
</select>
```
上面的例子中,如果查询条件中有name属性,则生成类似于“and name like '%xxx%'”这样的SQL语句,如果有age属性,则生成类似于“and age = xxx”这样的SQL语句,否则生成类似于“and id < 10”这样的SQL语句。
3. foreach语句
foreach语句可以遍历集合或数组,生成多个相同的SQL语句,如下所示:
```
<select id="selectByIds" parameterType="List" resultType="User">
select * from user
where id in
<foreach item="id" collection="list" open="(" separator="," close=")">
#{id}
</foreach>
</select>
```
上面的例子中,如果传入的List中有3个元素,分别为1、2、3,则生成类似于“select * from user where id in (1,2,3)”这样的SQL语句。
以上是MyBatis逆向工程编写动态sql的常用方式,可以根据不同的需求选择不同的方式来生成SQL语句。
阅读全文