true parameter opensession functions java ibatis mybatis

java - parameter - MyBatis/iBatis: ¿fragmentos de SQL reutilizables en un archivo de mapa SQL separado?



mybatis sql builder (2)

Di, tienes algo

<mapper namespace="Common"> <sql id="idsIn"> ${column} IN <foreach item="id" collection="ids" separator="," open="(" close=")"> #{id} </foreach> </sql> </mapper>

Que en otro mapeador puedes usarlo como:

<mapper namespace="OtherMapper"> <sql id="someSql"> ... <include refid="Common.idsIn"> <property name="column" value="${column}"/> <!-- OR hardcode: <property name="column" value="id"/> --> <property name="filterPksTable" value="${filterPksTable}"/> </include> ... </sql> </mapper>

Además, podéis echar un vistazo here

Me gustaría poner los fragmentos de SQL utilizados por varios de mis archivos XML de SQL Map en un archivo separado. En este momento, los elementos <sql> con estos fragmentos se encuentran en uno de los mapeadores junto con otros elementos como <select> , lo que los hace difíciles de encontrar.
¿Puedo tener un asignador que defina unos pocos elementos <sql> y no se use para generar una implementación en una interfaz? ¿Cuál sería el espacio de nombres correcto de este mapeador?

Este es el archivo de mapa SQL con los marcos:

<mapper namespace="com.company.project.dao.someDao"> <sql id="whereDate"> WHERE date(`time`) BETWEEN #{startDate} AND #{endDate} </sql> <sql id="someOtherSqlFragment"> ... </sql> <select id="getSomeData" resultType="SomeClass" parameterType="DateParam" > SELECT some_column, another_column </select> FROM some_table <include refid="whereDate"/> <include refid="otherSqlFragment"/> </select> </mapper>

Me gustaría separar los elementos como este:
Primer archivo de mapa Sql:

<mapper namespace="com.company.project.dao.???"> <sql id="whereDate"> WHERE date(`time`) BETWEEN #{startDate} AND #{endDate} </sql> <sql id="someOtherSqlFragment"> ... </sql> </mapper>

Segundo archivo de mapa Sql:

<mapper namespace="com.company.project.dao.someDao"> <select id="getSomeData" resultType="SomeClass" parameterType="DateParam" > SELECT some_column, another_column </select> FROM some_table <include refid="whereDate"/> <include refid="otherSqlFragment"/> </select> </mapper>


Esto es exactamente lo que hizo un proyecto en el que solía trabajar. Los fragmentos comunes se definieron en un archivo separado que se incluyó en el archivo de configuración principal de iBATIS.

Teníamos un archivo de mapa SQL en la raíz llamada Core.ism.xml que se veía así:

<sqlMap namespace="Core" > <sql id="fragmentBasicAuditFieldNames"> CreateDate, CreateUser, UpdateDate, UpdateUser, UpdateCode </sql> ....

Y luego en nuestros archivos de mapas SQL podríamos referenciarlo así:

<include refid="Core.fragmentBasicAuditFieldNames" />

Espero haber entendido lo que estabas preguntando correctamente!