IBATIS动态SQL--<dynamic>[email protected]@Identity

一、<dynamic><isNotNull>

<!-- select 基本语句 -->
    <select id="tbhyScenarioSetting.select" parameterClass="tbhyScenarioSettingDomain" resultClass="tbhyScenarioSettingDomain">
        select id as id,
        gmt_create as gmtCreate,
        gmt_modified as gmtModified,
        scenario_name as scenarioName,
        layout_type as layoutType,
        industry_id as industryId,
        creator as creator,
        modifier as modifier,
        max_item_per_category as maxItemPerCategory,
        max_item_per_seller as maxItemPerSeller,
        max_item_per_brand as maxItemPerBrand,
        max_item_per_spu as maxItemPerSpu,
        scene_id as sceneId
        from tbhy_scenario_setting where 1=1
        <dynamic>
            <isNotNull property="sceneId" prepend="and">
                scene_id=#sceneId#
            </isNotNull>
            <isNotNull property="id" prepend="and">
                id=#id#
            </isNotNull>
        </dynamic>
    </select>

1)如果id字段不為null,就加在isNotNull标签语句前加上“and”。

2)<dynamic>标签会覆盖子标签中的prepend,上例中,<dynamic>中没有prepend,所以子标签中and会保留。

此处的用法是where 1=1,然后是动态sql。

还可以<dynamic prepend = "where">,这样可以覆盖子标签中的and,使其变成where。

二、[email protected]@Identity

<!-- insert into 基本语句 -->
    <insert id="tbhyScenarioSetting.insert" parameterClass="tbhyScenarioSettingDomain">
        insert into tbhy_scenario_setting(scene_id,gmt_create,gmt_modified,scenario_name,layout_type,industry_id,creator,modifier,max_item_per_category,max_item_per_seller,max_item_per_brand,max_item_per_spu)
        values(#sceneId#,NOW(),NOW(),#scenarioName#,#layoutType#,#industryId#,#creator#,#modifier#,#maxItemPerCategory#,#maxItemPerSeller#,#maxItemPerBrand#,#maxItemPerSpu#);
        <selectKey resultClass="Long" keyProperty="id">
            SELECT @@identity AS id
        </selectKey>
    </insert>

利用[email protected]@Identity获取新增记录ID。

使用:

public TbhyScenarioSettingDomain add(final TbhyScenarioSettingDomain domain) {
        return (TbhyScenarioSettingDomain) transactionTemplate.execute(new TransactionCallback() {
            @Override
            public Object doInTransaction(TransactionStatus status) {
                Long id = (Long) getSqlMapClientTemplate().insert("tbhyScenarioSetting.insert", domain);
                domain.setId(id);
                addSceneTopicsAndTabs(domain);
                return domain;
            }
        });
    }

to be continued

IBATIS动态SQL--<dynamic>[email protected]@Identity

时间: 2024-10-16 10:17:29

IBATIS动态SQL--<dynamic>[email protected]@Identity的相关文章

ibatis 动态SQL

直接使用JDBC一个非常普遍的问题就是动态SQL.使用参数值.参数本身和数据列都是动态SQL,通常是非常困难的.典型的解决办法就是用上一堆的IF-ELSE条件语句和一连串的字符串连接.对于这个问题,Ibatis提供了一套标准的相对比较清晰的方法来解决一个问题,这里有个简单的例子: <select id="getUserList" resultMap="user"> select * from user <isGreaterThan prepend=

IBATIS动态SQL

直接使用JDBC一个非常普遍的问题就是动态SQL.使用参数值.参数本身和数据列都是动态SQL,通常是非常困难的.典型的解决办法就是用上一堆的IF-ELSE条件语句和一连串的字符串连接.对于这个问题,Ibatis提供了一套标准的相对比较清晰的方法来解决一个问题,这里有个简单的例子: <select id="getUserList" resultMap="user"> select * from user <dynamic prepend="

ibatis动态sql配置启动时提示:The content of elements must consist of well-formed character data...

ibatis动态sql配置启动时提示:The content of elements must consist of well-formed character data... 2012-07-18 11:21wuming3632171 | 浏览 5114 次 ibatis配置如下,高手帮我看看.<select id="exportRecieveData" parameterClass="java.util.HashMap"resultClass="

iBatis动态SQL标签用法

1.动态SQL片段 通过SQL片段达到代码复用 <!-- 动态条件分页查询 -->         <sql id="sql_count">                 select count(*)         </sql>         <sql id="sql_select">                 select *         </sql>         <sql i

SQL Server-聚焦WHERE [email&#160;protected] OR @Param IS NULL有问题?

前言 上一篇我们讲完SQL动态查询,本节我们继续来讲解SQL动态查询中存在的问题. SQL动态查询条件筛选过滤 当我们创建存储过程调用存储过程时,若筛选条件有值则过滤,没有值则返回所行记录,类似如下查询: WHERE ([email protected] OR @col IS NULL) 这样查询会存在什么问题呢?性能会不会有问题呢,这个是我们本节需要深入探讨的问题. 接下来我们创建如下测试表并插入测试数据,如下: CREATE TABLE Test ( SomeCol1 INT NOT NUL

T-SQL动态查询(4)——动态SQL

接上文:T-SQL动态查询(3)--静态SQL 前言: 前面说了很多关于动态查询的内容,本文将介绍使用动态SQL解决动态查询的一些方法. 为什么使用动态SQL: 在很多项目中,动态SQL被广泛使用甚至滥用,很多时候,动态SQL又确实是解决很多需求的首选方法.但是如果不合理地使用,会导致性能问题及无法维护.动态SQL尤其自己的优缺点,是否使用需要进行评估分析: 动态SQL优点: 动态SQL提供了强大的扩展功能,能够应付复杂的需求,即使在需求增加时也能应对,并且不会因为需求的增加而导致代码的线性增长

ibatis复用SQL片段、引入片段 动态条件增加

1:ibatis复用SQL片段.引入片段  使用[sql]和[include]标签: 通常情况下,你会这样写:xml 代码 <select id="selectItemCount" resultClass="int"> SELECT COUNT(*) AS total FROM items WHERE parentid = 6 select> <select id="selectItems" resultClass=&qu

Ibatis动态拼装sql,常用标签总结及举栗子。

今天得到项目经理一项任务,就是拼装sql,第一次见到,不是太懂,赶紧回来睡一觉再说,由于这次的项目orm使用的是ibatis框架,所以需要使用动态拼装sql,或者是ognl语言,这门语言不是专属于ibatis的,而是一门独立的语言,就像EL表达式一样. 首先(摘抄一段,私密马赛,其实可以手写的)使用动态查询时ibatis的一个强大的功能,又是你已经改变WHERE子句条件的基础上你的参数对象的状态,在这种情况下的ibatis提供了一组可以映射语句中标签,这种标签的使用提高了SQL语句的重用性和灵活

IBatis.net动态SQL语句

在学习动态SQL语句之前,首先必须对条件查询有一定了解,先来学习如何向IBatis.Net的映射文件里传入参数. 一.条件查询 1.传递单个参数 如根据Id查询: <select id="SelectPersonById" resultMap="Person" parameterClass="Int32" > SELECT * FROM Person WHERE Id = #Id# --这样传入一个参数 </select>