mybatis 批量插入动态表

作为mybatis初学者,用到mybatis的时候,产生一个需求:

希望程序能够自动建表,1个月建一张表,同时数据批量插入到当前月份对应的表里。

在百度和Google搜了一下,直接给出这种解决例子的文章几乎没有。这里简单记录一下,方便其它有类似需求的同学使用。

一、不涉及spring,裸用mybatis,那么你需要两个依赖

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.3.1</version>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.38</version>
</dependency>
二、写基础配置文件jdbc.properties和mybatis-config.xml 名字任意起,关联起来就行了,俩文件都要在classpath里, mybatis-config.xml 里引用jdbc.properties 读出来数据库的连接信息。


jdbc.properties文件。


三、mapper的xml怎么写,这是关键



1、namespace不用说了,填上对应的mapper 接口类

2、parameterType 类型填java.util.Map,因为既要动态表名,又要批量插入,所以使用map,网上批量插入的例子参数都是list

3、显式地生命statementType="STATEMENT",必须的,至于为什么,这里不啰嗦了。

4、所有之前#{xxx}的东西都换成$符号,必须的。同时字符串类型的数据(插入数据库的字段)要自己加单引号,要不然语法会报错。



5、index="index"啥意思?foreach迭代的下标,你有时候需要用到下标,但是这里没有用到,其实可以去掉。

6、separator="," 是啥意思?我这例子里的foreach包围的内容,你可以理解成一个整体的元素,

整体元素最后是要拼接在一起的,这个意思就是用逗号连接这些个“整体元素”。

7、open="(" close=")" 这个是啥? 跟上面的separator 一样的东西,只不过这俩不是加在整体元素两边的,而是加在整体两边的,如果我这个例子用了这俩,就不对了,我要的是

(a,b,c),(e,f,g),(x,y,z)这样的东西,如果加了上面的,并且foreach中的内容两边不加小括号的话,那么就成了

(a,b,c,e,f,g,x,y,z)


四、mapper怎么写的,service怎么写

说白了就是参数是个map,

一个key是date_suffix,value就是你要写的表名的后缀值

还一个key是“valueList”就是上面的xml中foreach的collection的名字,注意这个collection后面跟的名字是自己起的,如果本身参数是个list,那么你按照大多数的例子中写的,collection="list"就行了

对应的value就是个List结构,元素就是一行对应的entity对象。


public interface LogTrafficMapper {
    public void batchInsert(Map<String,Object> data);
}



五、测试


很简单是吧

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值