• Mybatis相关SQL操作总结


    1、resultMap和resultType等参数以及结果集

      <select id="getApplicationByRoleCode" resultType="platform.appframe.entity.AfaApplication" parameterType="java.lang.String" >
       select distinct   <include refid="Application_Base_Column_List" />
          from afa_application a
          left join afa_auth_function b
        on a.app_id = b.app_id
         where b.party_code =#{roleCode}
      </select>

    resultMap:用于操作本map里头的表,即操作在当前映射文件里头的指定的map。

    resultType:用于操作其他map里头的表。

    parameterType:可以为java.lang.String、也可以为一个对象比如:appframe.entity.AfaAppMenu

    parameterMap:比如:appframe.entity.AfaAppMenu

    2、map里头没有的参数在mapper里头要定义清楚

        <select id="getMenusByRoleCodes" resultMap="afaAppMenuMap">
            SELECT 
            <include refid="Base_Column_List" /> 
              FROM AFA_APP_MENU 
              WHERE MENU_CODE IN 
                      (SELECT a.FUNC_CODE
                           FROM AFA_APP_FUNCTION A
                          INNER JOIN AFA_AUTH_FUNCTION B
                             ON A.FUNC_CODE = B.FUNC_CODE
                          WHERE B.PARTY_CODE in 
            <foreach collection="roleCodes" item="roleCode" index="index" open="(" separator="," close=")">
                  #{roleCode}
            </foreach>
            <if test="appId!=null">
               AND A.APP_ID = #{appId}
            </if>
            )
        </select>

    在mapper里头要定义

    public interface AfaAppMenuMapper extends Mapper<AfaAppMenu> {    
        public List<AfaAppMenu> getMenusByRoleCodes(@Param("roleCodes")List<String> roleCodes,@Param("appId")String appId);
    }

    否则会报Parameter 'roleCodes' not found. Available parameters are [1, 0, param1, param2]

    3、分页操作

    public Page<AfaAppMenu> queryAfaAppMenuPage(@Param("searcher")Searcher searcher,@Param("page")Page<AfaAppMenu> page);

    mybatis里头定义:

        <select id="queryAfaAppMenuPage" resultMap="afaAppMenuMap">
            SELECT 
            <include refid="Base_Column_List" />
             FROM AFA_APP_MENU
            <trim prefix="where"  prefixOverrides="and |or">  
                <if test="searcher != null and searcher.__QUERYCON != null">  
                    ${searcher.__QUERYCON}
                </if>      
            </trim>
            ORDER BY SORT_NO ASC
        </select>

    4、不将实体映射到数据库中

    通过@Transient注解,该注解的对象在数据库中实际不存在。

     @Transient
        private String context;
        
        public String getMenuAppId() {
            return menuAppId;
        }
    
        public void setMenuAppId(String menuAppId) {
            this.menuAppId = menuAppId;
        }
    <result column="CONTEXT" jdbcType="VARCHAR" property="context" />

     5、相关语法整理

    foreach 语法

    方式一:List<String>方式 
    <foreach collection="roleCodes" item="roleCode" index="index" open="(" separator="," close=")"> #{roleCode} </foreach>
    方式二:List<object>方式
    <foreach item="func" index="index" collection="appfunc" open="(" separator="," close=")"> #{func.funcCode} </foreach>

    if 语法

    添加前后缀:
            <trim prefix="where"  prefixOverrides="and |or">  
                <if test="searcher != null and searcher.__QUERYCON != null">  
                    ${searcher.__QUERYCON}
                </if>      
            </trim>

    判断等于某个字符串:
            <if test="appId!='app_menu_id'">
               AND A.APP_ID = #{appId}
            </if>

    sql定义 

      定义:
    <sql id="Application_Base_Column_List"> a.APP_ID,a.APP_NAME,a.APP_TYPE,a.IS_OPEN,a.CONTEXT,a.IP,a.PORT,a.PROTOCOL,a.APP_DESC,a.TENANT_ID,a.LOGOUT_URL,a.LAST_MODIFY_TIME </sql>
    使用:
    <include refid="Application_Base_Column_List"/>

     like语法

    方式一:通过concat添加%:
    WHERE FUNC_CODE LIKE CONCAT('%',#{key},'%') OR FUNC_NAME LIKE CONCAT('%',#{key},'%') 
    方式二:通过$添加%:
    where
    org_name like '%${orgName}%'
  • 相关阅读:
    拆点问题
    黑球白球
    3n+1b 备忘录方法
    实体entity、JavaBean、Model、POJO、domain的区别
    DB中的读写分离
    Jmeter干货 不常用却极其有用的几个地方
    自动化测试 自动化框架需要满足的事项
    自动化测试面试题库
    测试工程师面试准备之----测试基础
    别人的面试经历 软件测试工程师
  • 原文地址:https://www.cnblogs.com/shawWey/p/6610427.html
Copyright © 2020-2023  润新知