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}%‘
时间: 2024-08-25 12:10:26

Mybatis相关SQL操作总结的相关文章

常用SQL操作(MySQL或PostgreSQL)与相关数据库概念

本文对常用数据库操作及相关基本概念进行总结:MySQL和PostgreSQL对SQL的支持有所不同,大部分SQL操作还是一样的. 选择要用的数据库(MySQL):use database_name; help show; 显示可用的数据库列表:show databases; 显示一个数据库内可用的表的列表:show tables; 显示表列:show columns from 一个表名; /describe 表名;  示例:show columns from customers;    desc

mybatis动态sql以及分页

1.mybatis动态sql 2.模糊查询 3.查询返回结果集的处理 4.分页查询 5.特殊字符处理 1.mybatis动态sql If.trim.foreach If 标签判断某一字段是否为空 <select id="list4" resultType="java.util.Map" parameterType="java.util.Map"> select * from t_mvc_book <where> <i

MyBatis动态SQL小结

p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 10.5pt; font-family: 等线 } .MsoChpDefault { font-family: 等线 } div.WordSection1 { } ol { margin-bottom: 0cm } ul { margin-bottom: 0cm } Mybati

log4j配置打印mybatis的sql到控制台(复制)

log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n #log4j.app

mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句

mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. choose (when,otherwize) ,相当于java 语言中的 switch ,与 jstl 中的choose 很类似.3. trim (对包含的内容加上 prefix,或者 suffix 等,前缀,后缀)4. where (主要是用来简化sql语句中where条件判断的,能智能的处理 a

php的CI框架相关数据库操作

在使用之前首先应该配置数据库的参数,详见文件application/config/database.php,里面包含主机名,登陆用户名,登录密码,数据库名,编码信息等. 在配置成功后,可以简单的调用:$this->load->database();进行数据库链接. 然后可以使用$this->db->query(),$this->db->insert()等方法对数据库进行相应sql操作,例如下面给出的包含CI框架封装查询特性的相关语句: $sql = "SELE

mybatis 动态sql语句

mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类: 1. if 语句 (简单的条件判断) 2. choose (when,otherwize) ,相当于java 语言中的 switch ,与 jstl 中的choose 很类似. 3. trim (对包含的内容加上 prefix,或者 suffix 等,前缀,后缀) 4. where (主要是用来简化sql语句中where条件判断的,能智能的

mybatis 动态sql和参数

mybatis 动态sql 名词解析 OGNL表达式 OGNL,全称为Object-Graph Navigation Language,它是一个功能强大的表达式语言,用来获取和设置Java对象的属性,它旨在提供一个更高的更抽象的层次来对Java对象图进行导航. OGNL表达式的基本单位是"导航链",一般导航链由如下几个部分组成: 属性名称(property) 方法调用(method invoke) 数组元素 所有的OGNL表达式都基于当前对象的上下文来完成求值运算,链的前面部分的结果将

ArcSDE10.1配置Oracle 监听器来使用SQL操作ST_Geometry(个人改动版)

发了两天的时间来解决配置Oracle 监听器来使用SQL操作ST_Geometry的配置,网上搜索一大片,结果真正找到的只有方法可用,下面把这个方法我个人在总结下. ArcSDE10.1配置Oracle 监听器来使用SQL操作ST_Geometry和其他版本的配置区别还是有很多不同的,不过不像网上说的配置那么复杂也不需要配置监听,下面我按照步骤说下配置方法: 一.配置user_libraries库 找到arcgsSde下面对应库的路径,例如我的路径是在D:\Program Files\ArcGI