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

来源:互联网 发布:2018年网络dj歌曲 编辑:程序博客网 时间:2024/05/20 09:22

能实现的需求:

需求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 {@Autowiredprivate 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;}/** * 创建表的方法 * 修改表字段长度方法 * */@Testpublic 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_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>



执行成功

谢谢观看



原创粉丝点击