Mysql + Mybatis动态建表

service层业务

package com.zx.common.service.impl;

import com.zx.common.entity.SysUser;
import com.zx.common.mapper.SysUserMapper;
import com.zx.common.service.SysUserService;
import com.zx.common.util.DateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.UUID;

@Service("sysUserService")
public class SysUserServiceImpl implements SysUserService {

    @Autowired
    private SysUserMapper sysUserMapper;

    @Override
    public List<SysUser> selectAllUser() {
        return sysUserMapper.selectAllUser();
    }

    @Transactional(rollbackFor = {Exception.class})
    @Override
    public void updateUserInfoTimer() {
        //根据上一天的日期将sys_user重命名为sys_user_上一天日期

        String beforeDateStr = DateUtil.getBeforeDateString();
        String rename = "sys_user_" + beforeDateStr + UUID.randomUUID().toString().substring(0,16);
        sysUserMapper.renameTable(rename.replace("-",""));
        //新建sys_user表
        sysUserMapper.createTable();
    }
}

  mapper层接口

package com.zx.common.mapper;

import com.zx.common.entity.SysUser;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface SysUserMapper {

    List<SysUser> selectAllUser();

    void renameTable(@Param("tableName") String tableName);

    void createTable();
}

  mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.zx.common.mapper.SysUserMapper" >
  <resultMap id="BaseResultMap" type="com.zx.common.entity.SysUser" >
    <id column="ID" property="id" jdbcType="INTEGER" />
    <result column="USERNAME" property="username" jdbcType="VARCHAR" />
    <result column="PASSWORD" property="password" jdbcType="VARCHAR" />
  </resultMap>
  <sql id="Base_Column_List" >
    ID, USERNAME, PASSWORD
  </sql>
  <update id="renameTable" parameterType="java.lang.String">
      rename table sys_user to ${tableName };
  </update>
  <update id="createTable">
    CREATE TABLE sys_user (
        ID INT(11) NOT NULL AUTO_INCREMENT COMMENT ‘主键‘,
        USERNAME VARCHAR(64) NOT NULL DEFAULT ‘‘,
        PASSWORD VARCHAR(32) NOT NULL DEFAULT ‘‘,
        PRIMARY KEY(ID),
        KEY I_SYS_USER_USERNAME (USERNAME)
    )ENGINE=INNODB DEFAULT CHARSET=UTF8 COMMENT=‘用户表‘;
  </update>

</mapper>

  

原文地址:https://www.cnblogs.com/ningJJ/p/9185810.html

时间: 2024-08-08 17:46:09

Mysql + Mybatis动态建表的相关文章

Mybatis动态建表

在网上查了很多,都说Mybatis不支持动态建表,心凉了一节.还好找到这么一篇,找到了希望:http://www.zzzyk.com/show/ec5660d9cf1071b3.htm 经过在mysql环境下验证,确实可用,不知道其他数据库是否支持,如下: Mapper.xml <update id="createNewTable"> create table `${realTableName}`( `id` int(11) NOT NULL AUTO_INCREMENT,

Spring JdbcTemplate框架(2)——动态建表

本篇博客使用Spring JdbcTemplate实现动态建表.前面介绍了,它封装了数据库的基本操作,让我们使用起来更加灵活,下面来实战. 1.准备工作 引入jar包 2.applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi

点评阿里JAVA手册之MySQL数据库 (建表规约、索引规约、SQL语句、ORM映射)

下载原版阿里JAVA开发手册  [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文内容:MySQL数据库 (建表规约.索引规约.SQL语句.ORM映射) 本文难度系数为三星(★★★) 本文为第四篇 第一篇 点评阿里JAVA手册之编程规约(命名风格.常量定义.代码风格.控制语句.注释规约) 第二篇 点评阿里JAVA手册之编程规约(OOP 规约 .集合处理 .并发处理 .其他) 第三篇 点评阿里JAVA手册之异常日志(异常处理 日志规约 ) 第四篇

[转]MyBatis动态传入表名,字段名参数的解决办法

一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这种情况下,就需要构建sql来动态传入表名.字段名了.现在对解决方法进行下总结,希望对遇到同样问题的伙伴有些帮助. 动态SQL是mybatis的强大特性之一,mybatis在对sql语句进行预编译之前,会对sql进行动态解析,解析为一个BoundSql对象,也是在此处对动态sql进行处理.下面让我们先

动态建表的学习总结

在没有学习js之前,当遇到需要建表时,往往都是比较麻烦的,而且不容易根据新的需求来更改.自从学了js之后,再也不用担心这个问题辣.使用js动态建表,在一个页面中出现多个表格时,还可以通过其函数多次调用来快速实现,简直不要太愉快~ 献上代码,有不足的地方还请指正. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Tit

反射动态建表

SQLiteHelper定义一个接口SQLiteDataTable,里边重写onCreate和onUpgrade方法.在SQLiteDaoBase基类去实现这个SQLiteDataTable接口方法. 然后UserDao继承了SQLiteDaoBase这个基类,实现抽象类里的oncreate和onUpgrade两个方法,在oncreate方法里创建user表,写sql语句. 在SQLiteHelper里的onCreate方法里通过反射获得任意一个实现了SQLiteDataTable接口的实例,再

如何在数据库动态建表

动态建表首先需要了解Statement类 Statement 对象用 Connection 的方法createStatement 创建,例如 //创建连接对象Connection connection = DBUtil.getConnection();//创建Statement对象Statement statement=connection.createStatement(); 创建完之后通过执行以sql语句为参数的Statement的方法,来执行sql语句完成对数据库的操作. Statemen

jdbc mysql动态建表

通过检查来决定是否建表 如果表尚未被建立,就执行ptmt语句更新,在数据库中创建这个表, 如果这个表已经存在,就不执行建表操作了: package SQLCon; import java.sql.*; public class CreateTables { public static boolean HaveTable(String TableName) throws ClassNotFoundException, SQLException { Class.forName("com.mysql.

MySql存储过程动态创建表并插入数据

最近做的一个项目,数据库用的是MySql,对于MySql不是很熟练,只是会简单的应用,毕竟简单的sql语句还是相通的,但是随着项目的深入复杂的sql语句开始慢慢多起来,其中一个小难点就是要根据当天的日期动态创建表,并且向其中插入数据. 具体逻辑可以理解为,先去数据库查询有没有当天的记录表,如果没有则创建表,然后执行当天的日志写入. Mysql的可视化工具我们用的是navicat,相对来说还是比较好用,当然没有sqlserver 那么人性化(很多快捷键不支持,操作累赘).下面我就来说一说用navi