不知道在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页面加载好直接执行
网友评论