20191231——动态sql

什么是动态sql
mybatis核心对SQL语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装,生成sql

需求
用户信息综合查询和用户信息综合查询总数

对查询条件进行判断,如果输入参数不为空才进行查询条件拼接

 <select id="findUserList" parameterType="cn.itcast.mybatis.pojo.UserQueryVo" resultType="cn.itcast.mybatis.pojo.UserCustom">
        select * from user
        <where>
            <if test="userCustom != null">
                <if test="userCustom.sex != null and userCustom.sex != ''">
                    user.sex = #{userCustom.sex}
                </if>
                <if test="userCustom.username != null and userCustom.username != ''">
                    user.username like '%${userCustom.username}%'
                </if>
            </if>
        </where>


    </select>

    <!--用户信息总和查询-->
    <select id="findUserCount" parameterType="cn.itcast.mybatis.pojo.UserQueryVo" resultType="int">
        select count(*)  from user
        <where>
            <if test="userCustom != null">
                <if test="userCustom.sex != null and userCustom.sex != ''">
                    user.sex = #{userCustom.sex}
                </if>
                <if test="userCustom.username != null and userCustom.username != ''">
                    user.username like '%${userCustom.username}%'
                </if>
            </if>
        </where>
    </select>

用if进行修改

测试代码

@Test
    public void testFindUserList() throws  Exception{
        //创建usermappper对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //创建mapper对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //调用usermapper方法
        UserQueryVo userQueryVo =  new UserQueryVo();
        UserCustom userCustom = new UserCustom();
//        userCustom.setSex("1");
        userCustom.setUsername("张三丰");
        userQueryVo.setUserCustom(userCustom);
        List<UserCustom> list = userMapper.findUserList(userQueryVo);
        System.out.println(list);

    }

sql片段
抽取代码块,组成一个sql片段,使其他的statement可以引用代码段

基于单表进行定义sql片段,可重用高
sql不要使用where


    <sql id="query_user_where">
            <if test="userCustom != null">
                <if test="userCustom.sex != null and userCustom.sex != ''">
                    user.sex = #{userCustom.sex}
                </if>
                <if test="userCustom.username != null and userCustom.username != ''">
                    user.username like '%${userCustom.username}%'
                </if>
            </if>
    </sql>

使用sql片段

for each标签
如果对sql进行传递数组或者list,就要用到foreac来解析

select * from user where id=1 or id =10 or id =16

发布了658 篇原创文章 · 获赞 39 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_36344771/article/details/103776253