更新时间:2022-03-23 11:00:40 来源:极悦 浏览3870次
映射器
int dropExistTable(@Param("tableName") String tableName);//自动创建数据表
映射文件
<update id="dropExistTable" parameterType="string" statementType="STATEMENT">
CREATE TABLE ${tableName} (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` varchar(100) DEFAULT NULL,
`password ` varchar(100) DEFAULT NULL,
`create_time` 时间戳 NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
</update>
控制器
@RequestMapping("/createtable")
@ResponseBody
public String createTable(String tableName){
Map<String, Object> reMap = new HashMap<String, Object>();
int res = userService.dropExistTable(tableName);
if (res == 0) {
reMap.put("code",1);
reMap.put("msg"," 创建成功");
logger.info("'tableNameString'+ 创建成功");
}else{
reMap.put("code",-1);
reMap.put("msg"," 创建失败");
logger.info("创建失败");
}
返回 JSONUtil。获取JSON(重新映射);
}
添加属性 statementType="STATEMENT"
同时将sql中因变量的值改为${xxxx},而不是#{xxx}
statementType:STATEMENT(未预编译),PREPARED(预编译)或CALLABLE中的任何一种,告诉你MyBatis单独使用Statement,PreparedStatement或者CallableStatement。默认:准备。这里明显没有预编译,要改成非预编译..
${xxxx}:$直接在sql中生成传入的数据,对于字符串数据,需要手动加引号
List<User> selectTable(@Param("tableName") String tableName);
项目中 User 表为空,有动态创建的表结构,字段一致
映射文件 *mapper.xml
<select id="selectTable" parameterType="java.lang.String" resultMap="BaseResultMap" statementType="STATEMENT">
select * from ${tableName}
</选择>
控制器
@RequestMapping("/selectTable")
public String showSelectTable(String tableName){
List<User> objects = userService.selecTable(tableName);
System.out.println("user::::"+objects);
logger.info("成功");
返回 JSONUtil.getJSON(对象);
}
#和$符号的区别
#{}代表占位符符号,可以实现preparedStatement给占位符设置值,自动加粗样式java类型和jdbc类型转换。#{}可以有效防止sql注入。#{}可以接受简单类型值或 pojo 属性值。如果 parameterType 传递一个单一的简单类型值,#{} 可以是括号中的 value 或者其他一些名字。
${ } 表示拼接sql strand,通过 ${} 可以是 parameterType 传入的内容在 sql 中拼接出来的 jdbc 类型转换,可以接受简单类型值或者 pojo 属性值,如果 parameterType 传递单个简单类型值,{可以接受简单类型值或者 pojo 属性值,如果 parameterType 传递单个简单类型值,可以接受简单类型值或者 pojo 属性值,如果 parameterType 传递单个简单类型值,{} 只能是括号内的值.
注意:关于 order by 下面的排序规则,表名等数据库对象名,如果要传入,还应该使用${……}
int insertTable(@Param("user")User user,@Param("tableName") String tableName);
insertTable() 方法中有两个参数,一个参数是 tabelName ,另一个参数是 User object ,因此 <insert> 标签中不能有...的参数Type参数,而是使用@Param(“”)来修饰,注意,
@Param 是 import org.apache.ibatis.annotations.Param;,不要误导包。
映射器.xml
<insert id="insertTable" >
插入 ${tableName}(名称、密码、create_time)
值(#{user.name}、#{user.password}、#{user.createTime})
</插入>
控制器实现方法
@RequestMapping("/addTable")
@ResponseBody
public String addTable( String name,String password,String tableName){
Map<String, Object> reMap = new HashMap<String, Object>();
用户用户=新用户();
user.setName(name);
user.setPassword(密码);
user.setCreateTime(new Date());
System.out.println("传入用户参数"+user);
int res = userService.insertTable(user,tableName);
if (res > 0) {
reMap.put("code",1);
reMap.put("msg"," 成功 ");
logger.info("'tableNameString'+ 成功");
}else{
reMap.put("code",-1);
重新映射.put("
}
返回 JSONUtil.getJSON(reMap);
}
通过以上介绍相信大家对动态MyBatis创建表的方法已经有所了解,大家如果对此比较感兴趣,想了解更多相关知识,不妨来关注一下极悦的Mybatis-Plus视频教程,里面的课程内容由浅到深,通俗易懂,适合没有基础的小伙伴学习,希望对大家能够有所帮助。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习