更新時(shí)間:2022-03-23 11:00:40 來源:動(dòng)力節(jié)點(diǎn) 瀏覽4235次
映射器
int dropExistTable(@Param("tableName") String tableName);//自動(dòng)創(chuàng)建數(shù)據(jù)表
映射文件
<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` 時(shí)間戳 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"," 創(chuàng)建成功");
logger.info("'tableNameString'+ 創(chuàng)建成功");
}else{
reMap.put("code",-1);
reMap.put("msg"," 創(chuàng)建失敗");
logger.info("創(chuàng)建失敗");
}
返回 JSONUtil。獲取JSON(重新映射);
}
添加屬性 statementType="STATEMENT"
同時(shí)將sql中因變量的值改為${xxxx},而不是#{xxx}
statementType:STATEMENT(未預(yù)編譯),PREPARED(預(yù)編譯)或CALLABLE中的任何一種,告訴你MyBatis單獨(dú)使用Statement,PreparedStatement或者CallableStatement。默認(rèn):準(zhǔn)備。這里明顯沒有預(yù)編譯,要改成非預(yù)編譯..
${xxxx}:$直接在sql中生成傳入的數(shù)據(jù),對(duì)于字符串?dāng)?shù)據(jù),需要手動(dòng)加引號(hào)
List<User> selectTable(@Param("tableName") String tableName);
項(xiàng)目中 User 表為空,有動(dòng)態(tài)創(chuàng)建的表結(jié)構(gòu),字段一致
映射文件 *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(對(duì)象);
}
#和$符號(hào)的區(qū)別
#{}代表占位符符號(hào),可以實(shí)現(xiàn)preparedStatement給占位符設(shè)置值,自動(dòng)加粗樣式java類型和jdbc類型轉(zhuǎn)換。#{}可以有效防止sql注入。#{}可以接受簡(jiǎn)單類型值或 pojo 屬性值。如果 parameterType 傳遞一個(gè)單一的簡(jiǎn)單類型值,#{} 可以是括號(hào)中的 value 或者其他一些名字。
${ } 表示拼接sql strand,通過 ${} 可以是 parameterType 傳入的內(nèi)容在 sql 中拼接出來的 jdbc 類型轉(zhuǎn)換,可以接受簡(jiǎn)單類型值或者 pojo 屬性值,如果 parameterType 傳遞單個(gè)簡(jiǎn)單類型值,{可以接受簡(jiǎn)單類型值或者 pojo 屬性值,如果 parameterType 傳遞單個(gè)簡(jiǎn)單類型值,可以接受簡(jiǎn)單類型值或者 pojo 屬性值,如果 parameterType 傳遞單個(gè)簡(jiǎn)單類型值,{} 只能是括號(hào)內(nèi)的值.
注意:關(guān)于 order by 下面的排序規(guī)則,表名等數(shù)據(jù)庫(kù)對(duì)象名,如果要傳入,還應(yīng)該使用${……}
int insertTable(@Param("user")User user,@Param("tableName") String tableName);
insertTable() 方法中有兩個(gè)參數(shù),一個(gè)參數(shù)是 tabelName ,另一個(gè)參數(shù)是 User object ,因此 <insert> 標(biāo)簽中不能有...的參數(shù)Type參數(shù),而是使用@Param(“”)來修飾,注意,
@Param 是 import org.apache.ibatis.annotations.Param;,不要誤導(dǎo)包。
映射器.xml
<insert id="insertTable" >
插入 ${tableName}(名稱、密碼、create_time)
值(#{user.name}、#{user.password}、#{user.createTime})
</插入>
控制器實(shí)現(xiàn)方法
@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("傳入用戶參數(shù)"+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);
}
通過以上介紹相信大家對(duì)動(dòng)態(tài)MyBatis創(chuàng)建表的方法已經(jīng)有所了解,大家如果對(duì)此比較感興趣,想了解更多相關(guān)知識(shí),不妨來關(guān)注一下動(dòng)力節(jié)點(diǎn)的Mybatis-Plus視頻教程,里面的課程內(nèi)容由淺到深,通俗易懂,適合沒有基礎(chǔ)的小伙伴學(xué)習(xí),希望對(duì)大家能夠有所幫助。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743