zoukankan      html  css  js  c++  java
  • mybatis 的动态 SQL 语句

    动态 SQL 之 <if> 标签

      根据实体类的不同取值,使用不同的 SQL 语句来进行查询。比如在 id 如果不为空时可以根据 id 查询,
      如果 username 不为空时还要加入用户名作为条件。

      持久层 Dao 接口

        List<User> findByCondition(User user);

      持久层 Dao 映射配置

        <select id="findByCondition" parameterType="com.fgy.domain.User" resultType="com.fgy.domain.User">
          select * from user where 1=1
          <if test="username != null and username != ''">
            and username = #{username}
          </if>
          <if test="sex != null">
            and sex = #{sex}
          </if>
        </select>
      测试:
        @Test
        public void testFindByCondition() {
        User user = new User();
        user.setUsername("");
        user.setSex("男");
        List<User> users = userDao.findByCondition(user);
        // List<User> users = userDao.findByCondition(null);
        System.out.println(users);
        }
    动态 SQL 之 <where> 标签:为了简化上面 where 1=1 的条件拼装,可以采用<where>标签
      持久层 Dao 映射配置
        <select id="findByCondition" parameterType="com.fgy.domain.User" resultType="com.fgy.domain.User">
          select * from user
          <where>
            <if test="username != null and username != ''">
              and username = #{username}
            </if>
            <if test="sex != null">
              and sex = #{sex}
            </if>
          </where>
        </select>
    动态标签之 <foreach> 标签
      持久层 Dao 接口
        List<User> findUserInIds(QueryVo vo);
      持久层 Dao 映射配置
        <select id="findUserInIds" parameterType="com.fgy.domain.QueryVo" resultType="com.fgy.domain.User">
        select * from user
        <where>
            <if test="ids != null and ids.size() > 0">
              <foreach collection="ids" open="and id in (" close=")" item="id" separator=",">
                #{id}
              </foreach>
            </if>
          </where>
        </select>

        <foreach>标签用于遍历集合,它的属性:
          collection:代表要遍历的集合元素,注意编写时不要写#{}
          open:代表语句的开始部分
          close:代表结束部分

          item:代表遍历集合的每个元素,生成的变量名
          sperator:代表分隔符

      测试:

        @Test
        public void testFindUserInIds() {
          QueryVo vo = new QueryVo();
          List<Integer> ids = new ArrayList<>();
          ids.add(1);
          ids.add(2);
          ids.add(3);
          vo.setIds(ids);
          List<User> users = userDao.findUserInIds(vo);
          System.out.println(users);
        }
    mybatis 中简化编写的 SQL 片段:Sql 中可将重复的 sql 提取出来,使用时用 include 引用即可,最终达到 sql 重用的目的。
      定义代码片段:

        <!-- 抽取重复的语句代码片段 -->
        <sql id="defaultSql">
          select * from user
        </sql>

      引用代码片段:

        <!-- 配置查询所有操作 -->
          <select id="findAll" resultType="user">
            <include refid="defaultSql"></include>
          </select>
        <!-- 根据 id 查询 -->
          <select id="findById" resultType="UsEr" parameterType="int">

            <include refid="defaultSql"></include>
            where id = #{uid}
          </select>

  • 相关阅读:
    idea添加类注释和方法注释
    蓝桥杯ALGO-1,区间k大数查询
    personalblog
    ul+li水平居中的几种方法
    前端ps部分
    帝国cms-tab
    帝国cms判断某一字段是否为空
    帝国cms建站总结-(分页)
    Js获取验证码倒计时
    前端截取字符串:JS截取字符串之substring、substr和slice详解
  • 原文地址:https://www.cnblogs.com/roadlandscape/p/12291457.html
Copyright © 2011-2022 走看看