Attribute.xml 14.2 KB
<?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.dili.titan.dao.AttributeDao">
	 <resultMap type="Attribute" id="attrResultMap">
		<id property="id" column="id" />
		<result property="name" column="name" />
		<result property="alias" column="alias" />
		<result property="dealType" column="deal_type" />
		<result property="inputtype" column="inputtype" />
		<result property="type" column="type" />
		<result property="required" column="required" />
		<result property="status" column="status" />
		<result property="ctime" column="ctime" />
		<result property="utime" column="utime" />

		<!--<collection property="attrScope" ofType="attributeScope">-->
			<!--<id property="id" column="_id" />-->
			<!--<result property="attrId" column="attr_id" />-->
			<!--<result property="scopeId" column="scope_id" />-->
		<!--</collection>-->
		
		<collection property="attrValue" ofType="attributeValue">
			<id property="id" column="v_id" />
			<result property="attrId" column="attr_id" />
			<result property="value" column="value" />
			<result property="order" column="order" />
			<result property="show" column="show" />
			<result property="status" column="status" />
		</collection>
	</resultMap>

    <resultMap type="Attribute" id="attrResultMapCollection">
        <id property="id" column="id" />
        <result property="name" column="name" />
        <result property="alias" column="alias" />
        <result property="dealType" column="deal_type" />
        <result property="inputtype" column="inputtype" />
        <result property="type" column="type" />
        <result property="required" column="required" />
        <result property="status" column="status" />
        <result property="ctime" column="ctime" />
        <result property="utime" column="utime" />

        <!--<collection property="attrScope" ofType="attributeScope" javaType="ArrayList"  column="{attrId=id}" select="com.dili.titan.dao.AttributeScopeDao.selectScopeByattrId">-->
            <!--<id property="id" column="_id" />-->
            <!--<result property="attrId" column="attr_id" />-->
            <!--<result property="scopeId" column="scope_id" />-->
        <!--</collection>-->

        <collection property="attrValue" ofType="attributeValue" javaType="ArrayList"  column="{attrId=id}" select="com.dili.titan.dao.AttributeValueDao.findByAttrId">
            <id property="id" column="v_id" />
            <result property="attrId" column="attr_id" />
            <result property="value" column="value" />
            <result property="order" column="order" />
            <result property="show" column="show" />
            <result property="status" column="status" />
        </collection>
    </resultMap>

    <!-- attribute 所有查询列 -->
	<sql id="QUERY_COLUMN_LIST">
		<![CDATA[id,name,alias,deal_type AS dealType,inputtype,type,required,status,ctime,utime]]>
	</sql>

	<!-- attribute 查询列来源表 -->
	<sql id="QUERY_FROM_TABLE"><![CDATA[FROM attribute]]></sql>

	<!-- 全部条件(更多功能可以通过queryData扩展实现) -->
	<sql id="QUERY_WHERE_CLAUSE">
		<where>
			<if test="id != null and id != ''"><![CDATA[AND id = #{id}]]></if>
			<if test="name != null and name != ''"><![CDATA[AND name = #{name}]]></if>
			<if test="alias != null and alias != ''"><![CDATA[AND alias = #{alias}]]></if>
			<if test="dealType != null and dealType != '' and dealType != 3"><![CDATA[AND (deal_type = #{dealType} or deal_type =3)]]></if>
            <if test="inputtype != null and inputtype != ''"><![CDATA[AND inputtype = #{inputtype}]]></if>
			<if test="type != null and type != ''"><![CDATA[AND type = #{type}]]></if>
			<if test="required != null and required != ''"><![CDATA[AND required = #{required}]]></if>
			<if test="status != null and status != ''"><![CDATA[AND status = #{status}]]></if>
			<if test="ctime != null and ctime != ''"><![CDATA[AND ctime = #{ctime}]]></if>
			<if test="utime != null and utime != ''"><![CDATA[AND utime = #{utime}]]></if>
		</where>
	</sql>

	<!-- 智能排序与分页 -->
	<sql id="QUERY_ORDER_LIMIT_CONDTION">
		<if test="orderField != null and orderField != '' and orderFieldType != null and orderFieldType != ''"><![CDATA[ORDER BY ${orderField} ${orderFieldType}]]></if>
		<if test="startIndex != null and startIndex &gt;= 0 and pageSize != null and pageSize &gt; 0"><![CDATA[LIMIT #{startIndex},#{pageSize}]]></if>
	</sql>

	<!-- 更新列字段,只要不为NULL则更新,除开主键列 -->
	<sql id="UPDATE_COLUMN_SET">
		<set>
			<if test="name != null"><![CDATA[name = #{name},]]></if>
			<if test="alias != null"><![CDATA[alias = #{alias},]]></if>
			<if test="dealType != null"><![CDATA[deal_type = #{dealType},]]></if>
			<if test="inputtype != null"><![CDATA[inputtype = #{inputtype},]]></if>
			<if test="type != null"><![CDATA[type = #{type},]]></if>
			<if test="required != null"><![CDATA[required = #{required},]]></if>
			<if test="status != null"><![CDATA[status = #{status},]]></if>
			<if test="ctime != null"><![CDATA[ctime = #{ctime},]]></if>
			<if test="utime != null"><![CDATA[utime = now(),]]></if>
		</set>
	</sql>

	<!-- 插入attribute记录 -->
	<insert id="insertEntry" parameterType="attribute">
		<![CDATA[
			INSERT INTO attribute (id,name,alias,deal_type,inputtype,type,required,status,ctime,utime)
			VALUES (#{id},#{name},#{alias},#{dealType},#{inputtype},#{type},#{required},#{status},now(),#{utime})
		]]>
	</insert>

	<!-- 返回插入的编号,在事务开启状态下有效 -->
	<select id="lastSequence" resultType="int"><![CDATA[SELECT LAST_INSERT_ID() AS id]]></select>

	<!-- 删除记录,主键IN(array) -->
	<delete id="deleteByArrayKey" parameterType="java.lang.reflect.Array">
		<![CDATA[DELETE FROM attribute WHERE id IN]]>
		<foreach collection="array" item="id" open="(" separator="," close=")">
			<![CDATA[#{id}]]>
		</foreach>
	</delete>

	<!-- 删除,通过条件 -->
	<update id="deleteByCondtion" parameterType="attribute">
		<![CDATA[DELETE FROM attribute]]>
		<include refid="QUERY_WHERE_CLAUSE" />
	</update>

	<!-- 修改记录通过主键 -->
	<update id="updateByKey" parameterType="attribute">
		<![CDATA[UPDATE attribute]]>
		<include refid="UPDATE_COLUMN_SET" />
		<![CDATA[WHERE id = #{id}]]>
	</update>

	<!-- 查询,通过主键IN(array) -->
	<select id="selectEntryArray" parameterType="java.lang.reflect.Array" resultType="attribute">
		<![CDATA[SELECT]]>
		<include refid="QUERY_COLUMN_LIST" />
		<include refid="QUERY_FROM_TABLE" />
		<![CDATA[WHERE id IN]]>
		<foreach collection="array" item="id" open="(" separator="," close=")">
			<![CDATA[#{id}]]>
		</foreach>
	</select>

	<!-- 查询,通过条件 -->
	<select id="selectEntryList" parameterType="attribute" resultType="attribute">
		<![CDATA[SELECT]]>
		<include refid="QUERY_COLUMN_LIST" />
		<include refid="QUERY_FROM_TABLE" />
		<include refid="QUERY_WHERE_CLAUSE" />
		<include refid="QUERY_ORDER_LIMIT_CONDTION" />
	</select>

	<!-- 总数查询,通过条件 -->
	<select id="selectEntryListCount" parameterType="attribute" resultType="int">
		<![CDATA[SELECT COUNT(id) AS dataCount]]>
		<include refid="QUERY_FROM_TABLE" />
		<include refid="QUERY_WHERE_CLAUSE" />
	</select>

	<!-- 其它SQL语句 -->

	<!-- 查询,通过条件 -->
	<select id="selectList" parameterType="attribute" resultType="attribute">
		<![CDATA[SELECT]]>
		<include refid="QUERY_COLUMN_LIST" />
		<include refid="QUERY_FROM_TABLE" />
		<![CDATA[WHERE status IN (1, 10)]]>
		<include refid="QUERY_ORDER_LIMIT_CONDTION" />
	</select>

	<!-- 总数查询,通过条件 -->
	<select id="selectListCount" parameterType="attribute" resultType="int">
		<![CDATA[SELECT COUNT(id) AS dataCount]]>
		<include refid="QUERY_FROM_TABLE" />
		<![CDATA[WHERE status IN (1, 10)]]>
	</select>

	<!-- 查询,通过条件 -->
	<select id="searchList" parameterType="java.util.Map" resultType="attribute">
		<![CDATA[SELECT DISTINCT attr.id,attr.name,attr.alias,attr.deal_type AS dealType,attr.inputtype,attr.type,attr.required,attr.status,attr.ctime,attr.utime from attribute attr ]]>
		<![CDATA[WHERE status IN (1, 10)]]>
		<if test="name != null and name != '' and name != '%%'"><![CDATA[AND name like CONCAT('%',#{name},'%')]]></if>
		<if test="alias != null and alias != '' and alias != '%%'"><![CDATA[AND alias like CONCAT('%',#{alias},'%')]]></if>
		<if test="type != null and type != ''"><![CDATA[AND type = #{type}]]></if>
		<include refid="QUERY_ORDER_LIMIT_CONDTION" />
	</select>

	<!-- 总数查询,通过条件 -->
	<select id="searchListCount" parameterType="java.util.Map" resultType="int">
		<![CDATA[SELECT COUNT(DISTINCT attr.id) AS dataCount from attribute attr ]]>
		<![CDATA[WHERE status IN (1, 10)]]>
		<if test="name != null and name != '' and name != '%%'"><![CDATA[AND name like CONCAT('%',#{name},'%')]]></if>
		<if test="alias != null and alias != '' and alias != '%%'"><![CDATA[AND alias like CONCAT('%',#{alias},'%')]]></if>
		<if test="type != null and type != ''"><![CDATA[AND type = #{type}]]></if>
		<if test="dealType != null and dealType != ''"><![CDATA[AND (deal_type = #{dealType} or deal_type =3)]]></if>
	</select>

	<!-- 属性列表页查询,采用one-to-many的方式查询出属性的范围 -->
	<select id="queyAttributePage" parameterType="attribute" resultMap="attrResultMap">
	    <![CDATA[SELECT a.id,a.name,a.alias,a.deal_type,a.inputtype,a.type,a.required,a.status,a.ctime,a.utime FROM attribute a ]]>
		<where>
		    <![CDATA[a.status > 0]]>
			<if test="name != null and name != ''"><![CDATA[AND a.name like CONCAT('%',#{name},'%')]]></if>
			<if test="alias != null and alias != ''"><![CDATA[AND a.alias like CONCAT('%',#{alias},'%')]]></if>
			<if test="type != null and type != ''"><![CDATA[AND a.type = #{type}]]></if>
			<if test="dealType != null and dealType != ''"><![CDATA[AND (a.deal_type = #{dealType} or a.deal_type =3)]]></if>
			<if test="required != null and required != ''"><![CDATA[AND a.required = #{required}]]></if>
			<if test="status != null and status != ''"><![CDATA[AND a.status = #{status}]]></if>
		</where>
		<include refid="QUERY_ORDER_LIMIT_CONDTION" />
	</select>

	<select id="queyAttributePageCount" parameterType="attribute" resultType="int">
	    <![CDATA[SELECT COUNT(1) AS dataCount FROM attribute a ]]>
		<where>
		    <![CDATA[a.status > 0]]>
			<if test="name != null and name != ''"><![CDATA[AND a.name like CONCAT('%',#{name},'%')]]></if>
			<if test="alias != null and alias != ''"><![CDATA[AND a.alias like CONCAT('%',#{alias},'%')]]></if>
			<if test="type != null and type != ''"><![CDATA[AND a.type = #{type}]]></if>
			<if test="dealType != null and dealType != ''"><![CDATA[AND (a.deal_type = #{dealType} or a.deal_type =3)]]></if>
			<if test="required != null and required != ''"><![CDATA[AND a.required = #{required}]]></if>
			<if test="status != null and status != ''"><![CDATA[AND a.status = #{status}]]></if>
		</where>
	</select>
	
	<!-- 回收列表页查询,采用one-to-many的方式查询出属性的范围 -->
	<select id="selectRestorePage" parameterType="attribute" resultMap="attrResultMap">
	    <![CDATA[SELECT c.id,c.name,c.alias,c.deal_type AS dealType,c.inputtype,c.type,c.required,c.status,c.ctime,c.utime,d.id AS v_id,d.attr_id,d.value,d.order,d.show,d.status FROM ]]>
	    <![CDATA[(SELECT a.id,a.name,a.alias,a.deal_type,a.inputtype,a.type,a.required,a.status,a.ctime,a.utime FROM attribute a ]]>
		<where>
		    <![CDATA[a.status = -1]]>
		</where>
		<if test="name != null and name != '' and name != '%%'"><![CDATA[AND name like CONCAT('%',#{name},'%')]]></if>
		<if test="startTime != null and startTime != ''"><![CDATA[AND utime >= #{startTime}]]></if>
		<if test="endTime != null and endTime != ''"><![CDATA[AND utime <= #{endTime}]]></if>
		<include refid="QUERY_ORDER_LIMIT_CONDTION" />
		<![CDATA[) c LEFT JOIN `attribute_value` d  ON d.`attr_id` = c.id]]>
	</select>
	
	<select id="selectRestorePageCount" parameterType="attribute" resultType="int">
	    <![CDATA[SELECT COUNT(1) AS dataCount FROM attribute a ]]>
		<where>
		    <![CDATA[a.status = -1]]>
		</where>
		<if test="name != null and name != '' and name != '%%'"><![CDATA[AND name like CONCAT('%',#{name},'%')]]></if>
		<if test="startTime != null and startTime != ''"><![CDATA[AND utime >= #{startTime}]]></if>
		<if test="endTime != null and endTime != ''"><![CDATA[AND utime <= #{endTime}]]></if>
	</select>
	
	<!-- 查询,通过主键IN(list)查询已锁定或删除的值 -->
	<select id="selectArrayList" parameterType="java.util.List" resultType="attribute">
		<![CDATA[SELECT]]>
		<include refid="QUERY_COLUMN_LIST" />
		<include refid="QUERY_FROM_TABLE" />
		<![CDATA[WHERE id IN]]>
		<foreach collection="list" item="id" open="(" separator="," close=")">
			<![CDATA[#{id}]]>
		</foreach>
		<![CDATA[AND status != 1]]>
	</select>

    <select id="selectAttr" parameterType="attribute" resultMap="attrResultMap">
        <![CDATA[SELECT c.id,c.name,c.alias,c.deal_type AS dealType,c.inputtype,c.type,c.required,c.status,c.ctime,c.utime,d.id AS v_id,d.attr_id,d.value,d.order,d.show,d.status FROM ]]>
        <![CDATA[(SELECT a.id,a.name,a.alias,a.deal_type,a.inputtype,a.type,a.required,a.status,a.ctime,a.utime FROM attribute a ]]>
        <where>
            <![CDATA[a.status = -1]]>
        </where>
        <if test="name != null and name != '' and name != '%%'"><![CDATA[AND name like CONCAT('%',#{name},'%')]]></if>
        <if test="startTime != null and startTime != ''"><![CDATA[AND utime > #{startTime}]]></if>
        <if test="endTime != null and endTime != ''"><![CDATA[AND utime < #{endTime}]]></if>
        <include refid="QUERY_ORDER_LIMIT_CONDTION" />
        <![CDATA[) c LEFT JOIN `attribute_value` d  ON d.`attr_id` = c.id]]>
    </select>

    <select id="findAttrByIds" parameterType="java.lang.reflect.Array" resultMap="attrResultMapCollection">
        <![CDATA[SELECT]]>
        <include refid="QUERY_COLUMN_LIST" />
        <include refid="QUERY_FROM_TABLE" />
        <![CDATA[WHERE id IN]]>
        <foreach collection="array" item="id" open="(" separator="," close=")">
            <![CDATA[#{id}]]>
        </foreach>
    </select>

    <!--用于其他类的关联查询-->
    <select id="selectByAttrId" parameterType="java.util.HashMap" resultMap="attrResultMapCollection">
        <![CDATA[SELECT]]>
        <include refid="QUERY_COLUMN_LIST"/>
        <include refid="QUERY_FROM_TABLE"/>
        <![CDATA[WHERE id=#{attrId} ]]>
    </select>
</mapper>