zoukankan      html  css  js  c++  java
  • 05_mybatis动态sql

    1.sql片段

    1.sql片段****

    mybatis核心 对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。

    2.需求

    用户信息综合查询列表和用户信息查询列表总数这两个statement的定义使用动态sql。

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

    3.定义sql片段**
      <!--定义sql片段-->
        <!--id:标识sql片段-->
        <!--经验:基于单表来定义sql片段,这样可以提高可重用性,一般不要包含where-->
        <sql id="query_user_where">
            <!--where 可以去掉条件中的第一个and-->
                <if test="userCustom!=null">
                    <if test="userCustom.sex!=null and userCustom.sex!=''">
                        and user.sex=#{userCustom.sex}
                    </if>
                    <if test="userCustom.username!=null and userCustom.username!=''">
                        and user.username like '%${userCustom.username}%'
                    </if>
                </if>
        </sql>
    
    4.引用sql片段
     <select id="findUserList" parameterType="UserQueryVo" resultType="UserCustom">
            select * from user
           <where>
              <!-- 引用sql片段,如果不在同一个mapper文件中,这时要加namespace-->
               <include refid="query_user_where"/>
           </where>
        </select>
    

    2.foreach

    1.需求

    在用户查询列表和查询总数的statement中增加多个id输入查询。

    sql语句如下:

    两种方法:

    SELECT * FROM USER WHERE id=1 OR id=10 OR id=16
    <!-- 法2-->
    SELECT * FROM USER WHERE id IN(1,10,16)
    
    2.在输入参数类型中添加List ids传入多个id**
    /**
     * Description: 查询时,将多个对象的属性集合在此类
     * User: jiatp
     * Date:2019/9/3 0003 下午 4:39
    */
    
    public class UserQueryVo {
        //用户的查询条件
        private UserCustom userCustom;
        //传入多个id
        private List<Integer> ids;
        //可以包装其它信息,商品,订单 等
    
        public List<Integer> getIds() {
            return ids;
        }
    
        public void setIds(List<Integer> ids) {
            this.ids = ids;
        }
    
        public UserCustom getUserCustom() {
            return userCustom;
        }
    
        public void setUserCustom(UserCustom userCustom) {
            this.userCustom = userCustom;
        }
    }
    
    
    3.修改mapper.xml
     <!--定义sql片段-->
        <!--id:标识sql片段-->
        <!--经验:基于单表来定义sql片段,这样可以提高可重用性,一般不要包含where-->
        <sql id="query_user_where">
            <!--where 可以去掉条件中的第一个and-->
                <if test="userCustom!=null">
                    <if test="userCustom.sex!=null and userCustom.sex!=''">
                        and user.sex=#{userCustom.sex}
                    </if>
                    <if test="userCustom.username!=null and userCustom.username!=''">
                        and user.username like '%${userCustom.username}%'
                    </if>
                    <if test="ids!=null">
                        <!--<foreach collection="ids" open="and ("  close=")" item="user_id" separator="or">-->
                              <!--id=#{user_id}-->
                        <!--</foreach>-->
                        <foreach collection="ids" open="and id in("  close=")" item="user_id" separator=",">
                            #{user_id}
                        </foreach>
                    </if>
                </if>
        </sql>
    
    4.测试代码
      //综合查询,用户的所有信息 foreach
        @Test
        public void findUserListForEach(){
            SqlSession sqlSession = sqlSessionFactory.openSession();
            UserQueryVoMapper mapper = sqlSession.getMapper(UserQueryVoMapper.class);
            //创建包装对象
            UserQueryVo userQueryVo = new UserQueryVo();
            UserCustom userCustom = new UserCustom();
            //由于设置了动态sql
             userCustom.setSex("1");
            //userCustom.setUsername("李四");
            userQueryVo.setUserCustom(userCustom);
            //加入多个id进行查询
            List<Integer> ids = new ArrayList<Integer>();
            ids.add(1);
            ids.add(10);
            ids.add(22);
            userQueryVo.setIds(ids);
            //调用查询
            List<UserCustom> userList = mapper.findUserList(userQueryVo);
            for(UserCustom us:userList) {
                System.out.println(us);
            }
        }
    }
    

    持续补充中…

  • 相关阅读:
    制作IOS 后台极光推送时,遇到的小问题
    如何实现IOS_SearchBar搜索栏及关键字高亮
    使用WKWebView替换UIWebView,并且配置网页打电话功能
    [Creating an image format with an unknown type is an error] on cordova, ios 10
    面向对象语言还需要指针么?
    推荐一个简单好用的接口——字典序列化
    ITTC数据挖掘系统(六)批量任务,数据查看器和自由文档
    java的LINQ :Linq4j简明介绍
    别语言之争了,最牛逼的语言不是.NET,也不是JAVA!
    ITTC数据挖掘平台介绍(五) 数据导入导出向导和报告生成
  • 原文地址:https://www.cnblogs.com/jatpeo/p/11767507.html
Copyright © 2011-2022 走看看