Mapper.xml

6 篇文章 0 订阅
1 篇文章 0 订阅

学习一下别人的sql写法,扩大自己的视野。QuoteProductMapper.xml
XML头,我就不写了,这个只是简单的随便写了下架子,不具有实际意义。自己写sql,可以作为参考。
具体的有:1:搜索,一个字段按多层意思进行搜索,
2:集合遍历
3:case when then else 用法
4:sql片段
5:子查询
6:日期格式转换(+1/3,或者8小时)

需要注意的是,最好把sql中的注释用/**/ 来代替,这样的话再对sql进行格式化的时候,plsql可以直接格式化,但是如果用- - 注释的话,plsql是无法解析所有的–为注释的,所以字段多的时候,在 plsql中检查执行的sql会很麻烦。数据用的Oracle

<mapper namespace="com.xxxxx.domain.quote,QuoteProductMapper" >
		<resultMap id="resultMapper" type = "com.xxxxx.model.quote.QuoteProductModel">
			<id        column="ROWID"          property="rowId">
			<result  column="TOTAL_NUM" property="totalRecords">
			<result  column="CUR_PAGE"   property="curPage">
			
			<result column="PRODUCT_NAME" property="proName"><!--产品名称-->
			<result column="X_SWP"           property="swp"><!--标准质保期-->
			<result column="valStatus" 		property="valStatus"><!--供货状态-->
			。。。。字段很多,我就不写了
		</resultMap>

		<sql id= "Column_list"><!--sql片段-->
			T.ROW_ID,/*rowId*/
			TO_CHAR(T.CREATED+1/3,'YYYY-MMM-DD HH24:MI:SS') AS CREATED,/*创建时间*/
			--另一种写法:TO_CHAR(T.CREATED+numtodsinterval(8,'hour'),'YYYY-MMM-DD HH24:MI:SS') AS CREATED,/*创建时间*/
			T.X_SWP,/*标准质保期*/
			T15.VAL as valStatus,/*供货状态*/
			T.PRODUCT_NAME,/*产品名称*/
			/*以下为查询字段*/
			CASE WHEN T.X_EXIST_IN_PRICE_LIST = 'N' THEN T.X-ADJ_UNIT_TMP
				ELSE(
					CASE WHEN T.PAR_SQ_ITEM_ID  IS NOT NULL AND (CASE WHEN T6.PRO_TYPE_CD = 'Bundle' THEN 'Y' ELSE 'N' END) = 'Y'  THEN 0 ELSE 
					T.ADJ_UNIT_PRI  END
				) END AS StandardPrice,/*标准单价*/
			CASE WHEN SUBSTR(T1.PART_NUM,0,3) = '1.4' THEN '0天' 
			ELSE(
				case when (t2.attrib_36 is null or t2.attrib_36 = 'No') then '30天以上'
						when t2.attrib_36 = 'New' then '10-30天'
						when t2.attrib_36 = ‘General’ then '5-10天'
						else '2-5天' end		
			) END AS BILLCYCLE,  /*单据*/	
			NVL2(F.DOCSTATUS,F.DOCSTATUS,0) AS DOCSTATUS,
			C.STD_PRI_UNIT CATALOGPRICE /*AS 可以省略*/
		</sql>


		<select id="queryProduct" resultMap ="resultMap" parameterType = "com.xxxxx.model.quote.QuoteProductModel">
			<if test =" sum== false ">
				select * from (
						select #{curpage} as CUR_PAGE,ROWNUM AS rowno,t.* from(
			</if>
			<if test = "sum">
						select count(1) as TOTAL_NUM [,sum(Quote_money) as summoney from (--这个是根据需要加的。]
			</if>
				<!--主sql-->
				select distinct
				<include refid="Column_list" /> ,
				T21.ROW_ID AS OLD_DEMAND_ID
				<!--有其他字段,可以在这里面添加-->
				FROM  
							SIEBEL.S_QUOTE_ITEM T
							LEFT JOIN SIEBEL.S_PROD_INT T1 ON T.PROD_ID = T1.ROW_ID
							LEFT JOIN SIEBEL.S_PROD_INT_X T2 ON T1.ROW_ID = T2.PAR_ROW_ID
							INNER JOIN SIEBEL.S_DOC_QUOTE T7 ON T.SD_ID = T7.ROW_ID
							LEFT JOIN (
								select x.par_row_id,sum(a.query) quanty_sum from (select t.quanty,t.prod_id from siebel.cx_forcast_item t) a
							) T22 ON T2.PAR_ROW_ID = T22.PAR_ROW_ID
				<WHERE>
							T.SD_ID = #{quoteId}
							and ( t.prod_id is null or t17.released_flg = 'Y'
									 and t17.start_dt &lt; = sysdate
									 and (t17.end_dt is null or t17.end-dt > sysdate)
									and t18.first_vars &lt;= t17.ver_num and t18.last_vers &gt;= t17.ver_num)
							<if test =" name != null and name != '' ">	
									<!--按xxx,xxx,xxx进行搜索,一个字段代表多层意思-->
									and ( t1.x_name like '%'||#{name}||'%'  or  t1.part_num like '%'||#{name}||'%'  or t2.attrib_01 like '%'||#{name}||'%')
							</if>
							<if test= "product != null and product != ‘’ "> AND  T1.X_NAME LIKE '%'||#{product}||'%' </if><!--产品描述-->	
							<if test="partNum != null and partNum != '' ">AND T1.PART_NUM LIKE '%'||#{partNumber}||‘%’ </if>	<!--物料号-->	
							<!--集合型-->
							<if test=" partNumberList != null and partNumberList.size() != 0 ">
									AND
									<foreach collection ="partNumberList" index="index" item="item" open="(" separator=" or " close=")" >
										B.ATTRIB_02 = #{item}
									</foreach>
							</if>														
				</WHERE>
						ORDER BY T.LN_NUM
						) t
						<if test = "sum == false">
							) tbs  where  tbs.rowno &gt;= #{startRowNum,jdbcType = numeric}
							and tbs.rowno &lt;= #{endRowNum,jdbcType = numeric}
						</if>
		</select>
</mapper>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mapper XML 文件是 MyBatis 中定义 SQL 映射关系的主要方式之一。它包含了一组 SQL 映射语句,以及映射语句中对应的参数和结果集的映射关系。 Mapper XML 文件通常包含以下三个部分: 1. 命名空间:指定 SQL 映射文件中所有 SQL 语句的命名空间。 2. SQL 语句:定义 SQL 语句及其参数和结果集的映射关系。 3. 参数和结果集的映射关系:定义 SQL 语句的参数和结果集的映射关系。 下面是一个简单的 Mapper XML 文件的例子: ```xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.example.mapper.UserMapper"> <select id="getUserById" resultType="com.example.entity.User"> select * from user where id = #{id} </select> <insert id="addUser" parameterType="com.example.entity.User"> insert into user (name, age) values (#{name}, #{age}) </insert> <update id="updateUser" parameterType="com.example.entity.User"> update user set name = #{name}, age = #{age} where id = #{id} </update> <delete id="deleteUser" parameterType="int"> delete from user where id = #{id} </delete> </mapper> ``` 上面的 Mapper XML 文件定义了一个命名空间为 com.example.mapper.UserMapper,包含了四个 SQL 映射语句:getUserById、addUser、updateUser 和 deleteUser。其中 getUserById 语句使用了 #{id} 占位符,表示从参数中获取 id 参数的值;addUser、updateUser 和 deleteUser 语句分别使用了 #{name}、#{age} 和 #{id} 占位符,表示从参数中获取对应参数的值。 Mapper XML 文件还可以使用一些高级特性,例如动态 SQL、一对多、多对一、多对多等关系映射等,以满足不同的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值