SpringMVC+Mybatis逆向工程动态拼接表名进行操作

今天小编又遇到问题了,来跟大家分享一下(可能有人会问,小编这么牛逼的吗,才遇到这么点儿问题~大错特错,是问题太多了,一时想不起来发,先挑比较重要的发一发)~

最近项目里要求保存系统的聊天记录,要求是每天一张表,每天的表对每天的聊天记录进行保存和统计,这事儿开始小编想着还挺简单,无非是同样的方法每天执行呗,但是到操作数据这一块的时候问题来了,由于每天都要建一张表(小编用的是spring+springmvc+mybatis逆向做的程序),按照我原先的思路岂不是每天都要生成一遍实体类、dao、service、controller?就算小编勤快日积月累下来项目也会变得非常大,于是小编上网找到了这个方法:动态拼接表名并对该表进行操作~下面上代码吧~

controller层:

@Controller
public class HahaController {
    SimpleDateFormat sd = new SimpleDateFormat("yyyyMMdd");
    String time = sd.format(new Date());   //time用来拼接后面的表名,具体格式你们可以自己定
    Haha haha = new Haha();
    haha.setUsername(username);
    haha.setPassword(password);
    int record = Hahaservice.insertBytime(haha, time);
}

service层:

//这里只是要插入记录,用int了,只要可以返回一条数据就行
int insertSelectives(Haha haha, String time);

serviceImpl:

public int insertSelectives(Haha haha, String time) {
    HahaExample example = new HahaExample();
    example.setTime(time);   //此处有故事,下面分析
    int re = Hahamapper.insertBytime(haha, time);
    return re;
}

/**
 * 此处有个重点,因为haha表中的表只有username和password两个字段
 * 这里的time是哪里来的???
 * 开始小编也是很蒙,现在也是很蒙,不过猜测就是自己设定的变量值,放到mybatis工程中
 * 便于xml中可以取到这个example内的值(具体是为什么日后再深究)
 * 所以大家在你的实体example类中封装一下time
 * 实体类中不需做任何改动
 */

//此处只贴上来新封装的time,其他的表字段随你们的表一起生成出来(有不会mybatis逆向工程生成文件的可以看小编第一篇文章,写的自认为很详细)
public class HahaExample {
    private String time;
    public String getTime() {
        return time;
    }
    public void setTime(String time) {
        this.time = time;
    }
}

mapper.java:

/**
 * 说明:@Param("record"),这个是什么小编现在还不知道,下面xml里会用到这个record,很重要
 */
int insertBytime(@Param("record")Haha haha,@Param("time") String time);

mapper.xml:

/**
 * 刚才的recorde就在这里派上大用场了
 * HAHA_${time}是你们要拼接的表名,名字随意${time}是从controller一路传过来的变量值
 */

    insert into HAHA_${time} (USERNAME, PASSWORD)
    values (#{record.username,jdbcType=VARCHAR}, #{record.password,jdbcType=VARCHAR})

这样就可以每天生成一张表了,表名就是例如HAHA_20190419、HAHA_20190420这样的,这个只是插入的操作,等小编做完程序后把增、删、改的操作也发上来~

以上就是实现动态拼接表名,并对该表进行操作的事例了,由于小编也是个新手写的有不对的地方还请各位指点~勿喷呦!!!

你可能感兴趣的:(Java后端,数据库)