zoukankan      html  css  js  c++  java
  • Mybatis查询

     select查询

              resultType:返回的是一个集合,则是集合元素的类型

              Map<String ,Object>  ====>resultType="map"

              Map<Integer,Employee>====>resultType="mybatis.bean.Employee"限定名)

             引用mapper:<mapper namespace="跟mapper的接口进行绑定"></mapper>

             自定义某个JavaBean的规则        type自定义规则的Java类型            id:唯一id方便引用

     <resultMap  type="mybatis.bean.Employee" id="MyEmp">

                <id   column="id"   property="id"/>

               <result  column="last_name"    property="LastName"/>

    </resultMap>

    id定义主键会有底层有优化、column指定那一列 property指定对应的javaBean属性

    alter  table  tbl_employee  add    constraint   fk_emp_dept

    foreign   key(d_id)   references   tbl_dept(id)    (添加外键约束)

    select     *   from     tbl_employee   e,tbl_dept  d  where  e.d_id=d.id        and e.id=1

    联合查询:级联属性封装  

    association:可以指定联合的javabean对象

    proeprty=”dept“:指定哪个属性是联合的对象

    javaType=指定属性的类型

    association  分步查询:1、先按照员工id查询员工信息

                                                2、根据查询员工信息中的d_id值去部门表查询出部门信息

                                                3、部门设置到员工中去

    流程:使用select指定的方法传入column指定的这列参数的值、查出对象,并封装给property指定的属性

    显示指定每个我们需要更改的配置的值,即使是默认的

    <setting  name="lazyloadingEnabled"   value="true"/>

    <setting  name="aggressivelazyLoading"  value="false"/>

    延迟加载(按需加载)     

    employee====》dept每次查询employee对象的时候,一起查询出来,部门信息在我们使用的时候再去查询

    例:   select  d.id    d.id,    d.dept_name   dept_name,e.id   eid, e.last_name     last_name,e.email    email,e.gender   gender      

                from   tbl_dept         d              

               left    join          tbl_employee       e

               on      d.id=e.d_id

               where    d.id=1

    分段查询

    <!---collectionf:分段查询-->

    <resultMap  type="mybatis.bean.Department"   id="myDeptStep">

                    <id  column="id"   property="id"        />

                    <id   column="dept_name"       property="departmentName"    />

                     <collection         property="emps"

                       select=”mybatis.dao.EmployeeMapperPlus.getEmpstep“        column="id"        fetchType="lazy"    </collection>

    </resultMap>

     <select   id="getDeptByIdStep"            resultMap="myDeptStep">

                   select   id,dept_name       from      tbl_dept      where     id=#{id}

    </select>

    discriminator        鉴别器:mybatis可以使用discriminator判断某列的值,然后根据某列的值改变封装行为。

    动态SQL

    查询的时候如果某些条件没带可能sql拼装会有问题

    1、给where后面加上1=1,以后的条件都and  xxx

    2、mybatis使用where标签来将所有的查询条件包括在内,mybatis就会将where标签中拼装的sql,多出来的and或者or去掉

    IF用法:

    <select       id="getEmpByConditionIf"      resultType="mybatis.bean.Employee">

            select       *         from             tbl_employee

    where

             <if      test="id!=null">

                            id=#{id}

             </if>

            <if           test="lastName!=null             &amp;&amp;     lastName!=&quot;&quot;    ">

                              and      last_Name   like         #{lastName}

              </if>

              <if      test="email!=null       and     email.trim()!=&quot;&quot;     ">

                           and    email=#{email}

              </if>

               <if      test="gender==0   or  gender==1">

                           and   gender=#{gender}

                </if>

           </select>

    Where用法

    <select       id="getEmpsByConditionIf"            resultType="mybatis.bean.Employee">

                       select    *       from      tbl_employee

                                where   1=1

                         <if    test="id!=null">

                                    and      id=#{id}

                         </if>

                          <if      test="lastName!=null    &amp;&amp;         lastName!=&quot;&quot;">

                                    and        last_name      like     #{lastName}

                           </if>

                           <if   test="email!=null   and    email.trim()!=&quot;&quot;">

                                      and   email=#{email}      

                           </if>

                           <if   test="gender==0    or        gender==1">

                                           and             gender=#{gender}

                            </if>

                 </select>

    trim 用法       字符截取 

                     prefix=""  前缀:trim标签中是整个字符串拼串后的结果                    prefix给拼串后的整个字符串加一个前缀

                     prefixOverriders:去掉整个字符串前面多余的字符

                     suffix=”“   后缀:拼串后的整个字符串加一个后缀

                      suffixOverrides:去掉整个字符后面多余的字符

    <select    id="getEmpsByconditiontrim"   resultType="mybatis.bean.Employee">

               select    *   from          tbl_employee

                       <trim         prefix="where"          suffoxOverrides="and">

                                     <if   test =”id!=null“>

                                                 id=#{id}

                                      </if>

                                     <if   test="lastName!=null         &amp;&amp;                lastName!=&quot;&quot;">

                                                   lastname       like  #{lastName}          and

                                     </if>

                                     <if        test="email!=null           and       email.trim()!=&quot;&quot;">

                                                 email=#{email}               and

                                      </if>

                                    <if           test="gender==0             or   gender==1">

                                                  gender=#{gender}  

                                   </if>

                              </trim>

                       <select>

    choose(when,otherwise):分支选择switch-case

    <select        id="getEmpsByConditionChoose"            resultType="mybatis.bean.Employee">

                     select   * from  tbl_employee

                             <where>

                                    <choose>

                                                <when    test="id!=null">

                                                                id=#{id}

                                                  </when>

                                                 <when           test="lastName!=null">

                                                                last_name            like     #{lastname}

                                                  </when>

                                                <when          test="email!=null">

                                                               email=#{email}

                                                </when>

                                                <otherwise>

                                                        gender==0

                                                 </otherwise>                 

                                       </choose>

                               </where>

                           </select>

    where(封装)  set

                    <update     id="updateEmp">

                                update  tbl_employee

                                     set

                                        <if        test="lastname!=null">

                                                       last_name=#{lastname},

                                         </if>

                                       <if         test="email!=null">

                                                     email=#{email},

                                       </if>

                                     <if            test="gender!=null">

                                                         gender=#{gender}

                                    </if>

                                     where  id=#{id}

                                  </update>

    collection:指定要遍历的集合(list类型的参数会特殊处理封装在map中,map的key:list)

    item:将当前遍历出的元素赋值给指定的变量

    separator:每个元素之间分隔符

    open:遍历出所有结果拼接一个开始的字符

    close:遍历出所有结果拼接一个开始的字符

    index:索引(遍历list:index(索引) item当前值          index====>map的key,item==>map的值)

    <select    id="getEmpsByConditionForeach"     resultType="mybatis.bean.Employee">

                  select        *      from   tbl_employee   where   id    in

                       <foreach        collection="ids"    item="item_id"          separator=","            open="where   id    in   ("close") ">

                                #{item_id}

                           </foreach>

                </select>

    批量保存

    <select    id="getEmpsByConditionForeach"     resultType="mybatis.bean.Employee">

    <insert       id="addEmps">

                insert   into    tbl_employee(last_name,email,gender,d_id)

               values

                     <foreach       collection="emps"     item="emp"       sepatator="">

                            (#{emp.lastName},#{emp.eamil},#{emp.gender},#{emp.dept.id})

                     </foreach>

    </select>

  • 相关阅读:
    vue.js小结
    前端js
    前端HTML页面签入微信和APP小结
    angualr引入bootstrap部分效果失效。
    .net面试问到的问题
    C#网页爬虫抓取行政区划
    mysql 更新一个字段(在他的后面添加字符串)
    关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法
    动态生成GridView列
    MSDN_FieldInfo.SetValue
  • 原文地址:https://www.cnblogs.com/cye9971-/p/11163854.html
Copyright © 2011-2022 走看看