我是靠谱客的博主 结实宝马,最近开发中收集的这篇文章主要介绍动态sql (sql-if,sql-foreach),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

    • 1. UserMapper接口
    • 1. sql-if
    • 2. sql-foreach
    • 3. 多条件查询和根据多个id查询测试

say sth..
每当我回顾以前写jdbc分页,多条件查询时,我那是有多痛苦。
特别是当我拼接条件时,对象.getName 又是判断null,又是判断空字符串的。
还得拿一个集合来装条件。以及列名后面的逗号,where 条件的空格。
我/(ㄒoㄒ)/~~
搞得我特别压抑,好了,现在mybatis的sql标签来甜我了。( ̄︶ ̄*))

jdbc规范下的动态查询

1. UserMapper接口

user表字段userId userName userPassword
查询涉及到
 - where不确定条件查询 sql-if
 - in 多条件查询
 - 不提供实体类
  • 关于mybatis环境搭建
  • 关于代理开发接口实现
package cn.bitqian.dao;

import cn.bitqian.entity.User;

import java.util.List;

/**
 * @author echo lovely
 * @date 2020/9/11 15:36
 */
public interface UserMapper {

    public List<User> queryUserByCondition(User user);

    public List<User> queryUserByIds(List<Integer> ids);
}

1. sql-if

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
        
<mapper namespace="cn.bitqian.dao.UserMapper">

    <!--sql 片段的抽取 statement标签内使用include标签进行引用-->
    <sql id="selectUserPart">
        select * from users1
    </sql>

    <!-- 根据id or name or pwd 查询 -->
    <select id="queryUserByCondition" parameterType="user" resultType="user">
        <include refid="selectUserPart"></include>
        <where>
            <if test="userId != 0 and userId != null">
                and userid = #{userId}
            </if>
            <if test="userName != null">
                and username = #{userName}
            </if>
            <if test="userPassword != null">
                and userpassword = #{userPassword}
            </if>
        </where>
    </select>
</mapper>

2. sql-foreach

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cn.bitqian.dao.UserMapper">

    <select id="queryUserByIds" parameterType="list" resultType="user">
        select * from users1 <!-- where userid in (1, 2, 3) -->
        <where>
            <!--
                collection=array
                open, end 拼接sql写死的片段
                separator 为分隔符
                item 为list中的每个元素
             -->
            <foreach collection="list" open="userid in (" close=")" separator="," item="userId">
                #{userId}
            </foreach>
        </where>
    </select>

</mapper>

3. 多条件查询和根据多个id查询测试

import cn.bitqian.dao.UserMapper;
import cn.bitqian.entity.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * 动态sql测试
 * @author echo lovely
 * @date 2020/9/11 15:50
 */
public class DynamicDemoTest {

    public SqlSession getSqlSession() {
        try {
            InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
            // 默认提交事务
            return sqlSessionFactory.openSession(true);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

    @Test
    public void test1() {
        SqlSession sqlSession = getSqlSession();

        if (sqlSession != null) {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

            User user = new User();
            // user.setUserId(1);
            user.setUserName("rose");
            user.setUserPassword("love jack");
            List<User> userList = userMapper.queryUserByCondition(user);

            System.out.println(userList);

            sqlSession.close();
        }

    }

    @Test
    public void test2() {
        SqlSession sqlSession = getSqlSession();

        if (sqlSession != null) {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            ArrayList<Integer> list = new ArrayList<>();
            list.add(1);
            list.add(3);

            // 查询user id 为1或者为2的数据记录
            System.out.println(userMapper.queryUserByIds(list));
            sqlSession.close();
        }
    }

}

最后

以上就是结实宝马为你收集整理的动态sql (sql-if,sql-foreach)的全部内容,希望文章能够帮你解决动态sql (sql-if,sql-foreach)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部