您的位置:首页 > 编程语言 > Java开发

用java实现mybatis的动态创建表、修改表功能

2017-07-19 16:33 323 查看

能实现的需求:

需求1:要实现一次创建多张表,或者修改表的功能,来减轻手动创建的重复操作

需求2:分表功能 根据业务创建不同公司的表

一、test类 java代码

package org.uz.dxt.service;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.omg.CosNaming.NamingContextExtPackage.StringNameHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.uz.dxt.dao.cuiji.CuijiMapper;
import org.uz.dxt.model.bankbase.Batch;
import org.uz.dxt.util.CalculatorUtil;

import com.alibaba.fastjson.JSON;
import com.sun.istack.logging.Logger;

//test类想要使用mybatise 必须使用这两个注解
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class Test01 {
@Autowired
private CuijiMapper cuijiMapper;

private static Logger logger = Logger.getLogger(Test01.class);

//拼接sql创建表的语句
public String CreateCuijiTableName(String tablename){
String uSql = "create table IF NOT EXISTS `cuiji`."+tablename
+"(`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '记录ID',"
+"`type` int(11) DEFAULT NULL COMMENT '记录类别;0=电催;1=CP;2=评语;3=调案;',"
+"`caseid` varchar(50) DEFAULT NULL COMMENT '案件编号', "
+"`doccode` varchar(50) DEFAULT NULL COMMENT '债务人身份证号',"
+"`name` varchar(50) DEFAULT NULL COMMENT '通话人姓名',"
+"`phone` varchar(80) DEFAULT NULL COMMENT '电话号码',"
+"`summary` varchar(8) DEFAULT NULL COMMENT '联络摘要',"
+"`infor` varchar(10000) DEFAULT NULL COMMENT '通话内容',"
+"`userid` int(11) DEFAULT NULL COMMENT '业务员ID', "
+"`companycode` varchar(30) DEFAULT NULL COMMENT '催收公司编码',"
+"`callDate` timestamp NULL DEFAULT NULL COMMENT '联络日期', "
+"`direction` int(11) DEFAULT NULL COMMENT '通话方向;0=呼出;1=呼入',"
+"`relation` int(11) DEFAULT NULL COMMENT '关系;1=本人;2=直系;3=亲属;4=联系人;5=担保人;6=其他', "
+"`cardcode` varchar(50) DEFAULT NULL COMMENT 'cardcode/contractcode合并为此一个字段,type用来区分使用哪一个\r\ntype=0 信用卡,type=1非信用卡',"
+"`cardtype` int(2) DEFAULT NULL COMMENT '0=信用卡 1=非信用卡',"
+"`recordid` int(11) DEFAULT NULL COMMENT '通话记录主键Id',"
+"`commtype` varchar(10) DEFAULT NULL COMMENT '联系方式:手机,司电,宅电 新表添加此字段',"
+"PRIMARY KEY (`id`), "
+"KEY `caseid_index` (`caseid`) USING BTREE"
+")ENGINE=InnoDB DEFAULT CHARSET=utf8";

return uSql;

}
/**
* 创建表的方法
* 修改表字段长度方法
* */
@Test
public void CreateCuijiTable(){
List<String> list=tableName();
/*//创建表的方法
for (int i = 0; i < list.size(); i++) {
String uSql=CreateCuijiTableName(list.get(i));
System.out.println(uSql);
cuijiMapper.updateTableField(uSql);

}*/

/*//修改表字段长度方法
for (int i = 0; i < list.size(); i++) {
String uSql=alterCuijiByPhone(list.get(i));
cuijiMapper.updateTableField(uSql);

}*/

}
//动态表名
public List<String> tableName() {
List<String> nameList=new ArrayList<String>();
nameList.add("t_cuiji_abbj");
nameList.add("t_cuiji_abdy");
nameList.add("t_cuiji_abdz");
nameList.add("t_cuiji_abhb");
nameList.add("t_cuiji_abhz");
nameList.add("t_cuiji_abjm");
nameList.add("t_cuiji_abjn");
nameList.add("t_cuiji_ablw");
nameList.add("t_cuiji_ably");
nameList.add("t_cuiji_abes");
nameList.add("t_cuiji_abqj");
nameList.add("t_cuiji_abrz");
nameList.add("t_cuiji_absd");
nameList.add("t_cuiji_abwh");
nameList.add("t_cuiji_abta");
nameList.add("t_cuiji_abwuh");
nameList.add("t_cuiji_abxt");
nameList.add("t_cuiji_abyt");
nameList.add("t_cuiji_abzb");
nameList.add("t_cuiji_abzz");
nameList.add("t_cuiji_bobcfc");
nameList.add("t_cuiji_bmbj");
nameList.add("t_cuiji_bmw");
nameList.add("t_cuiji_bmsd");
nameList.add("t_cuiji_bmwh");
nameList.add("t_cuiji_bqzl");
nameList.add("t_cuiji_bqjr");
nameList.add("t_cuiji_cbdz");
nameList.add("t_
baa1
cuiji_bocgz");
nameList.add("t_cuiji_cbhb");

return nameList;
}

//拼接修改字段长度的sql语句
public String alterCuijiByPhone(String tablename){
String uSql = "alter table `cuiji`."+tablename
+" MODIFY phone varchar(80)";
return uSql;
}

}


二、Dao方法

void updateTableField(@Param("uSql")String uSql);



三 mapper.xml

<update id="updateTableField" parameterType="java.lang.String" >
${uSql}
</update>


执行成功

谢谢观看
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐