项目实训记录(七)——mybatis生成表

本文记录了一个前后端交互的过程,前端通过axios发送字段名和类型,后端接收并存储到Map中,然后使用JDBC或Mybatis创建数据库表。详细介绍了后端如何处理请求,包括数据存储、表创建的SQL生成及执行,展示了相关代码片段。
摘要由CSDN通过智能技术生成

目录

一、最近做了什么?

二、问题与实现

1.问题

2.后端获取,并存到map里

3.调用service方法,创建表

4.再补充一下JDBC实现

一、最近做了什么?

还是五月份的工作,

五月底,还是在进行系统功能的完善。

首先是用户端的bug问题——已解决

然后是管理员端的创建表部分——虽然之后使用JDBC实现了。但是最开始是使用mybatis实现的。

因为从前端传来的表名、字段名和字段类型都是String类型,最后要生成数据库表。记录一下这个过程。
 

二、问题与实现

1.问题

前端通过axios 向后端post字段名和字段类型。

代码如下:

    click3(){
        //这里就直接复制粘贴即可
        this.submitForm3();
          this.dialogVisible=true
      },
         submitForm3() {
       this.columnList.forEach((item,index) => {
         let params = new URLSearchParams()
         params.append('DBid',this.dbid)
         params.append('CHARTid',this.chartid)
         params.append('MEN',this.columnList[index])
         params.append('Types',this.aboutColumns.types[index])
         params.append('ZDes',this.aboutColumns.ZDescrs[index])
         params.append('ZN',this.aboutColumns.ZNames[index])
         axios.post(`api/insertMeta`,params).then(res=>{
           console.log('表的详细信息第 '+index+' 列已经发出去了')
           console.log(res.data)
         })
});
     //这里可以查表名,也能根据查表有哪些列和类型
        //创建实体表
      let params1 = new URLSearchParams()
      params1.append('DBid',this.dbid)
      params1.append('CHARTid',this.chartid)
      params1.append('EN',this.biaoF.Ename)
      axios.post(`api/createUTable`,params1).then(res=>{
         console.log('已发出实体表相关信息')
         console.log(res.data)
         })
    
       
       
    },

2.后端获取,并存到map里

代码如下(示例):

List<Meta> list = metaService.findMetasByCId(chartid,dbid);

        if (list.size()==0){
            System.out.println(("该实体表的字段信息为空!无法创建实体表!"));
        }

        Map<String, String> mymap = new HashMap<>(); //使用map的key,value进行存值,key:"存的是field" ,value:"存储的是type"
        for (Meta metas : list) {
            String type = metas.getCN();
            String field = metas.getEN();
            mymap.put(field, type);//遍历template中的值将其分别存储到key,value中
        }

3.调用service方法,创建表

最后对应的mapper.xml文件代码如下:

  <update id="createUTable" parameterType="map">
        create table ${name} (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        <foreach collection="mymap" index="key"  item="value" separator=",">
            ${key} ${value}(255)
        </foreach>
        ,PRIMARY KEY (`id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    </update>

4.再补充一下JDBC实现

在service层中的实现代码如下:

 @Override
    public int createUTable(String cName, Map<String, String> mymap,String dName) throws SQLException {

        String url="jdbc:mysql://localhost:3306/?allowPublicKeyRetrieval=true&useSSL=false";
        String user="root";
        String pw="xxxx";
        Connection con = DriverManager.getConnection(url,user,pw);//获得数据库链接对象
        con.prepareStatement("USE "+dName).execute();//使用test 表
        PreparedStatement  ps=con.prepareStatement("SHOW TABLES LIKE \""+cName+"\"");
        ResultSet rs=ps.executeQuery();
        if(rs.next())
            System.out.println("表已存在");
        else {
            String sql="CREATE TABLE "+cName+"(id INT(11) PRIMARY KEY,";
//            这里应该依次遍历map
            for (String key : mymap.keySet()) {
                System.out.println("key= "+ key + " and value= " + mymap.get(key));
                sql+=key +" "+mymap.get(key)+"(10), ";
            }

            sql=sql.substring(0,sql.length()-2);
            sql+=")";
            System.out.println(sql);
            ps = con.prepareStatement(sql);
            ps.executeUpdate();
            System.out.println("表创建成功");

        }
        return 0;
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值