动态sql
2019-02-27 本文已影响0人
咸鱼有梦想呀
一、动态sql
mybatis核心对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。
if判断
-
需求
用户信息综合查询列表和用户信息查询列表总数这两个statement的定义使用动态sql。
对查询条件进行判断,如果输入参数不为空才进行查询条件拼接。 -
实现
<select id="findUserByinfo" parameterType="entity.UserQuerVo" resultType="entity.UserCustom">
SELECT * FROM user
<!--<where>可以自动去掉条件中的第一个and -->
<where>
<if test="userCustom.username != null">
<if test="userCustom.username != null and userCustom.username != ''">
and username = #{userCustom.username}
</if>
<if test="userCustom.sex != null and userCustom.sex != ''">
and sex like "%${userCustom.sex}%"
</if>
</if>
</where>
</select>

sql片段
-
需求
将上边实现的动态sql判断代码块抽取出来,组成一个sql片段。其它的statement中就可以引用sql片段。方便程序员进行开发。 -
实现
userMapper.xml
<!--动态sql片段
id:sql片段唯一标识
基于单表来定义sql片段,这样的话这个sql片段可重用性才高,在sql片段可重用性才高
在sql片段不要包括where
-->
<sql id="qusery_user_where">
<if test="userCustom.username != null">
<if test="userCustom.username != null and userCustom.username != ''">
and username = #{userCustom.username}
</if>
<if test="userCustom.sex != null and userCustom.sex != ''">
and sex like "%${userCustom.sex}%"
</if>
</if>
</sql>
<select id="findUserByinfo" parameterType="entity.UserQuerVo" resultType="entity.UserCustom">
SELECT * FROM user
<where>
<!--sql片段引用-->
<include refid="qusery_user_where"></include>
</where>
foreach
向sql传递数组或List,mybatis使用foreach解析
- 需求
在用户查询列表和查询总数的statement中增加多个id输入查询
userMapper.xml
<!--输入list集合 foreach遍历-->
<select id="findUserList" parameterType="entity.UserQuerVo" resultType="entity.UserCustom">
SELECT * FROM user WHERE
<!--collection:指定输入对象中集合属性
item:每次遍历生成对象
open:开始遍历时拼接串
close:结束遍历时拼接串
separator:遍历两个对象中需要拼接的串
-->
<foreach collection="ids" item="id" open="(" close=")" separator="or">
<!--每次遍历需要拼接的串-->
id = #{id}
</foreach>
</select>
UserDaoMapper.java
public UserCustom findUserList(UserQuerVo userQuerVo) throws Exception;
测试
@Test
public void findUserList() throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserDaoMapper userDaoMapper = sqlSession.getMapper(UserDaoMapper.class);
UserQuerVo userQuerVo = new UserQuerVo();
List ids = new ArrayList();
ids.add(1);
userQuerVo.setIds(ids);
UserCustom userList = userDaoMapper.findUserList(userQuerVo);
System.out.println(userList);
}