程序员读书

做小程序配置小工具使用mybatisplus+thymeleaf

2019-04-16  本文已影响0人  晚安多巴胺

不知道在mybatisplus下面怎么新建表
我就想在mysql里面通过trigger,来监听新加入的乘车码,然后给他创建user表
表名都是mini_user_城市缩写
是拼接起来的
第一次


第二次

trigger
DROP TRIGGER IF EXISTS AddCompany; 
CREATE TRIGGER AddCompany after insert on mini_company_up FOR EACH ROW

call addCompany(@NEW.FLD_TABLE_MAPPER); 
存储过程
create PROCEDURE addCompany(tableName varchar(20)) 
-- 创建存储过程 命名为tests

BEGIN   -- 存储过程的开始

  set @tableNames = CONCAT(tableName); 
  -- @先在用户变量中保存值然后在以后引用它

  set @sqlStr = CONCAT('CREATE TABLE ',@tableNames,' (
  `FLD_ID` bigint(20) NOT NULL AUTO_INCREMENT,
  `FLD_OPENID` varchar(32) NOT NULL DEFAULT \'\',
  `FLD_NICKNAME` varchar(50) DEFAULT NULL,
  `FLD_REALNAME` varchar(16) DEFAULT NULL,
  `FLD_CREID` varchar(18) DEFAULT NULL,
  `FLD_MOBILE` varchar(12) DEFAULT NULL,
  `FLD_CREATE_TIME` datetime DEFAULT NULL,
  `FLD_OPERATE_TIME` datetime DEFAULT NULL,
  `FLD_CHANGE_TYPE` varchar(10) DEFAULT NULL,
  `FLD_CONTRACT_CODE` varchar(32) DEFAULT NULL,
  `FLD_CONTRACT_ID` varchar(32) DEFAULT NULL,
  `FLD_CONTRACT_EXPIRED_TIME` datetime DEFAULT NULL,
  `FLD_REQUEST_SERIAL` varchar(16) DEFAULT NULL,
  `FLD_CARD_CODE` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`FLD_ID`,`FLD_OPENID`)
) ENGINE=InnoDB AUTO_INCREMENT=38417 DEFAULT CHARSET=utf8;');
  -- 拼接查询总记录的SQL语句 

  prepare stmt from @sqlStr; -- 预定义一个语句,并将它赋给 stmt

  execute stmt ; -- 执行语句

  deallocate prepare stmt;-- 要释放一个预定义语句的资源

END;  -- 存储过程的结束

还是不行,MySQL的trigger不能使用动态sql
Dynamic SQL is not allowed in stored function or trigger

后面使用Java代码来调用数据库存储过程

// 一开始没有加两个小引号,一直不知道问题在哪里
String tableName = "\'mini_user_" + fldTableMapper+"\'";

//              CallableStatement callableStatement = sqlSession.getConnection().prepareCall("call " + "addCompany" + "(" + tableName + " )");
//              ResultSet resultSet = callableStatement.executeQuery();''

                //向驱动管理器注册驱动  ——把mysql驱动对象类的对象放置在集合中
                DriverManager.registerDriver(new com.mysql.jdbc.Driver());

                String url="jdbc:mysql://rdswrqbw5ouz7o.mysql.rds.aliyuncs.com:3306/busticket?useUnicode=true&useSSL=false&characterEncoding=utf8";
                //获取连接  ——先从集合中获取驱动,再调用驱动
                Connection connection= DriverManager.getConnection(url, "busticket", "Busticket@");
                CallableStatement callableStatement = connection.prepareCall("call " + "addCompany" + "(" + tableName + " );");
                System.out.println(callableStatement);
// 一开始忘记执行这个东西
                ResultSet resultSet = callableStatement.executeQuery();
                System.out.println(resultSet);

终于实现了,很开心

给我灵感的是这篇文章
https://www.cnblogs.com/lhhitnote/p/5498095.html
usingProcedureJava调用存储过程访问

sql语句是否支持字符串拼接一开始连这个也不知道,可以使用concat关键字
https://www.cnblogs.com/rxhuiu/p/9134009.html
concat(str1, str2,...)

中间用到了这个jdbc获取connection三种方式的知识
https://www.cnblogs.com/liuwt365/p/4095201.html
我都不知道怎么用mybatisplus获取connection

这篇文章也给我了帮助
https://blog.csdn.net/z1729734271/article/details/54731332/

还有就是发现mybatisplus的update都要用id,刚好我的表没用id,找了很多项目,找到了

//需要导入这个,不知道为什么没有提示,翻了好久资料
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
MiniCompanyUp company = new MiniCompanyUp();
            company.setFldLogo(ImgPath);
// update第一个参数是,需要更新的,后面的是条件
boolean b = service.update(company, new UpdateWrapper<MiniCompanyUp>().eq("FLD_COMPANY_ID", "abc"));

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//还有这种骚操作
MiniCompanyUp one = service.getOne(new QueryWrapper<MiniCompanyUp>()
                .lambda().eq(MiniCompanyUp::getFldCompanyId, fldCompanyId));

还有js页面加载好直接执行

上一篇下一篇

猜你喜欢

热点阅读