【分表处理】
mybatis-generator-core.jar自动生成的dao里面只有针对原表的操作,若要处理分表,需特殊处理,以下总结二种方案。1. 使用Map方式
1)xml中的parameterType="map" statementType="STATEMENT"
2)调用方传入的map中包括分表名,xml中使用${分表名},例如:
map.put("subTable","USER_INFO")
xml中使用 INSERT INTO ${subTable}
3)动态SQL使用:
<if test="_parameter.containsKey('userName')">
AND msgType = ${userName})
</if>
2. 使用javaBean方式
1)model层自动生成的javaBean类中需定义分表名属性,例如: subTable,并提供setter,getter方法
2)xml中的parameterType="javaBean类",表名使用${subTable}
3)针对selectByPrimaryKey等入参只有1个Integer或String的简单数据类型,无法通过javaBean传入分表名,此时通过@param绑定变量,例如:
UserInfoMapper.java中
UserInfo selectByPrimaryKey(@Param("subTable") String subTable,@Param("userId") Integer userId);
UserInfoMapper.xml中
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
-->
select
<include refid="Base_Column_List" />
from ${subTable}
where USER_ID = #{userId,jdbcType=INTEGER}
</select>
【特殊符号处理】
方法一
使用转义符替换,例如:
<if test="beginTime != null" >
AND CREATE_TIME >= DATE_FORMAT('${beginTime}','%Y-%m-%d %H:%i:%S')
</if>
附:XML转义字符
< < 小于号
> > 大于号
& & 和
' ’ 单引号
" " 双引号
方法二
使用<![CDATA[ ]]>,例如:
<if test="beginTime != null" >
<![CDATA[ AND CREATE_TIME >= DATE_FORMAT('${beginTime}','%Y-%m-%d %H:%i:%S') ]]>
</if>