Mybatis 自动建表
时间:2020-03-27
本文章向大家介绍Mybatis 自动建表,主要包括Mybatis 自动建表使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在项目中经常会遇到动态创建表的场景,例如,统计用户日活,每天活跃的用户数据需要单独的表中(eg: tb_user_active_20200327,tb_user_active_20200328),根据用户活跃时间把数据存入不同的表中。这些和日期项目的表结构需要我们起个定时器,每天定时创建。具体参考以下示例:
- 表结构
create table tb_user_active(
id int(11) primary key auto_increment comment 'id',
user_id int(11) comment '用户ID',
active_time datetime comment '活跃时间'
)
- UserActiveService
import com.test.mybatis.mapper.UserActiveMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
*/
@Service
public class UserActiveService {
/**
* 日活表前缀
*/
public static final String USER_ACTIVE_TABLE_PREFIX = "tb_user_active_";
@Autowired(required = false)
UserActiveMapper userActiveMapper;
/**
* 定时器(每天凌晨1点执行一次)
*/
@Scheduled(cron = "0 0 1 * * ?")
public void createTableJob() {
int num = 3;
for(int i=1; i<=num; i++) {
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_MONTH, i);
createTable(c.getTime());
}
}
/**
* 获取表名
* @param date
* @return
*/
public String getTableName(Date date) {
return USER_ACTIVE_TABLE_PREFIX + new SimpleDateFormat("yyyyMMdd").format(date);
}
/**
* 创建表
* @param date
*/
public void createTable(Date date) {
String sql = "create table if not exists " + getTableName(date) + "(\n" +
" id int(11) primary key auto_increment comment 'id',\n" +
" user_id int(11) comment '用户ID',\n" +
" active_time datetime comment '活跃时间'\n" +
")";
userActiveMapper.createTable(sql);
}
}
- UserMapper
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;
/**
*/
@Repository
public interface UserActiveMapper {
/**
* 建表
* @param createTabelSql
*/
@Update("${createTabelSql}")
void createTable(@Param("createTabelSql")String createTabelSql);
}
以上是自动建表的主要代码,如需源码,请点击获取auto-create-table
注意:如果出现java.lang.IllegalAccessError: org.apache.commons.dbcp.DelegatingPreparedStatement.isClosed()Z 错误,可能是dbcp和mybatis版本不兼容导致,具体版本请参考pom.xml
原文地址:https://www.cnblogs.com/rookie-test/p/12581518.html
- (30) 剖析StringBuilder / 计算机程序的思维逻辑
- Java初始化顺序
- ConcurrentHashMap使用示例
- (40) 剖析HashMap / 计算机程序的思维逻辑
- nginx配置https(亲测可用)
- linux中无 conio.h的解决办法
- 运用适配器模式应对项目中的变化
- 开车啦!小爬虫抓取今日头条街拍美女图
- C语言中随机数相关问题
- 算法决策兴起:人工智能时代的若干伦理问题及策略|AI观察
- Win10配置人工智能学习平台Tensorflow的正确姿势
- mysql left( right ) join使用on 与where 筛选的差异
- 一条长sql的排错过程
- (41) 剖析HashSet / 计算机程序的思维逻辑
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- pymysql使用(二)
- NIO实现群聊功能,手动实现聊天室
- 一键实现自动化部署(灰度发布)实践
- 一文读懂递归算法—程序员必会算法之一
- 原来在Android中请求权限也可以有这么棒的用户体验
- Linux系统SSH(Secure Shell Protocol)服务
- 全网最火Java面试题
- Redis数据备份,容灾恢复手段
- Sublime Text的使用
- JVM垃圾回收机制和算法详解
- 使用 zabbix 监控 tomcat(包含jvm监控)
- Python open 读和写
- Linux系统SSH服务之 sshkey密钥认证实战
- Redis工作中常用命令,看这一篇就够了
- String、StringBuffer、StringBuiler深入分析,看这一篇就够了