Spring Boot中Mybatis实战经验

【分表处理】

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>


【特殊符号处理】

由于在xml中不能有>或<等符号,需特殊处理:
方法一
使用转义符替换,例如:
<if test="beginTime != null" >
  AND CREATE_TIME &gt;= DATE_FORMAT('${beginTime}','%Y-%m-%d %H:%i:%S')
</if>
附:XML转义字符
&lt;    <    小于号                                           
&gt;    >    大于号
&amp;   &    和
&apos;  ’    单引号
&quot;  "    双引号

方法二
使用<![CDATA[ ]]>,例如:
<if test="beginTime != null" >
  <![CDATA[ AND CREATE_TIME >= DATE_FORMAT('${beginTime}','%Y-%m-%d %H:%i:%S') ]]>
</if>

转载于:https://my.oschina.net/superwind20/blog/1524149

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值