- 说明
最近几天在搞数据的分库和分表!本想去手动创建表的发现表太多了,按照平常的JDBC,或hibernate都好做,可问题现在用的是mybatis这个持久层框架,于是在网上逛了下发现mybatis居然也可以行得通.只不过需要将xml中的SQL改成非预编译的.
如下:
<!--#{***,jdbtTyype=**}这种在此处并不适用因为statementType的参数[STATEMENT]会导致其不会进行预编译,#{}此形式的入参却是在预编译中进行
注入,与之对应的是[PREPARED]默认选择是此-->
<insert id="inserUser" parameterType="java.util.Map" statementType="STATEMENT">
- 例子
下面是CRUD的分别举例:
创建表:
<update id="createTableClass" parameterType="java.lang.String" statementType="STATEMENT">
CREATE TABLE ${tableName}(
id int NOT NULL AUTO_INCREMENT,
`account` varchar(16) NOT NULL,
`password` varchar(32) NOT NULL,
`name` varchar(20) NOT NULL,
PRIMARY KEY (id)
)
</update>
删除表(并不止删除表数据)
<delete id="delateTable" parameterType="java.lang.String" statementType="STATEMENT">
DROP TABLE ${tableName};
</delete>
多表插入
<insert id="inserUser" parameterType="java.util.Map" statementType="STATEMENT">
insert into ${tableName}
(
<include refid="Base_Column_List" />
)
values(
${account},Md5(${password}),${name}
)
</insert>
多表查询:
<select id="findNameByTable" resultType="java.util.HashMap" parameterType="java.lang.String" statementType="STATEMENT" >
select
<include refid="Base_Column_List" />
FROM ${tableName}
</select>
对应的mapper接口如下
package com.study.dynamictablecrud.mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
/**
* TableSysMapper: 数据库动态表名增删改查
*
* @auther : 姚欣华
**/
@Component
public interface TableSysMapper {
public List<Map<String,String>> findNameByTable(@Param("tableName") String tableName);
public void createTableClass(@Param("tableName") String tableName);
public void inserUser(Map<String,String> maps);
public void delateTable(@Param("tableName") String tableName);
}