关于myabtis动态创建表
之前从来没接触过mybatis的自动创建表,今天开了个脑洞,就想实现一下。
Controller代码
@RequestMapping("/insert/{tableName}")
@ResponseBody
private int insert(@PathVariable("tableName") String tableName){
return bookService.createNew(tableName);
}
@PathVariable是为了能获取在url后面的参数 localhost:8080/xx/insert/想要创建的表名
service接口代码
int createNew(@Param("tableName")String tableName);
@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中
service实现类代码
@Override
public int createNew(String tableName) {
return xxDao.createNew(tableName);
}
在这里return一下dao的方法
Dao是一个接口,与xml文件映射,xml是写sql语句的地方
int createNew(@Param("tableName")String tableName);
对应dao的xml
<update id="createNew" parameterType="String">
CREATE TABLE ${tableName} (
id INT(20) unsigned NOT NULL AUTO_INCREMENT,
name VARCHAR(40),
number INT,
PRIMARY KEY (id)
)DEFAULT CHARSET=utf8;
</update>
id与dao的方法名对应,${tableName}就是可以接受页面传过来的tableName,后面就是关于字段的配置,id int类型 主键 非空,字符集什么的。
遇到的坑:传参数时接收不到tableName
解决办法:加上@Param注解
遇到的坑:sql语句错误
解决办法:重新输入,细心一点
遇到的坑:红标处报错
解决办法:在idea中选Alt+Enter第一个 选择database,然后在NOT NULL前面加上unsigned