今天小编又遇到问题了,来跟大家分享一下(可能有人会问,小编这么牛逼的吗,才遇到这么点儿问题~大错特错,是问题太多了,一时想不起来发,先挑比较重要的发一发)~
最近项目里要求保存系统的聊天记录,要求是每天一张表,每天的表对每天的聊天记录进行保存和统计,这事儿开始小编想着还挺简单,无非是同样的方法每天执行呗,但是到操作数据这一块的时候问题来了,由于每天都要建一张表(小编用的是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 id="insertBytime" parameterType="com.po.Haha" >
insert into HAHA_${time} (USERNAME, PASSWORD)
values (#{record.username,jdbcType=VARCHAR}, #{record.password,jdbcType=VARCHAR})
</insert>
这样就可以每天生成一张表了,表名就是例如HAHA_20190419、HAHA_20190420这样的,这个只是插入的操作,等小编做完程序后把增、删、改的操作也发上来~
以上就是实现动态拼接表名,并对该表进行操作的事例了,由于小编也是个新手写的有不对的地方还请各位指点~勿喷呦!!!